<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Vedant Khairnar</title>
    <description>The latest articles on Forem by Vedant Khairnar (@vedantkhairnar).</description>
    <link>https://forem.com/vedantkhairnar</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%2F243384%2Fa0e81e2b-c456-4880-b656-d0840bb2c0e8.jpeg</url>
      <title>Forem: Vedant Khairnar</title>
      <link>https://forem.com/vedantkhairnar</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/vedantkhairnar"/>
    <language>en</language>
    <item>
      <title>Building Your First AI Agent: Tavily X LangGraph</title>
      <dc:creator>Vedant Khairnar</dc:creator>
      <pubDate>Mon, 22 Sep 2025 19:19:40 +0000</pubDate>
      <link>https://forem.com/vedantkhairnar/building-your-first-ai-agent-tavily-x-langgraph-8c4</link>
      <guid>https://forem.com/vedantkhairnar/building-your-first-ai-agent-tavily-x-langgraph-8c4</guid>
      <description>&lt;h1&gt;
  
  
  Building Your First AI Agent: Tavily X LangGraph
&lt;/h1&gt;




&lt;h2&gt;
  
  
  The Challenge: When Static Knowledge Meets Dynamic Reality
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Picture this:&lt;/strong&gt; You're a developer at a fintech startup. Your CEO bursts into the office on Monday morning with excitement. "I just saw ChatGPT answer questions about current market conditions! Can we build something like that for our trading platform?"&lt;/p&gt;

&lt;p&gt;You think for a moment. Your current system is smart, but it's trapped in time—limited to whatever data it was trained on. The markets change every second, but your AI is stuck in the past.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sound familiar?&lt;/strong&gt; You're not alone. This is the moment thousands of developers face: the gap between static AI knowledge and dynamic real-world information.&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%2Fqhzgu3hiae5nlit5zn7l.gif" 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%2Fqhzgu3hiae5nlit5zn7l.gif" alt="This is Fine" width="480" height="270"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;"My AI model is perfectly fine... it just thinks it's still 2023"&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;🎬 &lt;strong&gt;Watch the full tutorial:&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href="https://youtu.be/H7kk2yQKGyc" rel="noopener noreferrer"&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%2F1nge5r72dokzi5zxvtai.jpg" alt="AI Agent Tutorial Video" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Click above to watch the 10-minute coding walkthrough, or continue reading for the complete guide!&lt;/em&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  The Revelation: From Scripts to Intelligent Systems
&lt;/h2&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%2Frzs0vzzfds0vgl2kk8bl.gif" 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%2Frzs0vzzfds0vgl2kk8bl.gif" alt="Mind Blown" width="350" height="233"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;The moment you realize the difference between scripts and agents&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  What Makes Something "Intelligent"?
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;💡 What is an AI Agent?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
An AI agent is a software system that can perceive its environment, make decisions, and take actions to achieve specific goals. Unlike simple scripts that follow fixed steps, AI agents can adapt their behavior based on the situation, maintain context across interactions, and handle unexpected scenarios intelligently.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Let's start with a fundamental question that might be on your mind:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;🤔 "What's the difference between a regular script that calls APIs and an 'intelligent agent'?"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Imagine you're planning a dinner party. A script would be like following a rigid recipe— step 1, step 2, step 3, done. But an intelligent agent? That's like having a chef who can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Adapt to what ingredients are available&lt;/li&gt;
&lt;li&gt;Make decisions based on dietary restrictions&lt;/li&gt;
&lt;li&gt;Remember preferences from last time&lt;/li&gt;
&lt;li&gt;Handle unexpected situations gracefully&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;An AI agent doesn't just follow instructions— it processes information, makes decisions, and maintains context throughout a conversation.&lt;/p&gt;
&lt;h3&gt;
  
  
  The Architecture of Intelligence
&lt;/h3&gt;

&lt;p&gt;Here's where most developers get stuck. You start thinking: "I need to call an API, process the response, format it nicely..." But that's thinking like a script, not like an agent.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The paradigm shift:&lt;/strong&gt; Instead of sequential function calls, think of independent processing nodes that communicate through shared state. Each node has one job, does it well, and passes information forward.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;LangGraph Workflow Visualization:

[Question] → [Search Node] → [Process Node] → [Answer]
     ↓             ↓              ↓           ↓
   State      State Update   State Update  Final State
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is where &lt;strong&gt;LangGraph&lt;/strong&gt; comes in—it's the framework that turns your collection of functions into an intelligent workflow.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;💡 What is LangGraph?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
LangGraph is an opensource framework for building stateful, multi-step applications with Large Language Models (LLMs). Think of it as a workflow orchestrator that lets you create AI agents by connecting different processing steps (called "nodes") through a shared state. Instead of writing linear scripts, you build intelligent systems that can make decisions, handle errors, and scale gracefully.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  The Journey Begins: Meet Your Tools
&lt;/h2&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%2Fgdvoovussjewdz1i5ib3.gif" 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%2Fgdvoovussjewdz1i5ib3.gif" alt="Brain Meme" width="480" height="264"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Chapter 1: The Search Intelligence Layer
&lt;/h3&gt;

&lt;p&gt;First, let's talk about the star of our show: &lt;strong&gt;Tavily&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;💡 What is Tavily?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Tavily is an AI-optimized search and data-extraction API designed specifically for AI applications. Unlike traditional search APIs that return raw HTML and links, Tavily intelligently processes web content, extracts relevant information, and provides clean, structured data that your AI systems can immediately use. Think of it as having a smart research assistant built into your code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🤔 "Why not just use Google Search API or call ChatGPT directly?"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Great question! Let me tell you a story.&lt;/p&gt;

&lt;p&gt;Remember the last time you asked someone to "research" something for you? If you asked your intern, they might come back with a pile of printed web pages and say "here you go!" But if you asked an experienced analyst, they'd come back with a clean summary, key insights, and relevant sources.&lt;/p&gt;

&lt;p&gt;That's the difference between traditional search APIs and Tavily:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Traditional Search APIs&lt;/strong&gt; are like your intern:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Give you raw HTML that needs parsing&lt;/li&gt;
&lt;li&gt;Return results in unpredictable formats&lt;/li&gt;
&lt;li&gt;Require extensive filtering and processing&lt;/li&gt;
&lt;li&gt;No understanding of what information is actually useful&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Tavily&lt;/strong&gt; is like your experienced analyst:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Intelligently extracts and processes content from multiple sources&lt;/li&gt;
&lt;li&gt;Understands context and relevance&lt;/li&gt;
&lt;li&gt;Delivers clean, structured information ready for AI consumption&lt;/li&gt;
&lt;li&gt;Provides built-in analysis and synthesis&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Chapter 2: The Workflow Orchestrator
&lt;/h3&gt;

&lt;p&gt;Now, let's talk about &lt;strong&gt;LangGraph&lt;/strong&gt; in more detail.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;🤔 "Can't I just write regular Python functions that call each other?"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Absolutely! You could write something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;simple_agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;question&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;search_results&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;search_web&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;question&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;answer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;format_answer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;search_results&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;answer&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But here's what happens in the real world:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Your CEO wants to add fact-checking: "Rewrite everything!"&lt;/li&gt;
&lt;li&gt;Your CTO wants error handling: "Rewrite everything!"
&lt;/li&gt;
&lt;li&gt;Your PM wants to save results to a database: "Rewrite everything!"&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%2Fw0i966dlj27hog7rwkhn.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%2Fw0i966dlj27hog7rwkhn.png" alt="I" width="800" height="779"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With LangGraph, adding new capabilities means adding new nodes, not rewriting your entire system. It's like building with LEGO blocks instead of carving from stone.&lt;/p&gt;




&lt;h2&gt;
  
  
  Building Our First Agent: The Step-by-Step Story
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Setting the Stage
&lt;/h3&gt;

&lt;p&gt;Let's create something practical: an AI agent that can answer questions about current events with verified sources. But here's the key - we'll build this in two stages to show you the progression from simple concept to production-ready system.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Learning Path:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Hello World&lt;/strong&gt;: 4 lines that demonstrate the core concept&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Production Agent&lt;/strong&gt;: Full workflow with proper architecture&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This approach mirrors how you should think about building AI systems - start simple, understand the fundamentals, then add sophisticated orchestration.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Hello World - The Foundation (2 minutes)
&lt;/h3&gt;

&lt;p&gt;Before we build a complex agent, let's understand what makes Tavily special with the simplest possible example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# hello_tavily.py - Your first intelligent search in 4 lines
&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;
Hello World: Your First Tavily Search in 4 Lines
This is the simplest possible example to get started with Tavily.
&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;

&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;dotenv&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;load_dotenv&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;tavily&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;TavilyClient&lt;/span&gt;

&lt;span class="c1"&gt;# Load your API key
&lt;/span&gt;&lt;span class="nf"&gt;load_dotenv&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="c1"&gt;# Initialize Tavily client  
&lt;/span&gt;&lt;span class="n"&gt;tavily&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;TavilyClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getenv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;TAVILY_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="c1"&gt;# Make a search request &amp;amp; print it - This is the magic!
&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;tavily&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;search&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;What are the latest Python features?&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;include_answer&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;answer&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;No answer found&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Run this and you'll see:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Python 3.13 features a revamped interactive interpreter with multi-line editing and an experimental free-threaded mode. It also includes improved type hints and better error messages.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2F68v92v82fh2886n5xez7.gif" 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%2F68v92v82fh2886n5xez7.gif" alt="It Just Works" width="498" height="230"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;"It just works!" - The developer's dream&lt;/em&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;🤔 "Why start so simple?"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Because this minimal example demonstrates the fundamental breakthrough: &lt;strong&gt;Tavily doesn't give you search results - it gives you intelligence.&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Look at what just happened:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You asked a question in plain English&lt;/li&gt;
&lt;li&gt;Tavily searched multiple sources&lt;/li&gt;
&lt;li&gt;AI analyzed and synthesized the information
&lt;/li&gt;
&lt;li&gt;You got back a coherent, intelligent answer&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No HTML parsing. No result filtering. No complex data processing. Just intelligence.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;💡 What does &lt;code&gt;include_answer=True&lt;/code&gt; do?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
This parameter tells Tavily to not just return search results, but to analyze and synthesize the information using AI. Instead of getting back URLs and snippets, you get a coherent, intelligent answer that combines information from multiple sources. It's like having a research analyst read everything and give you a summary.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The &lt;code&gt;include_answer=True&lt;/code&gt; parameter is what makes this magical - it tells Tavily "don't just find information, understand it and give me a smart answer."&lt;/p&gt;
&lt;h3&gt;
  
  
  Step 2: The Environment Setup
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Our simple dependency list&lt;/span&gt;
tavily-python    &lt;span class="c"&gt;# The AI-optimized search layer&lt;/span&gt;
langgraph        &lt;span class="c"&gt;# The workflow orchestration framework  &lt;/span&gt;
python-dotenv    &lt;span class="c"&gt;# Secure environment management&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;🤔 "Only three dependencies? Seems too simple!"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That's the beauty of using specialized tools. You're not building a search engine or a workflow framework— you're building intelligence on top of existing, optimized infrastructure.&lt;/p&gt;

&lt;p&gt;Think of it like building a house. You don't manufacture bricks; you use bricks to build something amazing.&lt;/p&gt;
&lt;h3&gt;
  
  
  Step 3: From Simple to Sophisticated - The Production Agent
&lt;/h3&gt;

&lt;p&gt;Now that you understand the core concept, let's build a production-ready agent that adds proper workflow orchestration:&lt;/p&gt;
&lt;h4&gt;
  
  
  The State Blueprint
&lt;/h4&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;typing&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;TypedDict&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;AgentState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;TypedDict&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;question&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;
    &lt;span class="n"&gt;search_results&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;  
    &lt;span class="n"&gt;answer&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;💡 What is TypedDict?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
TypedDict is a Python feature that lets you define the structure of a dictionary with specific key names and types. It's like creating a contract that says "this dictionary will always have these exact keys with these specific data types." This helps prevent bugs and makes your code self-documenting.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This innocent-looking piece of code is actually profound. You're defining the "memory" of your agent— what information it carries as it moves through its thinking process.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;State Flow Visualization:

Initial State:           After Search Node:        After Answer Node:
{                       {                         {
  question: "...",        question: "...",          question: "...",
  search_results: {},     search_results: {...},   search_results: {...},
  answer: ""              answer: ""                answer: "Final answer"
}                       }                         }

     ↓                       ↓                         ↓
[Search Node] ────────→ [Answer Node] ────────→ [END]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;🤔 "Why use TypedDict instead of a regular dictionary?"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Type safety! Your agent's state is like a contract— each node knows exactly what data it can expect and what it should provide. This prevents bugs and makes your code self-documenting.&lt;/p&gt;

&lt;h4&gt;
  
  
  The Intelligence Nodes
&lt;/h4&gt;

&lt;p&gt;Now comes the fun part— defining how your agent thinks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Node 1: The Research Phase&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;search_web&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;state&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;AgentState&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;
    Node 1: Intelligent Web Search

    Uses Tavily&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;s AI-optimized search to find and process web information.
    Behind the scenes: Tavily searches multiple sources, extracts relevant content,
    and uses AI to synthesize the information into a coherent answer.
    &lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;🔍 Searching: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;state&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;question&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;search_results&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;tavily&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;search&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;state&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;question&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="n"&gt;max_results&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;           &lt;span class="c1"&gt;# Number of sources to aggregate
&lt;/span&gt;        &lt;span class="n"&gt;include_answer&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;      &lt;span class="c1"&gt;# Get AI-generated answer, not just links!
&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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;search_results&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;search_results&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;🤔 "What exactly happens when I set &lt;code&gt;include_answer=True&lt;/code&gt;?"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is where Tavily's intelligence shines. Behind this simple parameter, Tavily is:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Searching across multiple high-quality sources&lt;/li&gt;
&lt;li&gt;Extracting relevant content from each source&lt;/li&gt;
&lt;li&gt;Analyzing the context and relevance&lt;/li&gt;
&lt;li&gt;Synthesizing information from multiple sources&lt;/li&gt;
&lt;li&gt;Generating a coherent answer with proper attribution&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It's like having a research team that can read hundreds of articles and give you a smart summary in seconds.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Node 2: The Synthesis Phase&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;generate_answer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;state&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;AgentState&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;
    Node 2: Answer Synthesis and Formatting

    Takes the search results from Tavily and formats them into a clean,
    user-friendly response with proper source attribution.
    &lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;🤖 Formatting answer...&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# Extract Tavily's AI-generated answer (the smart synthesis)
&lt;/span&gt;    &lt;span class="n"&gt;ai_answer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;state&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;search_results&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;answer&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;No answer found&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# Extract source URLs for transparency and verification
&lt;/span&gt;    &lt;span class="n"&gt;sources&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;- &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;title&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;url&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; 
              &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;state&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;search_results&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;results&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt;

    &lt;span class="c1"&gt;# Combine the intelligent answer with source attribution
&lt;/span&gt;    &lt;span class="n"&gt;final_answer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;ai_answer&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="s"&gt;Sources:&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sources&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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;answer&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;final_answer&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;🤔 "Why separate this into its own node instead of doing it in the search function?"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Modularity! Each node has a single responsibility:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Search node: Get information&lt;/li&gt;
&lt;li&gt;Answer node: Format and present&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tomorrow, when you want to add a fact-checking node between them, you just insert it. No rewriting required.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 4: The Workflow Architecture
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;💡 What is StateGraph?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
StateGraph is LangGraph's core class for building workflows. It's like a flowchart for your code where each box (node) is a function, and arrows (edges) show how data flows between them. The "state" is the shared memory that gets passed and updated as it moves through each node.&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;create_agent&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;
    Build the AI Agent Workflow

    This creates a StateGraph where:
    - Each node is an independent function that can read/update shared state
    - LangGraph handles orchestration, state management, and execution flow
    - Easy to extend: just add more nodes and define their connections
    &lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="c1"&gt;# Create the workflow graph
&lt;/span&gt;    &lt;span class="n"&gt;workflow&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;StateGraph&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;AgentState&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# Define our processing nodes
&lt;/span&gt;    &lt;span class="n"&gt;workflow&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add_node&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;search&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;search_web&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;        &lt;span class="c1"&gt;# Step 1: Gather information  
&lt;/span&gt;    &lt;span class="n"&gt;workflow&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add_node&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;answer&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;generate_answer&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;   &lt;span class="c1"&gt;# Step 2: Process and format
&lt;/span&gt;
    &lt;span class="c1"&gt;# Define the flow of intelligence
&lt;/span&gt;    &lt;span class="n"&gt;workflow&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set_entry_point&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;search&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;      &lt;span class="c1"&gt;# Start here
&lt;/span&gt;    &lt;span class="n"&gt;workflow&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add_edge&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;search&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;answer&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;   &lt;span class="c1"&gt;# After search, go to answer
&lt;/span&gt;    &lt;span class="n"&gt;workflow&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add_edge&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;answer&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;END&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;        &lt;span class="c1"&gt;# After answer, we're done
&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;workflow&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;compile&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;LangGraph Architecture:

    START
      ↓
 ┌─────────────┐
 │ search_web  │ ← Node 1: Web Intelligence
 │ (Tavily)    │
 └─────────────┘
      ↓
 ┌─────────────┐
 │generate_    │ ← Node 2: Format &amp;amp; Sources
 │answer       │
 └─────────────┘
      ↓
     END

State flows through each node:
• Each node reads current state
• Each node returns state updates  
• LangGraph manages the transitions
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is where your collection of functions becomes an intelligent agent. You're not just calling functions— you're orchestrating a thinking process.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;🤔 "What does &lt;code&gt;workflow.compile()&lt;/code&gt; actually do?"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It optimizes your graph for execution! LangGraph analyzes your workflow, optimizes the execution path, and creates a runtime engine that can handle state management, error recovery, and parallel processing when possible.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Moment of Truth: Bringing Intelligence to Life
&lt;/h2&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%2Fmmamwjcxrninnvil87ui.gif" 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%2Fmmamwjcxrninnvil87ui.gif" alt="Moment of Truth" width="320" height="320"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;When your code actually works on the first try&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Let's see our progression in action:&lt;/p&gt;
&lt;h3&gt;
  
  
  The Simple Version First:
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python hello_tavily.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Python 3.13 features a revamped interactive interpreter with multi-line editing and an experimental free-threaded mode. It also includes improved type hints and better error messages.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;This is profound!&lt;/strong&gt; In two lines of code, you asked a question and got back synthesized intelligence from multiple web sources. No parsing, no filtering, no complexity.&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%2Fcze0xmeu896bujt6klnj.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%2Fcze0xmeu896bujt6klnj.jpg" alt="Surprised Pikachu" width="600" height="908"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;When two lines of code gives you web intelligence&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  The Production Agent:
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python langgraph_agent.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;Question:&lt;/strong&gt; "What are the latest developments in AI regulation?"&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Agent's Process:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;🔍 &lt;strong&gt;Research Phase&lt;/strong&gt;: Tavily searches current sources, finds recent articles about AI regulation&lt;/li&gt;
&lt;li&gt;🤖 &lt;strong&gt;Synthesis Phase&lt;/strong&gt;: Formats the intelligent summary with sources&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Result:&lt;/strong&gt; A comprehensive answer about recent AI regulation developments with links to the actual sources.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;🤔 "How is this different from just asking ChatGPT?"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Real-time information&lt;/strong&gt;: Your agent has access to current information&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Programmable&lt;/strong&gt;: You can integrate this into applications, APIs, automation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Transparent&lt;/strong&gt;: You see exactly which sources were used&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Extensible&lt;/strong&gt;: You can add custom processing, validation, or formatting&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cost-effective&lt;/strong&gt;: You pay for what you use, not general AI model costs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Progressive complexity&lt;/strong&gt;: You started simple and built sophistication step by step&lt;/li&gt;
&lt;/ol&gt;


&lt;h2&gt;
  
  
  The Path Forward: From Simple to Sophisticated
&lt;/h2&gt;
&lt;h3&gt;
  
  
  What We Built vs. What's Possible
&lt;/h3&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%2Flutp3dyae9wc2triemri.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%2Flutp3dyae9wc2triemri.png" alt="Success Kid" width="500" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Our simple agent has just two nodes, but you've built something profound:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Intelligent information gathering&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automated synthesis and formatting&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Source attribution and transparency&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Extensible architecture for future enhancements&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  The Natural Evolution
&lt;/h3&gt;

&lt;p&gt;Here's where your agent can grow:&lt;/p&gt;
&lt;h4&gt;
  
  
  Level 2: Adding Memory
&lt;/h4&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Add a memory node
&lt;/span&gt;&lt;span class="n"&gt;workflow&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add_node&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;remember&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;save_to_memory&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;workflow&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add_edge&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;answer&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;remember&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h4&gt;
  
  
  Level 3: Adding Validation
&lt;/h4&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Add fact-checking
&lt;/span&gt;&lt;span class="n"&gt;workflow&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add_node&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;validate&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;fact_check&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;workflow&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add_edge&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;search&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;validate&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;workflow&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add_edge&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;validate&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;answer&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h4&gt;
  
  
  Level 4: Adding Conditional Logic
&lt;/h4&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Add decision-making
&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;should_search_more&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;state&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;confidence&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;analyze_confidence&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;state&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;search_results&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;search_more&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;confidence&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mf"&gt;0.8&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;answer&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="n"&gt;workflow&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add_conditional_edges&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;search&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;should_search_more&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Common Questions and Real Answers
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Technical Questions
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;🤔 "How does LangGraph handle errors if one node fails?"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;LangGraph provides built-in error handling. You can define fallback paths, retry logic, and error recovery strategies. For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;workflow&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add_node&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;fallback_search&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;backup_search_method&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;# If primary search fails, try backup
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;🤔 "Can I run multiple nodes in parallel?"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Absolutely! LangGraph automatically identifies nodes that can run in parallel and executes them concurrently when possible.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;🤔 "How do I debug what's happening inside the workflow?"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;LangGraph provides excellent introspection. You can log state at each step, visualize the execution graph, and even step through execution for debugging.&lt;/p&gt;

&lt;h3&gt;
  
  
  Business Questions
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;🤔 "What are the real-world applications of this pattern?"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The possibilities are endless:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Customer Support&lt;/strong&gt;: Agents that can access current documentation and policies&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Market Analysis&lt;/strong&gt;: Real-time competitive intelligence systems
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Content Creation&lt;/strong&gt;: Research assistants that gather current information&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compliance&lt;/strong&gt;: Systems that check against current regulations&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sales Intelligence&lt;/strong&gt;: Tools that provide current company information&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;🤔 "How much does this cost compared to using ChatGPT API?"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The economics are different:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;ChatGPT&lt;/strong&gt;: You pay per token for general intelligence&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tavily + LangGraph&lt;/strong&gt;: You pay for specific, optimized search operations&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Your Agent&lt;/strong&gt;: Often more cost-effective for high-volume, specific use cases&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;🤔 "Is this production-ready?"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The patterns we've shown are absolutely production-ready. Companies are running similar architectures at scale. The key is starting simple (like we did) and evolving based on your specific needs.&lt;/p&gt;




&lt;h2&gt;
  
  
  Your Next Steps: The Developer's Action Plan
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Immediate Actions (Next 30 minutes)
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Start with the absolute basics&lt;/strong&gt;: Run &lt;code&gt;hello_tavily.py&lt;/code&gt; - just 2 lines of core logic!&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Understand the magic&lt;/strong&gt;: See how &lt;code&gt;include_answer=True&lt;/code&gt; transforms search into intelligence&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Build complexity&lt;/strong&gt;: Try &lt;code&gt;langgraph_agent.py&lt;/code&gt; to see workflow orchestration
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Get your free Tavily API key&lt;/strong&gt; (1000 requests/month) at tavily.com&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compare the approaches&lt;/strong&gt;: Notice how both use the same intelligence foundation&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Short-term Exploration (This week)
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Add inline comments&lt;/strong&gt; to understand each line of code&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Modify parameters&lt;/strong&gt; (try different &lt;code&gt;max_results&lt;/code&gt; values in both examples)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Integrate with your existing project&lt;/strong&gt; (API endpoint, database storage)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Try different types of questions&lt;/strong&gt; (current events, technical topics, market data)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Explore the enhanced README&lt;/strong&gt; for callout boxes and expected outputs&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Long-term Mastery (This month)
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Build a production application&lt;/strong&gt; using the LangGraph patterns&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Add conditional logic&lt;/strong&gt; and error handling to your workflow&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Implement memory and personalization&lt;/strong&gt; features&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scale your agent&lt;/strong&gt; for your specific use case&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Study the progression&lt;/strong&gt; from simple to sophisticated architecture&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  The Bigger Picture: The Future of Intelligent Applications
&lt;/h2&gt;

&lt;p&gt;What you've built today isn't just a demo—it's a glimpse into the future of software development. We're moving from static applications to intelligent systems that can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Adapt to changing information&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Make contextual decisions&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Learn from interactions&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Integrate seamlessly with human workflows&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Your simple AI agent is a building block in this larger transformation. Every great system starts with understanding the fundamentals, and you now understand how to build intelligence that connects to the real world.&lt;/p&gt;

&lt;p&gt;The tools are here. The patterns are proven. The only question left is: &lt;strong&gt;What will you build?&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Resources for Your Journey
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Code Repository
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Main Demo&lt;/strong&gt;: Simple agent we built in this tutorial&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Advanced Examples&lt;/strong&gt;: Production-ready patterns and complex workflows&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Documentation&lt;/strong&gt;: Detailed API references and guides&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Learning Path
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Start Here&lt;/strong&gt;: Run the basic demo&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Understand&lt;/strong&gt;: Read through the code with fresh eyes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Experiment&lt;/strong&gt;: Modify parameters and add simple features&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Build&lt;/strong&gt;: Create your own agent for a real problem&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scale&lt;/strong&gt;: Add production features and deploy&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Community
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Issues&lt;/strong&gt;: For technical questions and bug reports&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Documentation&lt;/strong&gt;: Comprehensive guides and API references&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Examples&lt;/strong&gt;: Real-world implementations and use cases&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Remember: Every expert was once a beginner. Every complex system started with a simple "Hello, World." You've just built your first AI agent. Where you take it next is limited only by your imagination.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Happy building!&lt;/strong&gt; 🚀&lt;/p&gt;




&lt;h2&gt;
  
  
  Appendix: Complete Code Reference
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;
Complete AI Agent Implementation
A production-ready foundation for intelligent applications
&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;dotenv&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;load_dotenv&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;tavily&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;TavilyClient&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;langgraph.graph&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;StateGraph&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;END&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;typing&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;TypedDict&lt;/span&gt;

&lt;span class="c1"&gt;# Load environment
&lt;/span&gt;&lt;span class="nf"&gt;load_dotenv&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;tavily&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;TavilyClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getenv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;TAVILY_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="c1"&gt;# Define agent state
&lt;/span&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;AgentState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;TypedDict&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;question&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;
    &lt;span class="n"&gt;search_results&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;  
    &lt;span class="n"&gt;answer&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;

&lt;span class="c1"&gt;# Intelligence nodes
&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;search_web&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;state&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;AgentState&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Research phase: Gather intelligent information&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;🔍 Researching: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;state&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;question&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;search_results&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;tavily&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;search&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;state&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;question&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="n"&gt;max_results&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;include_answer&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;search_results&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;search_results&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;generate_answer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;state&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;AgentState&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Synthesis phase: Create intelligent response&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;🤖 Synthesizing answer...&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;ai_answer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;state&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;search_results&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;answer&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;No answer found&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;sources&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;- &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;title&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;url&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; 
              &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;state&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;search_results&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;results&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt;

    &lt;span class="n"&gt;final_answer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;ai_answer&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="s"&gt;Sources:&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sources&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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;answer&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;final_answer&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;# Workflow orchestration
&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;create_agent&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Build the intelligent workflow&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="n"&gt;workflow&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;StateGraph&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;AgentState&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;workflow&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add_node&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;search&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;search_web&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;workflow&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add_node&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;answer&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;generate_answer&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;workflow&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set_entry_point&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;search&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;workflow&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add_edge&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;search&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;answer&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; 
    &lt;span class="n"&gt;workflow&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add_edge&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;answer&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;END&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;workflow&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;compile&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="c1"&gt;# Simple interface
&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;ask_agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;question&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Ask the agent a question&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="n"&gt;agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;create_agent&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;invoke&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;question&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;question&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;search_results&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{},&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;answer&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;""&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;answer&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="c1"&gt;# Interactive demonstration
&lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;__main__&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;🤖 AI Agent Ready! Ask me about current events.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Type &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;quit&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt; to exit.&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;question&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;input&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;❓ Your question: &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;question&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;lower&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;quit&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;exit&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
            &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;👋 Goodbye!&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="k"&gt;break&lt;/span&gt;

        &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;answer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;ask_agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;question&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s"&gt;📝 &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;answer&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;-&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="nb"&gt;Exception&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;❌ Error: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;This complete implementation is your starting point for building intelligent, real-world applications.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🎉 Congratulations! You're Now an AI Agent Developer
&lt;/h2&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%2F370okk7q7n4o4vayhdfg.gif" 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%2F370okk7q7n4o4vayhdfg.gif" alt="Success" width="480" height="354"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;You did it! You built actual web intelligence&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;You've just:&lt;br&gt;
✅ &lt;strong&gt;Built web intelligence in 4 lines of code&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
✅ &lt;strong&gt;Created a production-ready agent architecture&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
✅ &lt;strong&gt;Learned the difference between scripts and agents&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
✅ &lt;strong&gt;Discovered AI-optimized search infrastructure&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
✅ &lt;strong&gt;Implemented modular, extensible workflows&lt;/strong&gt;  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What's next?&lt;/strong&gt; Take your newfound powers and build something amazing. The world needs more intelligent applications, and now you know how to create them.&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>ai</category>
      <category>llm</category>
      <category>rag</category>
    </item>
    <item>
      <title>Getting Started with SuprSend Inbox in Your Next.js App</title>
      <dc:creator>Vedant Khairnar</dc:creator>
      <pubDate>Mon, 22 Sep 2025 19:19:38 +0000</pubDate>
      <link>https://forem.com/vedantkhairnar/getting-started-with-suprsend-inbox-in-your-nextjs-app-12po</link>
      <guid>https://forem.com/vedantkhairnar/getting-started-with-suprsend-inbox-in-your-nextjs-app-12po</guid>
      <description>&lt;p&gt;&lt;strong&gt;Picture this:&lt;/strong&gt; You're a business owner, and it's time for a big product sale — or maybe an important update that your customers absolutely need to know. You hit "Send," confident it’ll reach your audience.&lt;br&gt;
Hours later, reality sets in — your users didn’t even notice it. The result? Missed opportunities and disengaged customers.&lt;/p&gt;

&lt;p&gt;This is a problem that every business faces at some point, and it can be solved with the right tools. That’s where SuprSend Inbox comes in.&lt;/p&gt;

&lt;p&gt;In this post, let's walk through on what is SuprSend Inbox and how it can boost your business. We'll also dive into a step-by-step guide on how to seamlessly integrate &lt;strong&gt;SuprSend Inbox&lt;/strong&gt; into your Next.js application, so you can keep your users engaged and informed — every time.&lt;br&gt;
You'll also get an introduction to &lt;strong&gt;Headless Inbox&lt;/strong&gt; and how to leverage it for custom notifications.&lt;/p&gt;

&lt;p&gt;By the end of this article, you'll have a working notification center in your app and a deeper understanding of how to personalize and extend it to meet your needs.&lt;/p&gt;


&lt;h2&gt;
  
  
  &lt;strong&gt;1. What is SuprSend Inbox?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;SuprSend is a notification stack as a service platform for easily creating, managing and delivering notifications to your end users. SuprSend has all the features set which enable you to send notifications in a reliable and scalable manner, as well as take care of end-user experience, thereby eliminating the need to build any notification service in-house.&lt;/p&gt;


&lt;h2&gt;
  
  
  &lt;strong&gt;2. Benefits of Using SuprSend Inbox&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Effortless Integration&lt;/strong&gt;: Minimal setup, easy to embed into React/Next.js apps without backend complexity.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Real-time Engagement &amp;amp; Personalization&lt;/strong&gt;: Deliver instant notifications directly to users, enhance the user experience by organizing them neatly in a persistent inbox, and personalize messaging based on user behavior and preferences.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Scalable&lt;/strong&gt;: SuprSend Inbox can handle notifications for both small and large applications as your user base grows.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Headless Mode&lt;/strong&gt;: Full control over notification display and design via API for a custom UI.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Whether you're working on a large-scale enterprise application or a smaller personal project, integrating a notification inbox provides a unified and user-friendly way to interact with your users.&lt;/p&gt;


&lt;h2&gt;
  
  
  &lt;strong&gt;3. Steps to Integrate SuprSend Inbox into Your Next.js App&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Let's integrate SuprSend Inbox into your Next.js project in some simple steps:&lt;/p&gt;
&lt;h4&gt;
  
  
  &lt;strong&gt;Step 1: Sign Up and Set Up Your Workspace&lt;/strong&gt;
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Sign Up&lt;/strong&gt;: Visit the &lt;a href="https://app.suprsend.com/" rel="noopener noreferrer"&gt;SuprSend Dashboard&lt;/a&gt; and create your account.&lt;/li&gt;
&lt;li&gt; If your company account is already set up, request your admin to invite you to the team.&lt;/li&gt;
&lt;li&gt; We'll use the &lt;strong&gt;sandbox environment&lt;/strong&gt; for demonstration purposes. A sample user will be created automatically for testing purposes during the workspace setup.&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;
  
  
  &lt;strong&gt;Step 2: Create a Notification Template&lt;/strong&gt;
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt; Navigate to the &lt;strong&gt;Templates&lt;/strong&gt; section in the SuprSend Dashboard.&lt;/li&gt;
&lt;li&gt; Click on &lt;strong&gt;New Template&lt;/strong&gt;, and provide a name. This creates a draft template.&lt;/li&gt;
&lt;li&gt; Open the newly created template and enable the &lt;strong&gt;Inbox channel&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt; Fill in the required details for the template, such as the header and text content. Once complete, click &lt;strong&gt;Publish Draft&lt;/strong&gt;, and provide a version name for your internal tracking.&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%2Fvu368vsjsubfttnyah0o.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%2Fvu368vsjsubfttnyah0o.png" alt=" " width="800" height="435"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  &lt;strong&gt;Step 3: Create a Workflow&lt;/strong&gt;
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt; Go to the &lt;strong&gt;Workflows&lt;/strong&gt; section and click on &lt;strong&gt;New Workflow&lt;/strong&gt;. Provide a name for the workflow and select the &lt;strong&gt;Notification Category&lt;/strong&gt; to create a draft workflow. Alternatively, you can use one of SuprSend's pre-configured workflow templates.&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%2Fnwiwq2161w1fur9gzm5p.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%2Fnwiwq2161w1fur9gzm5p.png" alt=" " width="800" height="435"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Open the draft workflow and drag-and-drop the &lt;strong&gt;Inbox node&lt;/strong&gt; from Delivery section into the workflow canvas, placing it between the &lt;strong&gt;Trigger&lt;/strong&gt; and &lt;strong&gt;Exit&lt;/strong&gt; nodes. You can also explore other nodes and functions as needed.&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%2Fnwiwq2161w1fur9gzm5p.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%2Fnwiwq2161w1fur9gzm5p.png" alt=" " width="800" height="435"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Select the &lt;strong&gt;Inbox node&lt;/strong&gt;, configure it by linking the notification template you created earlier, and save the configuration.&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%2Fzzc6xxuvfmt6n3y29628.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%2Fzzc6xxuvfmt6n3y29628.png" alt=" " width="800" height="435"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Commit the workflow to make it live.&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;
  
  
  &lt;strong&gt;Step 4: Create a New Project and Install SuprSend&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Here’s the &lt;a href="https://github.com/VedantKhairnar/suprsend-next-inbox" rel="noopener noreferrer"&gt;GitHub repository&lt;/a&gt; containing the codebase we’ll be working on today. Feel free to refer to it alongside our session for better understanding.&lt;/p&gt;

&lt;p&gt;Get started by creating a Next.js project and adding the SuprSend Inbox SDK:&lt;br&gt;
Run the following commands:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Create a new project&lt;/span&gt;
npx create-next-app@latest suprsend-next-inbox

&lt;span class="c"&gt;# Navigate to the project directory&lt;/span&gt;
&lt;span class="nb"&gt;cd &lt;/span&gt;suprsend-next-inbox

&lt;span class="c"&gt;# Install SuprSend React Inbox SDK using yarn&lt;/span&gt;
yarn add @suprsend/react-inbox
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  &lt;strong&gt;Step 5: Mount SuprSend Inbox Component in &lt;code&gt;App.jsx&lt;/code&gt;&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;In the Next.js app, navigate to the &lt;code&gt;pages&lt;/code&gt; directory and open the &lt;code&gt;index.js&lt;/code&gt; file.&lt;br&gt;
Here, we'll import the SuprSend Inbox component and mount it within our app.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;dynamic&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;next/dynamic&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;SuprSendInbox&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;dynamic&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;import&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@suprsend/react-inbox&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;ssr&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt; &lt;span class="c1"&gt;// for client side rendering&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;Home&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;&amp;gt;&lt;/span&gt;
      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;SuprSendInbox&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;/&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This simple step integrates the Inbox component directly into your app, ready for use. Now let's add the required props.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Step 6: Extract All Props from the SuprSend Dashboard&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;To get it working with your workspace in the sandbox environment, you'll need to get a few credentials from the &lt;strong&gt;SuprSend Dashboard&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;workspaceKey&lt;/strong&gt;: You can find it in &lt;a href="https://app.suprsend.com/en/sandbox/" rel="noopener noreferrer"&gt;SuprSend Dashboard&lt;/a&gt; inside Settings -&amp;gt; API Keys.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;subscriberId&lt;/strong&gt;: This is a unique string for every distinctId used for authentication to the inbox service. You can check &lt;a href="https://docs.suprsend.com/docs/hmac-authentication" rel="noopener noreferrer"&gt;generation docs&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;distinctId&lt;/strong&gt;: This ID uniquely identifies a user (often an email or user account ID) and can be found on the &lt;a href="https://app.suprsend.com/en/sandbox/users" rel="noopener noreferrer"&gt;Users page&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;tenantId&lt;/code&gt;, &lt;code&gt;pageSize&lt;/code&gt;, &lt;code&gt;pagination&lt;/code&gt;, and &lt;code&gt;stores&lt;/code&gt; are some &lt;a href="https://docs.suprsend.com/docs/inbox-react" rel="noopener noreferrer"&gt;additional props&lt;/a&gt; that you can pass but are not mandatory.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Step 7: Passing the Appropriate Props to SuprSend Components&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;Now that you've got the necessary credentials, it's time to modify the &lt;code&gt;index.js&lt;/code&gt; file like so:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;dynamic&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;next/dynamic&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;SuprSendInbox&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;dynamic&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;import&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@suprsend/react-inbox&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;ssr&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;Home&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;&amp;gt;&lt;/span&gt;
      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;SuprSendInbox&lt;/span&gt; 
      &lt;span class="nx"&gt;workspaceKey&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;&amp;lt;workspace-key&amp;gt;&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="c1"&gt;// Replace with your workspace key&lt;/span&gt;
      &lt;span class="nx"&gt;subscriberId&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;&amp;lt;subscriber_id_&amp;gt;&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="c1"&gt;// Replace with your subscriber ID&lt;/span&gt;
      &lt;span class="nx"&gt;distinctId&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;&amp;lt;distinct_id&amp;gt;&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="c1"&gt;// Replace with the user's distinct ID&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;/&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For production setup, pass the necessary props through environment variables.&lt;br&gt;
That's it. You don't need to initialize the SDK client separately.&lt;br&gt;
This step connects your app with the &lt;strong&gt;SuprSend Inbox&lt;/strong&gt;, linking it to a specific user and workspace. When you visit &lt;code&gt;http://localhost:3000/&lt;/code&gt;, you should see a fully functional notification inbox tied to your provided values.&lt;br&gt;
Missing these props would give you &lt;code&gt;401 (Unauthorized)&lt;/code&gt; access error.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;Step 8: Triggering a Test Notification&lt;/strong&gt;
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt; Once everything is set up, navigate to the workflow you created and click on the Test button.&lt;/li&gt;
&lt;li&gt; Enter the recipient details in the required fields and click on Trigger Test.&lt;/li&gt;
&lt;li&gt; Voilà! The test notification will appear in the Inbox, verifying that your setup works perfectly.&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%2Fm4zk7pbvqp3z86ppk3a6.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%2Fm4zk7pbvqp3z86ppk3a6.png" alt=" " width="800" height="498"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For further customization, refer to our &lt;a href="https://docs.suprsend.com/docs/react-customize-inbox" rel="noopener noreferrer"&gt;docs&lt;/a&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;4. Headless Inbox: Advanced Use Case&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;While the default SuprSend Inbox component is easy to set up and great for most use cases, you may need more flexibility in certain situations. This is where the &lt;strong&gt;Headless Inbox&lt;/strong&gt; option comes in.&lt;/p&gt;

&lt;h1&gt;
  
  
  Headless Inbox Setup and Overview
&lt;/h1&gt;

&lt;h2&gt;
  
  
  1. Introduction to Headless Inbox
&lt;/h2&gt;

&lt;p&gt;Headless Inbox is a powerful way to integrate and manage notifications within a React app without relying on a pre-built UI for handling messages. It allows developers to manage notification data and UI elements independently, offering flexibility to build customized notification systems that fit any design or workflow.&lt;/p&gt;

&lt;p&gt;The concept of a "headless" system means you have full control over how the notification logic works, without being tied to a specific interface or display method. This separation of concerns is particularly useful when you're building dynamic applications with personalized notifications.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Importance of Headless Inbox
&lt;/h2&gt;

&lt;p&gt;Headless Inbox is a powerful way to integrate and manage notifications within your app without relying on a pre-built UI for handling messages. It allows you to manage notification data and UI elements independently, offering flexibility to build customized notification systems that fit any design or workflow.&lt;/p&gt;

&lt;p&gt;The concept of a "headless" system means you have full control over how the notification logic works, without being tied to a specific interface or display method. This separation of concerns is particularly useful when you're building dynamic applications with personalized notifications.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Customizable UI&lt;/strong&gt;: Unlike the traditional inbox that comes with its own visual design, you can design the notification experience exactly how you want it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;More Control&lt;/strong&gt;: The logic for marking notifications as seen, counting unseen notifications, and triggering new notifications can be fully managed by the developer. This gives them fine-grained control over the app’s notification flow.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Decoupling of Logic&lt;/strong&gt;: By isolating the notification logic from its display, you can change the UI without affecting the notification handling and vice versa, making the system more modular and maintainable.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In comparison to existing solutions like SuprSend inbox, Headless Inbox allows for a more scalable approach, particularly when you need to embed notifications within an existing application structure or have complex requirements for managing notifications.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Steps to Set Up the Headless Inbox
&lt;/h2&gt;

&lt;p&gt;For demo purpose, let's set up the Headless Inbox with the following steps:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Clone the &lt;a href="https://github.com/VedantKhairnar/suprsend-next-headless-inbox" rel="noopener noreferrer"&gt;GitHub Repository&lt;/a&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Start by cloning the SuprSend Headless Inbox repository from GitHub&lt;/li&gt;
&lt;li&gt;This repository contains all the necessary code and configuration files to get started.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Add the Required API Keys
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;You will need to insert your &lt;code&gt;workspaceKey&lt;/code&gt;, &lt;code&gt;subscriberId&lt;/code&gt;, and &lt;code&gt;distinctId&lt;/code&gt; into the &lt;code&gt;_app.js&lt;/code&gt; file to authenticate your connection to the SuprSend service. These keys ensure that notifications are linked to the correct workspace and user.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Understanding Key Files
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;_app.js&lt;/strong&gt;: This file contains the &lt;code&gt;&amp;lt;SuprSendProvider /&amp;gt;&lt;/code&gt; component, which wraps the entire application. It initializes the connection to SuprSend using the workspace and subscriber information.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;HeadlessSDKComponent.js&lt;/strong&gt;: This component manages the core functionality of the Headless Inbox. It handles unseen counts, marks notifications as seen, and reacts to new notifications by triggering custom events (e.g., alerts when new notifications arrive).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;NotificationsComponent.js&lt;/strong&gt;: This is the customizable UI component that renders the notifications in a Material UI Card format. It displays a bell icon and a notification list, with options to toggle the card visibility. You can style and customize this component to fit the design of your app.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. Run the App
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;After setting up the keys and reviewing the important files, simply run the app. The notifications should start coming through, and you'll see them in the custom notification component.&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%2Fcx5dwmt4b7cz8rhb1qxf.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%2Fcx5dwmt4b7cz8rhb1qxf.png" alt=" " width="800" height="435"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This setup provides you with a fully functional Headless Inbox without requiring you to design complex notification handling systems. You can focus on customizing the UI and extending functionality based on your needs.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Why Use the Headless Mode?&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Customization&lt;/strong&gt;: You have complete control over the notification display.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Flexibility&lt;/strong&gt;: Pull notifications into your app in any format you like.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Integration&lt;/strong&gt;: Integrate SuprSend into existing designs without relying on predefined UI components.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Conclusion: Effortless Notification Integration&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;By following these steps, you've successfully integrated SuprSend Inbox into your Next.js application, providing a rich and interactive notification experience for your users. Not only did you achieve this with minimal setup, but you also learned how to customize the inbox using headless mode to tailor the notifications to your unique needs.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;To recap, here are the steps:&lt;/strong&gt;
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Set up a new Next.js project&lt;/strong&gt; and install SuprSend.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Mount the SuprSend Inbox component&lt;/strong&gt; in your app.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Extract the necessary props&lt;/strong&gt; from the SuprSend Dashboard.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Pass the props&lt;/strong&gt; to the &lt;code&gt;SuprSendInbox&lt;/code&gt; component for a personalized experience.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Start building better user engagement today with SuprSend Inbox! Head over to &lt;a href="https://docs.suprsend.com/docs/react-customize-inbox" rel="noopener noreferrer"&gt;SuprSend Docs&lt;/a&gt; for more customization options and take your app's notifications to the next level. &lt;/p&gt;

&lt;p&gt;Because nothing says "I care" like a well-timed notification that doesn’t ghost your users! 🚀&lt;/p&gt;

</description>
      <category>suprsend</category>
      <category>javascript</category>
      <category>devtool</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Building Community: The Social Software</title>
      <dc:creator>Vedant Khairnar</dc:creator>
      <pubDate>Thu, 05 Dec 2024 12:21:12 +0000</pubDate>
      <link>https://forem.com/vedantkhairnar/building-community-the-social-software-2b80</link>
      <guid>https://forem.com/vedantkhairnar/building-community-the-social-software-2b80</guid>
      <description>&lt;p&gt;Ah, building a community---it's like engineering software but with fewer syntax errors and more existential dread. You'd think rallying humans would be easier than debugging a complex system, but welcome to the reality where JavaScript and human nature seem equally capricious. Let's navigate this metaphorical minefield, shall we?&lt;/p&gt;

&lt;h4&gt;
  
  
  1. &lt;strong&gt;Planning and Design: "Hello, World!"&lt;/strong&gt;
&lt;/h4&gt;

&lt;blockquote&gt;
&lt;p&gt;"By failing to prepare, you are preparing to fail." -- Benjamin Franklin.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;When you set out to develop software, you start with a robust project plan. You sketch out your system architecture, decide on your tech stack, and maybe even dream of your app going viral. Similarly, in community building, you need a comprehensive vision. What's your community about? Knitting enthusiasts? Dog lovers? DevOps engineers who argue over the superiority of Kubernetes versus Docker?&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%2Fiy9owx6thvpxwdiwehri.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%2Fiy9owx6thvpxwdiwehri.png" alt=" " width="800" height="403"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Real Example:&lt;/strong&gt; Reddit started as a small community for sharing interesting links. Today, it's a behemoth of subreddits ranging from the sublime to the absolutely ridiculous. Yes, there's a subreddit for "Birds with Arms." Vision: Check.&lt;/p&gt;

&lt;h4&gt;
  
  
  2. &lt;strong&gt;Coding and Initial Development: The Beta Phase&lt;/strong&gt;
&lt;/h4&gt;

&lt;blockquote&gt;
&lt;p&gt;"First, solve the problem. Then, write the code." -- John Johnson.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In software development, you write code, encounter bugs, and scream at your screen at 2 AM. Building a community is eerily similar. You create initial content, attract a few members, and then deal with the first wave of trolls who think it's hilarious to inject SQL-like disruptions into every conversation.&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%2Fbewkeugkqi74bxnhge1l.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%2Fbewkeugkqi74bxnhge1l.png" alt=" " width="625" height="474"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Real Example:&lt;/strong&gt; Facebook started in a Harvard dorm room. Initially, it was exclusive, buggy, and, let's be honest, looked like a high school science project. But hey, even Mark Zuckerberg had to start somewhere.&lt;/p&gt;

&lt;h4&gt;
  
  
  3. &lt;strong&gt;Testing: The Human QA Department&lt;/strong&gt;
&lt;/h4&gt;

&lt;blockquote&gt;
&lt;p&gt;"Any fool can write code that a computer can understand. Good programmers write code that humans can understand." -- Martin Fowler.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You test software to ensure it doesn't implode upon launch. In community building, testing means figuring out what resonates with your members. Do they like weekly AMAs or prefer daily memes? Spoiler: Memes win, always.&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%2F0drnxybd5j52jjiogl85.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%2F0drnxybd5j52jjiogl85.png" alt=" " width="622" height="477"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Real Example:&lt;/strong&gt; Stack Overflow had to figure out how to manage reputation scores and moderation. It took a lot of iteration, user feedback, and probably a few thousand expletives muttered under breath.&lt;/p&gt;

&lt;h4&gt;
  
  
  4. &lt;strong&gt;Launch: "It's Alive!"&lt;/strong&gt;
&lt;/h4&gt;

&lt;blockquote&gt;
&lt;p&gt;"Release early. Release often. And listen to your customers." -- Eric S. Raymond.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You've launched your software, and now the real fun begins---watching users break it in ways you never imagined. Similarly, launching a community means watching people interact, connect, and occasionally form factions over whether pineapple belongs on pizza (it doesn't, fight me).&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%2Fsqx3j513pcqm5827o9x9.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%2Fsqx3j513pcqm5827o9x9.png" alt=" " width="735" height="397"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Real Example:&lt;/strong&gt; Discord launched as a platform for gamers. Today, it's used by everyone from study groups to knitting clubs, proving that even the most niche communities can grow beyond their initial scope.&lt;/p&gt;

&lt;h4&gt;
  
  
  5. &lt;strong&gt;Maintenance and Updates: The Eternal Grind&lt;/strong&gt;
&lt;/h4&gt;

&lt;blockquote&gt;
&lt;p&gt;"Programs must be written for people to read, and only incidentally for machines to execute." -- Harold Abelson.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Just like software, communities need constant updates. New features, bug fixes, and occasionally, banning that one guy who keeps posting spoilers. You monitor analytics, adjust strategies, and pray to the algorithm gods for favor.&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%2Fi.redd.it%2Ff0u4hlnrrz841.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%2Fi.redd.it%2Ff0u4hlnrrz841.jpg" alt="Guess I'll die meme" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Real Example:&lt;/strong&gt; Twitter's introduction of features like threads, polls, and the infamous 'edit' button shows how communities evolve. Every change is a mix of excitement and backlash, just like any software update.&lt;/p&gt;

&lt;h4&gt;
  
  
  6. &lt;strong&gt;Scaling: The Growth Spurt&lt;/strong&gt;
&lt;/h4&gt;

&lt;blockquote&gt;
&lt;p&gt;"Make it work, make it right, make it fast." -- Kent Beck.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Scaling software is about handling more users without crashing. Scaling a community is about maintaining the vibe as you grow. You add moderators, introduce new sub-communities, and desperately try to keep things civil. Spoiler: It's like herding cats.&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%2F2r8891n1xpyjgn3t1161.webp" 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%2F2r8891n1xpyjgn3t1161.webp" alt="scaling gif" width="500" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Real Example:&lt;/strong&gt; Meetup started as a way for people to organize offline events. It scaled globally, catering to interests so niche that you wonder if there's a secret society for people who love pineapple on pizza (again, why?).&lt;/p&gt;

&lt;h4&gt;
  
  
  7. &lt;strong&gt;Dealing with Crashes: The Oh-No Moments&lt;/strong&gt;
&lt;/h4&gt;

&lt;blockquote&gt;
&lt;p&gt;"To err is human, but to really foul things up you need a computer." -- Paul R. Ehrlich.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Crashes happen. Servers go down, and communities implode. Handling these moments with grace (and a bit of humor) can turn a disaster into a bonding experience. Think of it as a way to test your community's resilience.&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%2Fp11yh5c4onkewz1mav18.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%2Fp11yh5c4onkewz1mav18.png" alt=" " width="607" height="340"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Real Example:&lt;/strong&gt; GitHub's infamous outage in 2018 had developers worldwide in panic mode. But it also led to some great memes and a reminder that even the biggest platforms are not infallible.&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusion: The Infinite Loop
&lt;/h3&gt;

&lt;p&gt;Building a community is like developing software---it's an ongoing process that requires patience, persistence, and a sense of humor. Whether you're coding the next killer app or nurturing a group of like-minded individuals, remember: it's all about connecting the dots, one bug fix or conversation at a time.&lt;/p&gt;

&lt;p&gt;As Steve Jobs once said, "Great things in business are never done by one person; they're done by a team of people." So gather your team, fire up your metaphorical IDE, and start building. Just remember to save your work and back up your database---both in code and in life.&lt;/p&gt;

</description>
      <category>community</category>
      <category>devrel</category>
      <category>programming</category>
      <category>career</category>
    </item>
    <item>
      <title>RFC 003: Quantum Entangled Payment Methods</title>
      <dc:creator>Vedant Khairnar</dc:creator>
      <pubDate>Mon, 01 Apr 2024 13:45:08 +0000</pubDate>
      <link>https://forem.com/hyperswitchio/rfc-003-quantum-entangled-payment-methods-597e</link>
      <guid>https://forem.com/hyperswitchio/rfc-003-quantum-entangled-payment-methods-597e</guid>
      <description>&lt;h2&gt;
  
  
  I. Objective
&lt;/h2&gt;

&lt;p&gt;This RFC presents an approach for reducing application latency using quantum entanglement. Currently Hyperswitch is optimized for sub 30ms application overhead. By integrating advanced quantum mechanics with traditional networking principles, Hyperswitch aims to revolutionize payment processing speeds, security, and inter-dimensional commerce.&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%2Fgithub.com%2Fjuspay%2Fhyperswitch%2Fassets%2F115226524%2F63e33aae-4244-42b0-9a90-e5d75e4b0a9a" class="article-body-image-wrapper"&gt;&lt;img alt="image" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fjuspay%2Fhyperswitch%2Fassets%2F115226524%2F63e33aae-4244-42b0-9a90-e5d75e4b0a9a" width="596" height="378"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  II. Proposal
&lt;/h2&gt;

&lt;p&gt;Modern networking technologies have reached their limits in terms of speed and efficiency, often constrained by the limitations of spacetime. Hyperswitch proposes the use of quantum entangled wormholes to bypass these limitations entirely. This approach allows for instantaneous data transfer and transaction processing across the multiverse.&lt;/p&gt;

&lt;h3&gt;
  
  
  Data Transmission
&lt;/h3&gt;

&lt;p&gt;In this approach, payment method data is transformed into qubits and transmitted through PCI compliant quantum entangled wormholes. These wormholes act as portals between different points in spacetime, allowing for instantaneous data transfer without the constraints of traditional networking protocols.&lt;/p&gt;

&lt;h3&gt;
  
  
  Payment Processing
&lt;/h3&gt;

&lt;p&gt;Similarly, Hyperswitch leverages these wormholes for payment processing, enabling instant and secure transactions across multiple dimensions. Users can simply select the Hyperswitch payment option during checkout, and the transaction will be processed through a quantum entangled wormhole to the merchant's account in their respective dimension. This is made possible through Hyperswitch’s direct connection to major wormholes across dimensions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Security and Reliability
&lt;/h3&gt;

&lt;p&gt;Quantum entangled wormholes offer unparalleled security and reliability. Any attempt to intercept or tamper with the data or transaction would collapse the quantum state, rendering the information unreadable and invalidating the transaction. Additionally, the self-healing nature of the entangled wormholes ensures persistent delivery retry and automatic audit trails.&lt;/p&gt;

&lt;h2&gt;
  
  
  III. Open Questions
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;What are the ethical implications of interdimensional commerce?&lt;/li&gt;
&lt;li&gt;How can we ensure backward compatibility with existing payment systems across different dimensions?&lt;/li&gt;
&lt;li&gt;How will payments be routed through wormholes?&lt;/li&gt;
&lt;li&gt;How many direct connections will be necessary?&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Frame Format
&lt;/h2&gt;

&lt;p&gt;Data and transactions are encoded into qubits and transmitted through quantum entangled wormholes. The bandwidth and MTU (Maximum Transmission Unit) of the wormholes are theoretically unlimited, allowing for high-speed data transfer and large-scale transaction processing across multiple dimensions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Security Considerations
&lt;/h2&gt;

&lt;p&gt;While security is inherently robust due to the principles of quantum mechanics, additional measures such as quantum encryption and multi-dimensional authentication protocols may be required to protect against advanced threats from alternate realities or parallel dimensions.&lt;/p&gt;

&lt;h2&gt;
  
  
  IV. Conclusion
&lt;/h2&gt;

&lt;p&gt;Hyperswitch's proposal to use quantum entangled wormholes for data transmission and payment processing represents a significant leap forward in the field of networking and commerce. By overcoming the limitations of traditional spacetime-based technologies, Hyperswitch aims to create a truly interconnected and secure global marketplace across the multiverse.&lt;/p&gt;

&lt;h3&gt;
  
  
  Possible Implementation
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Read and understand the &lt;a href="https://github.com/juspay/hyperswitch/blob/main/docs/CONTRIBUTING.md" rel="noopener noreferrer"&gt;general guidelines&lt;/a&gt; on contributing to Hyperswitch&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Import postman collection of hyperswitch from &lt;a href="https://www.postman.com/hyperswitch/workspace/hyperswitch-development/collection/25176162-630b5353-7002-44d1-8ba1-ead6c230f2e3" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Understand the implementation of all different payment flows and &lt;a href="https://github.com/juspay/hyperswitch/blob/main/add_connector.md" rel="noopener noreferrer"&gt;how to add a connector&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Test the following flows - Payment, Capture, Void and Refund using postman for your local implementation and generate relevant screenshots of the test cases.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Embark on an enlightening journey through the intricate world of payments. These blogs are your compass to navigate the complexities of the payment galaxy. &lt;/p&gt;

&lt;p&gt;As developers, we create a lot of value through the applications we build. Payments are the means to capture some of that value for ourselves. Surprisingly, the effort to set up a payments stack is often exaggerated. This is what we aim to solve at Hyperswitch by building a free and open payments switch. If you resonate with this vision, you can join the movement to help build an open payments ecosystem!&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%2Fvwbphgvpyilq2h1546h9.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%2Fvwbphgvpyilq2h1546h9.png" alt="contributors" width="800" height="681"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more about how you can set up your own payments stack in minutes with &lt;a href="https://docs.hyperswitch.io/about-hyperswitch/readme" rel="noopener noreferrer"&gt;Hyperswitch&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  On a serious note, Hyperswitch is Hiring:
&lt;/h3&gt;

&lt;p&gt;Go to GitHub Discussions and bookmark our &lt;a href="https://github.com/juspay/hyperswitch/discussions?discussions_q=is:open+label:hiring-challenge" rel="noopener noreferrer"&gt;Hiring Challenge&lt;/a&gt;. &lt;/p&gt;

</description>
      <category>opensource</category>
      <category>rust</category>
      <category>payments</category>
      <category>hiring</category>
    </item>
    <item>
      <title>How to hire Developers for your Open Source Project?</title>
      <dc:creator>Vedant Khairnar</dc:creator>
      <pubDate>Wed, 20 Mar 2024 11:22:47 +0000</pubDate>
      <link>https://forem.com/vedantkhairnar/how-to-hire-developers-for-your-open-source-project-4aa7</link>
      <guid>https://forem.com/vedantkhairnar/how-to-hire-developers-for-your-open-source-project-4aa7</guid>
      <description>&lt;p&gt;Being Open Source doesn’t just mean making the code public. Being Open means believing in the Open systems strongly and showing it through your actions as well. We all want like-minded folks who share a similar vision to join our organization. Well, this happens when our hiring or team-building approach is open. Also, only the folks who are genuinely interested in the vision tend to contribute, adding depth and passion to our collaborative efforts.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"Hire for passion and intensity; There is training for everything else."&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Nolan Bushnell&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;At Hyperswitch, our journey towards building a &lt;strong&gt;Linux-like infrastructure for payments&lt;/strong&gt; took an interesting turn when we decided to innovate not just our product but also our hiring process. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;🚨 &lt;strong&gt;BTW we are hiring for several roles, know more&lt;/strong&gt; &lt;a href="https://github.com/juspay/hyperswitch/wiki/Hyperswitch-Hiring-Challenge" rel="noopener noreferrer"&gt;&lt;strong&gt;here&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In this blog post, we're excited to share how you can &lt;strong&gt;transform your hiring strategy through open source&lt;/strong&gt; contributions and the remarkable impact it can have on your project and team.&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%2Fmd432nngcimdupbe2mni.gif" 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%2Fmd432nngcimdupbe2mni.gif" alt="smart boi" width="480" height="264"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  3 Checks before you start ✅
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;A base Community of Contributors:&lt;/strong&gt; Having an initial community of contributors around your product may not be a must but it adds huge advantage and a starting point for the open source hiring initiative. It serves as a solid foundation for the open source hiring initiative.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Contribution Guidelines:&lt;/strong&gt; Clear contribution guidelines should be established beforehand, ensuring that your contributors understand the expectations and standards.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Tutorials and Blogs:&lt;/strong&gt; Having existing resources such as tutorials and blogs help newcomers understand our project and its objectives.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Process that you can follow 🔄
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Identify the Problem Statements/Issues&lt;/strong&gt; 🎯&lt;br&gt;
Defining the problem statements or issues for potential contributors is crucial. Identify non-critical challenges that align with your project goals, provide opportunities for contributors to make meaningful contributions without overwhelming them. These challenges not only serve as tasks for contributors but also act as a filter to attract the right talent for your organization.&lt;br&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%2Fylt1zvor7hqy3sjlcw6o.gif" 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%2Fylt1zvor7hqy3sjlcw6o.gif" alt="Avengers" width="500" height="268"&gt;&lt;/a&gt;&lt;br&gt;
By presenting specific problems aligned with the project objectives, you will be able to identify individuals who not only possess the technical skills but also share your passion and vision for open collaboration. This approach ensures that the community of contributors is composed of individuals who are genuinely invested in advancing your project's mission.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Creating Onboarding Materials for Hiring&lt;/strong&gt; 📚&lt;br&gt;
It's obvious to have a clear and structured onboarding process for potential contributors. Develop onboarding materials that explain the hiring process, including how to get involved, where to find resources, and how to contribute effectively.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Promote the Hiring Plan&lt;/strong&gt; 📢&lt;br&gt;
Promoting the hiring plan is essential to attract talented individuals who share your vision for open collaboration. You can leverage various channels, including social media, developer forums, and industry events, to spread the word about the open positions and the benefits of joining the community.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Providing Constant Support and Feedback&lt;/strong&gt; 🤝&lt;br&gt;
The essence of open source is collaboration. Integrate this principle into your hiring process by providing ongoing support and feedback to contributors. Mentor contributors at every step, offer them assistance, answer their queries, and provide constructive feedback on contributions to help them improve their skills and understanding of your project.&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%2Frqr3fona9wqqe69bz58m.gif" 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%2Frqr3fona9wqqe69bz58m.gif" alt="pandas" width="384" height="384"&gt;&lt;/a&gt;    &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Review and Merge Contributions&lt;/strong&gt; 🔄&lt;br&gt;
Regularly reviewing and merging contributions is essential to maintain the quality and relevance of your project. Establish a systematic review process, ensuring that all contributions meet your standards and contribute to your project's objectives.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Recognize and Reward Contributors&lt;/strong&gt; 🏅&lt;br&gt;
Acknowledging the efforts of your contributors is vital to foster a sense of appreciation and belonging within the community. Recognize their contributions publicly through badges, mentions in project announcements, and exclusive rewards, motivating them to continue their involvement.&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%2Fpfctyx2hw2oyhzloilvr.gif" 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%2Fpfctyx2hw2oyhzloilvr.gif" alt="Caprio" width="500" height="213"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Well, this award is for you because you are taking the next step towards improved hiring.&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Monitoring and Iterating&lt;/strong&gt; 🔄&lt;br&gt;
Continuous monitoring and iteration will allow you to refine  your open source hiring process based on feedback and evolving project needs. Regularly take inputs from contributors and stakeholders, identifying areas for improvement and implementing changes to enhance the overall experience.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Scaling and Expanding&lt;/strong&gt; 🌍&lt;br&gt;
As the project and community grows, scale and expand your open source hiring efforts to accommodate the increasing demand for talent. Explore collaborations with other open source projects and organizations, broadening your reach and impact while prioritizing diversity and inclusion initiatives to ensure a welcoming and inclusive environment for all contributors.&lt;br&gt;
See how you can accommodate different time zones and geographies to be inclusive. &lt;/p&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%2Fmaigaee7eziguog6k6is.gif" 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%2Fmaigaee7eziguog6k6is.gif" alt="More sheep heads" width="400" height="225"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In conclusion, the journey towards open source hiring will be transformative for both- the product and the community of contributors. By embracing open collaboration and innovation, you can not only build a robust product but also cultivate a vibrant ecosystem of talent and creativity. We're excited to continue pushing the boundaries of open source development and shaping the future of payments together. Join us on this journey, and let's make a difference.&lt;/p&gt;




&lt;p&gt;🌠 Embark on an enlightening journey through the intricate world of payments. These blogs are your compass to navigate the complexities of the payment galaxy. &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%2Fzeu41cxw2pepqvfdj11p.gif" 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%2Fzeu41cxw2pepqvfdj11p.gif" alt="May the force be with you" width="480" height="270"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As developers, we create a lot of value through the applications we build. Payments are the means to capture some of that value for ourselves. Surprisingly, the effort to set up a payments stack is often exaggerated. This is what we aim to solve at Hyperswitch by building a free and open payments switch. If you resonate with this vision, you can join the movement to help build an open payments ecosystem!&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%2Fvwbphgvpyilq2h1546h9.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%2Fvwbphgvpyilq2h1546h9.png" alt="contributors" width="800" height="681"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🎉 &lt;strong&gt;Learn more about how you can set up your own payments stack in minutes with &lt;a href="https://docs.hyperswitch.io/about-hyperswitch/readme" rel="noopener noreferrer"&gt;Hyperswitch&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;




&lt;ul&gt;
&lt;li&gt;Want to contribute? Check out some of our &lt;a href="https://github.com/juspay/hyperswitch/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22" rel="noopener noreferrer"&gt;good first issues here.&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Try Hyperswitch. &lt;a href="https://app.hyperswitch.io/" rel="noopener noreferrer"&gt;Get your API keys here.&lt;/a&gt;
Happy reading!&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>hiring</category>
      <category>hyperswitch</category>
      <category>opensource</category>
      <category>programming</category>
    </item>
    <item>
      <title>What is Hyperswitch</title>
      <dc:creator>Vedant Khairnar</dc:creator>
      <pubDate>Fri, 15 Mar 2024 13:23:07 +0000</pubDate>
      <link>https://forem.com/hyperswitchio/what-is-hyperswitch-57o9</link>
      <guid>https://forem.com/hyperswitchio/what-is-hyperswitch-57o9</guid>
      <description>&lt;p&gt;As your business expands, it's essential to have a payment infrastructure that can handle larger transaction volumes and support local and alternate payment methods required by newer geographies.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://youtu.be/tBgd9sfrf1w" rel="noopener noreferrer"&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%2Feq4jks1r79heqgx9paa8.jpg" alt="What is Hyperswitch youtube video" width="480" height="360"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A single payment processor might not fulfil your requirements, so you must integrate additional payment processors. But here's the catch: integrating additional payment processors involves a lot of dev effort, which makes it costly and time-consuming.&lt;/p&gt;

&lt;p&gt;This is where a payment orchestrator like Hyperswitch comes in. A payment orchestrator pre-integrates multiple payment processors so that businesses don't have to go through the tedious integration process.&lt;/p&gt;

&lt;p&gt;A payment orchestrator allows businesses to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reduce dev efforts&lt;/li&gt;
&lt;li&gt;Increase conversion rates&lt;/li&gt;
&lt;li&gt;Optimize processing fees&lt;/li&gt;
&lt;li&gt;Reduce dependency on a single processor&lt;/li&gt;
&lt;li&gt;Customize checkout experience&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Embark on an enlightening journey through the intricate world of payments. These blogs are your compass to navigate the complexities of the payment galaxy. &lt;/p&gt;

&lt;p&gt;As developers, we create a lot of value through the applications we build. Payments are the means to capture some of that value for ourselves. Surprisingly, the effort to set up a payments stack is often exaggerated. This is what we aim to solve at Hyperswitch by building a free and open payments switch. If you resonate with this vision, you can join the movement to help build an open payments ecosystem!&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%2Fvwbphgvpyilq2h1546h9.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%2Fvwbphgvpyilq2h1546h9.png" alt="contributors" width="800" height="681"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more about how you can set up your own payments stack in minutes with &lt;a href="https://docs.hyperswitch.io/about-hyperswitch/readme" rel="noopener noreferrer"&gt;Hyperswitch&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;




&lt;ul&gt;
&lt;li&gt;Want to contribute? Check out some of our &lt;a href="https://github.com/juspay/hyperswitch/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22" rel="noopener noreferrer"&gt;good first issues here.&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Try Hyperswitch. &lt;a href="https://app.hyperswitch.io/" rel="noopener noreferrer"&gt;Get your API keys here.&lt;/a&gt;
Happy reading!&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>payments</category>
      <category>programming</category>
      <category>opensource</category>
      <category>discuss</category>
    </item>
    <item>
      <title>What happens when you click pay now?</title>
      <dc:creator>Vedant Khairnar</dc:creator>
      <pubDate>Thu, 14 Mar 2024 11:57:11 +0000</pubDate>
      <link>https://forem.com/hyperswitchio/how-payment-flows-from-customers-to-businesses-51b0</link>
      <guid>https://forem.com/hyperswitchio/how-payment-flows-from-customers-to-businesses-51b0</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;This chapter will cover the payment flows available with Hyperswitch. Please reach out to us to learn more about the payment flows supported!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://youtu.be/DrcuNcAO4zA" rel="noopener noreferrer"&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%2F4179nf4aqugzfrgy0pax.jpg" alt="What is Hyperswitch youtube video" width="480" height="360"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Payments flow
&lt;/h2&gt;

&lt;p&gt;There are multiple stages in a Payment flow depending on the payment methods that are involved. Considering an one-time payment method where there was no redirection involved, the following stages form the Payment flow:&lt;/p&gt;

&lt;p&gt;a. &lt;strong&gt;Creating a Payment:&lt;/strong&gt; When your customer wants to checkout, create a payment by hitting the payments/create endpoint. Fetch and store the payment_id and client_secret&lt;/p&gt;

&lt;p&gt;b. &lt;strong&gt;Loading the SDK:&lt;/strong&gt; After your customer checks out, load the Hyperswitch SDK by initiating it with the client_secret and publishable_key&lt;/p&gt;

&lt;p&gt;c. &lt;strong&gt;SDK being rendered:&lt;/strong&gt; After you initiate the SDK, the SDK makes several API calls involving the /sessions and /payment_methods endpoints to load relevant payment methods and any saved cards associated with the customer&lt;/p&gt;

&lt;p&gt;d. &lt;strong&gt;Customer enters the payment method data:&lt;/strong&gt; After the SDK is fully rendered, your customer would choose a payment method and enter the relevant information and click pay&lt;/p&gt;

&lt;p&gt;e. &lt;strong&gt;Confirming the payment:&lt;/strong&gt; After the customer clicks pay, the SDK calls the payments/confirm endpoint with the customer's payment method details and post response, it displays the payment status&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%2Fybpytz5gtb7v33a9qt6x.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%2Fybpytz5gtb7v33a9qt6x.png" alt="payment process overview" width="800" height="557"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here's a more detailed version of the payment flow:&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%2Fq7m3gr3n0fejgdg3trlm.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%2Fq7m3gr3n0fejgdg3trlm.png" alt="payment flow" width="800" height="519"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How does Payment flow vary across Payment methods?
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Customer Action&lt;/th&gt;
&lt;th&gt;Direct/Redirect flows&lt;/th&gt;
&lt;th&gt;Payment - finalized immediately&lt;/th&gt;
&lt;th&gt;Payment - finalized later&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Customer action required before payments/ confirm&lt;/td&gt;
&lt;td&gt;Within Hyperswitch SDK&lt;/td&gt;
&lt;td&gt;Non 3DS Cards&lt;/td&gt;
&lt;td&gt;Bank Debits like ACH Debit, BACS Debit, SEPA Debit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Customer action required before payments/ confirm&lt;/td&gt;
&lt;td&gt;3rd party Redirect/SDK&lt;/td&gt;
&lt;td&gt;- Wallets like Apple Pay, Google pay, Paypal, AliPay - BNPL like Klarna, Afterpay, Affirm&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Customer action required after payments/ confirm&lt;/td&gt;
&lt;td&gt;3rd party Redirect&lt;/td&gt;
&lt;td&gt;- 3DS cards - Bank Redirects like iDeal, Giropay, eps&lt;/td&gt;
&lt;td&gt;- Bank Transfers like ACH Transfer, SEPA Transfer, BACS Transfer, Multibanco - Crypto wallets like Cryptopay&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Use-cases supported by Hyperswitch
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt; &lt;strong&gt;Accept online payments&lt;/strong&gt; Get started with accepting one time payments globally on your online store&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Store mandates &amp;amp; recurring payments&lt;/strong&gt; Setup payments for a future date or charge your customers on a recurring basis&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Manage payouts&lt;/strong&gt; Facilitate payouts for global network of partners and service providers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Save a card during payment&lt;/strong&gt; Learn how you can save your customers' cards in a secure PCI compliant manner&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Manage payments on your platform/marketplace&lt;/strong&gt; Accept payments from your customers and process payouts to the sellers on your marketplace&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Accept payments on your e-commerce platform&lt;/strong&gt; Give your Wordpress store a lightweight an embedded payment experience with the Hyperswitch WooCommerce plugin&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Create payment links&lt;/strong&gt; Accept payments for your products through reusable links without writing any code&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What are &lt;code&gt;PaymentIntent&lt;/code&gt; and &lt;code&gt;PaymentAttempt&lt;/code&gt; objects and how do they work in Hyperswitch?
&lt;/h2&gt;

&lt;p&gt;Hyperswitch uses the &lt;code&gt;PaymentIntent&lt;/code&gt; object to track the status of a payment initiated by you. Since, Hyperswitch enables retrying a single payment multiple times across different processors until a successful transaction, we track each of these payment attempts through separate &lt;code&gt;PaymentAttempt&lt;/code&gt; objects.&lt;/p&gt;

&lt;p&gt;While &lt;code&gt;PaymentIntent&lt;/code&gt; and &lt;code&gt;PaymentAttempt&lt;/code&gt; have their own state machines, the various states in &lt;code&gt;PaymentAttempt&lt;/code&gt; are also constrained by their respective mapping to the &lt;code&gt;PaymentIntent&lt;/code&gt; statuses.&lt;/p&gt;

&lt;h3&gt;
  
  
  PaymentIntent state machine
&lt;/h3&gt;

&lt;p&gt;The following is an abridged version of the &lt;code&gt;PaymentIntent&lt;/code&gt; state machine flow that covers majority of the above payment use-cases.&lt;/p&gt;

&lt;h3&gt;
  
  
  PaymentAttempt state machine
&lt;/h3&gt;

&lt;p&gt;The following is an abridged version of the &lt;code&gt;PaymentAttempt&lt;/code&gt; state machine flow that covers majority of the above payment use-cases.&lt;/p&gt;




&lt;p&gt;Embark on an enlightening journey through the intricate world of payments. These blogs are your compass to navigate the complexities of the payment galaxy. &lt;/p&gt;

&lt;p&gt;As developers, we create a lot of value through the applications we build. Payments are the means to capture some of that value for ourselves. Surprisingly, the effort to set up a payments stack is often exaggerated. This is what we aim to solve at Hyperswitch by building a free and open payments switch. If you resonate with this vision, you can join the movement to help build an open payments ecosystem!&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%2Fvwbphgvpyilq2h1546h9.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%2Fvwbphgvpyilq2h1546h9.png" alt="contributors" width="800" height="681"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more about how you can set up your own payments stack in minutes with &lt;a href="https://docs.hyperswitch.io/about-hyperswitch/readme" rel="noopener noreferrer"&gt;Hyperswitch&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;




&lt;ul&gt;
&lt;li&gt;Want to contribute? Check out some of our &lt;a href="https://github.com/juspay/hyperswitch/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22" rel="noopener noreferrer"&gt;good first issues here.&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Try Hyperswitch. &lt;a href="https://app.hyperswitch.io/" rel="noopener noreferrer"&gt;Get your API keys here.&lt;/a&gt;
Happy reading!&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>hyperswitch</category>
      <category>opensource</category>
      <category>rust</category>
      <category>payments</category>
    </item>
    <item>
      <title>Hyperswitch by Juspay</title>
      <dc:creator>Vedant Khairnar</dc:creator>
      <pubDate>Wed, 13 Mar 2024 11:39:38 +0000</pubDate>
      <link>https://forem.com/hyperswitchio/hyperswitch-by-juspay-3244</link>
      <guid>https://forem.com/hyperswitchio/hyperswitch-by-juspay-3244</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;"With Hyperswitch, our vision is to enable every digital business to get access to the best payments infrastructure, which they need to run their business efficiently - focusing on their core, not on the complexity of payments," &lt;em&gt;&lt;strong&gt;says Sheetal Lalwani, Chief Operating Officer, Juspay.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;We, at Juspay have transformed the payment landscape by providing comprehensive solutions to leading global enterprises and major banks in India. &lt;/p&gt;

&lt;p&gt;During this time, we have cleared several engineering challenges, and we are applying our expertise and learnings to make Hyperswitch a fast, reliable, and affordable payment switch.&lt;/p&gt;

&lt;p&gt;We are also utilizing 🦀 Rust to ensure type safety and leverage its robust features in our development process.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://youtu.be/p6vqGHsoc0s" rel="noopener noreferrer"&gt;&lt;strong&gt;Join our co-founder&lt;/strong&gt;&lt;/a&gt; as he talks about how our team leveraged insights gained from building Juspay to develop HyperSwitch, an end-to-end global payment solution that addresses the complex challenges in the payment ecosystem, allowing businesses to prioritize their core capabilities.&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%2Fvwbphgvpyilq2h1546h9.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%2Fvwbphgvpyilq2h1546h9.png" alt="contributors" width="800" height="681"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more about how you can set up your own payments stack in minutes with &lt;a href="https://docs.hyperswitch.io/about-hyperswitch/readme" rel="noopener noreferrer"&gt;Hyperswitch&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;




&lt;ul&gt;
&lt;li&gt;Want to contribute? Check out some of our &lt;a href="https://github.com/juspay/hyperswitch/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22" rel="noopener noreferrer"&gt;good first issues here.&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Try Hyperswitch. &lt;a href="https://app.hyperswitch.io/" rel="noopener noreferrer"&gt;Get your API keys here.&lt;/a&gt;
Happy reading!&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>hyperswitch</category>
      <category>rust</category>
      <category>payments</category>
      <category>opensource</category>
    </item>
    <item>
      <title>SEO 101 for a Developer</title>
      <dc:creator>Vedant Khairnar</dc:creator>
      <pubDate>Wed, 21 Feb 2024 09:44:37 +0000</pubDate>
      <link>https://forem.com/vedantkhairnar/seo-101-for-a-developer-1cc9</link>
      <guid>https://forem.com/vedantkhairnar/seo-101-for-a-developer-1cc9</guid>
      <description>&lt;h2&gt;
  
  
  Mastering SEO: Crafting a Search Engine-Friendly Website
&lt;/h2&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%2Fbmo8dv72wkm8vkq2v99x.gif" 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%2Fbmo8dv72wkm8vkq2v99x.gif" alt="search gif" width="600" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Welcome back, fellow web enthusiasts! Today, we're delving into the intricate world of Search Engine Optimization (SEO) – the magic wand that can elevate your website to the top of Google's search rankings. So, grab a cup of coffee and let's dive in!&lt;/p&gt;

&lt;h2&gt;
  
  
  Rule #1: Content is King 👑
&lt;/h2&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%2F7yq26yziiuokyzdt1hte.gif" 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%2F7yq26yziiuokyzdt1hte.gif" alt="Content is king" width="252" height="252"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The very first rule in the SEO playbook is a timeless classic – create fantastic content. From pagerank to machine learning, Google now prioritizes user experience and valuable content. Think of it like a blockbuster movie; if your audience isn't engaged, neither is Google. It's not just about keywords anymore; it's about providing real value that keeps users glued to your pages.&lt;/p&gt;

&lt;h2&gt;
  
  
  Evolution of SEO 🌀
&lt;/h2&gt;

&lt;p&gt;Remember the good ol' days of stuffing keywords into every nook and cranny? Well, those days are past considering other factors that we have today. SEO has evolved into a sophisticated game, focusing on user experience and content usefulness. Over 200 factors now influence a site's ranking, mainly revolving around user engagement.&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%2F8fedu67veb92u39w6yzq.gif" 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%2F8fedu67veb92u39w6yzq.gif" alt="SEO Evolution" width="540" height="540"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Understanding Web Metrics in SEO
&lt;/h2&gt;

&lt;p&gt;Web metrics in SEO encompass various measures like organic traffic, keyword rankings, backlinks, and user behavior, providing insights into a website's performance and its effectiveness in attracting, engaging, and converting visitors.&lt;/p&gt;

&lt;h3&gt;
  
  
  Organic Traffic:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Definition:&lt;/strong&gt; The number of visitors that come to your site through organic (non-paid) search engine results.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Importance:&lt;/strong&gt; Indicates the overall visibility and appeal of your content to search engine users.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Keyword Rankings:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Definition:&lt;/strong&gt; The position of your website for specific keywords in search engine results.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Importance:&lt;/strong&gt; Shows how well your site is optimized for targeted keywords and its competitiveness.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Backlinks:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Definition:&lt;/strong&gt; The number and quality of external websites linking to your site.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Importance:&lt;/strong&gt; Influences the authority and trustworthiness of your site in search engine algorithms.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Page Load Speed:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Definition:&lt;/strong&gt; The time it takes for a page to fully load.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Importance:&lt;/strong&gt; Google considers page speed as a ranking factor, and faster-loading pages provide a better user experience.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Bounce Rate:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Definition:&lt;/strong&gt; The percentage of visitors who navigate away from the site after viewing only one page.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Importance:&lt;/strong&gt; A high bounce rate may indicate issues with content relevance or user experience.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Click-Through Rate (CTR):
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Definition:&lt;/strong&gt; The percentage of users who click on a link compared to the total number of users who see it.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Importance:&lt;/strong&gt; Measures the effectiveness of your titles and meta descriptions in attracting clicks.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Conversion Rate:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Definition:&lt;/strong&gt; The percentage of website visitors who complete a desired action (e.g., making a purchase or filling out a form).
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Importance:&lt;/strong&gt; Indicates how well your site converts visitors into customers or leads.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Mobile-Friendly:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Definition:&lt;/strong&gt; Assesses how well a website performs on mobile devices.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Importance:&lt;/strong&gt; With the mobile-first indexing approach, mobile-friendliness is crucial for SEO.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Crawl Errors:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Definition:&lt;/strong&gt; Issues encountered by search engine crawlers when accessing your site.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Importance:&lt;/strong&gt; Identifying and fixing crawl errors ensures search engines can properly index your content.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Domain Authority:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Definition:&lt;/strong&gt; A metric developed by Moz that predicts a site's ability to rank in search engine results.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Importance:&lt;/strong&gt; Reflects the overall strength and authority of a website's domain.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The SEO Commandments ✅
&lt;/h2&gt;

&lt;p&gt;When it comes to SEO, the structure of your HTML plays a crucial role. Let's break it down, including ARIA tags, anchor elements, and authorship details.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;HTML Structure🏗️:&lt;/strong&gt;
&lt;/h2&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%2Foeom80vt8pfby5ya74zd.gif" 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%2Foeom80vt8pfby5ya74zd.gif" alt="Structure" width="480" height="355"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use semantic HTML elements like &lt;code&gt;&amp;lt;article&amp;gt;&lt;/code&gt; for main content.&lt;/li&gt;
&lt;li&gt;Employ ARIA tags for accessibility, such as &lt;code&gt;alt&lt;/code&gt; for images.&lt;/li&gt;
&lt;li&gt;Utilize &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt; for metadata, including title, description, and canonical URL.&lt;/li&gt;
&lt;li&gt;Optimize the &lt;code&gt;&amp;lt;body&amp;gt;&lt;/code&gt; with meaningful tags like &lt;code&gt;&amp;lt;main&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;article&amp;gt;&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Enhance content organization with schema.org markup like &lt;code&gt;itemprop&lt;/code&gt; and &lt;code&gt;itemscope&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Metadata Magic✨:&lt;/strong&gt;
&lt;/h2&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%2F71knhh9cw8lumlhu040m.gif" 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%2F71knhh9cw8lumlhu040m.gif" alt="metadata magic" width="245" height="165"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Craft a captivating &lt;code&gt;&amp;lt;title&amp;gt;&lt;/code&gt; for your page displayed in search engine results.&lt;/li&gt;
&lt;li&gt;Incorporate meta tags for description, featured image, and author information.&lt;/li&gt;
&lt;li&gt;Leverage outbound anchor elements (&lt;code&gt;&amp;lt;a&amp;gt;&lt;/code&gt;) to authoritative sites, signaling content relevance.&lt;/li&gt;
&lt;li&gt;Utilize schema.org markup for articles and authors to enhance search engine understanding. &lt;/li&gt;
&lt;li&gt;Consider adding schema.org markup for FAQ or Q&amp;amp;A sections to align with modern SEO trends, recognizing the significance of user intent.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By incorporating these HTML practices, you not only enhance your site's SEO but also contribute to a more accessible and user-friendly web experience.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Backlinking and Guest Posting&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Backlinking:
&lt;/h3&gt;

&lt;p&gt;Backlinking involves the process of acquiring hyperlinks from one webpage to another, enhancing a website's visibility and credibility by establishing connections with external sources.&lt;/p&gt;

&lt;p&gt;It's not the quantity but the VIP guest list that matters in the world of backlinks.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Quality Matters:&lt;/strong&gt; Get linked from top-notch sites for SEO magic!&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Diverse Anchors:&lt;/strong&gt; Mix up your anchor texts; it's like seasoning for links.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Guest Posting:
&lt;/h3&gt;

&lt;p&gt;Guest posting refers to the practice of creating and publishing content on someone else's website, often accompanied by a hyperlink leading back to the author's site, fostering collaboration and mutually beneficial relationships in the digital realm.&lt;/p&gt;

&lt;p&gt;Your content should be the kind that not only engages readers but also winks at search engines, saying, 'I'm worth ranking!&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Research Niche Platforms:&lt;/strong&gt; Find your online party and bring good content gifts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Quality Content:&lt;/strong&gt; Write posts that make readers nod and search engines smile.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Optimized Author Bio:&lt;/strong&gt; Show off, but keep it profesh – your link deserves the spotlight.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Build Relationships:&lt;/strong&gt; Make friends online; it's not just about links, it's about connections.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Rendering Techniques✍:&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Now, here's where it gets interesting. Client-side rendering, pre-rendering, and server-side rendering each have their pros and cons. It's like choosing your favorite ice cream flavor – everyone's got a preference.&lt;/p&gt;

&lt;h3&gt;
  
  
  Choose your flavor🍬:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Client-Side Rendering (CSR):&lt;/strong&gt; This approach loads and runs the app on the user's browser, offering fast and interactive experiences. However, it relies on the user's device to render content, which may result in outdated data.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Pre-rendering:&lt;/strong&gt; Ideal for static content like blogs, pre-rendering generates and stores HTML pages in advance. This ensures quick loading times and improved performance, especially for content that doesn't change frequently.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Server-Side Rendering (SSR):&lt;/strong&gt; SSR involves the server sending fully rendered HTML pages to the user's browser. This is beneficial for dynamic content, providing users with up-to-date information directly from the server.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Incremental Static Regeneration (ISR):&lt;/strong&gt; ISR combines the benefits of static site generation with the ability to update content. It refreshes pages in the background, allowing you to maintain the advantages of static sites while ensuring data remains current.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Hybrid Rendering:&lt;/strong&gt; This approach allows you to mix different rendering methods based on specific page requirements. For instance, using CSR for interactive components and SSR for dynamic content, providing a flexible solution tailored to diverse page needs.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Solution: Incremental Static Regeneration💡:
&lt;/h2&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%2F5r90bdtf3y3xotfuck4r.gif" 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%2F5r90bdtf3y3xotfuck4r.gif" alt="Handshake" width="480" height="268"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Incremental Static Regeneration (ISR): The Best of Both Worlds!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The cool kid on the block! Imagine having the best of both worlds – static pages with fresh data. Incremental Static Regeneration (ISR) is a cutting-edge approach in web development that strikes a balance between the benefits of static site generation and the need for up-to-date content.&lt;/p&gt;

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

&lt;p&gt;Incremental Static Regeneration allows you to generate static pages during build time and then refresh them incrementally in the background as new data becomes available. This means that your users experience the speed and efficiency of static pages, while the content is dynamically updated without the need for a full rebuild. ISR essentially combines the advantages of static sites, such as rapid loading times and scalability, with the flexibility to keep content current.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Benefits of using ISR:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Speed and Performance:&lt;/strong&gt; Users enjoy the quick loading times associated with static sites, providing a seamless and responsive experience.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Fresh Data:&lt;/strong&gt; Unlike traditional static sites, ISR ensures that your content stays up-to-date. New data triggers background updates, keeping your site dynamic without sacrificing speed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Scalability:&lt;/strong&gt; ISR is particularly useful for large-scale websites as it allows you to leverage the benefits of static site generation without compromising on real-time data updates.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Improved User Experience:&lt;/strong&gt; By offering a balance between static content delivery and dynamic data updates, ISR enhances the overall user experience, meeting the demands of modern web applications.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Overall, Incremental Static Regeneration is a powerful tool for developers seeking the speed and efficiency of static sites, coupled with the ability to serve fresh and updated content. It's the perfect solution for projects that demand both performance and dynamic data. &lt;/p&gt;

&lt;h3&gt;
  
  
  Example:
&lt;/h3&gt;

&lt;p&gt;Consider an e-commerce site using ISR to update product availability without redeploying the entire site. A win-win for performance and real-time data.&lt;/p&gt;

&lt;h2&gt;
  
  
  Some Terminologies📖:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Click Through Rate (CTR):&lt;/strong&gt; The percentage of users who click on a link; higher is better for optimal engagement.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Bounce Rate:&lt;/strong&gt; The percentage of users who leave a site after viewing only one page; lower is better for user retention.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Dwell Time:&lt;/strong&gt; The duration a user spends on a page before returning to search results; longer is better, aiming for infinity is the ultimate goal.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Session Duration:&lt;/strong&gt; The total time a user spends on a website during a single visit; longer durations signify deeper engagement.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Pages per Session:&lt;/strong&gt; The average number of pages a user views during a single session; higher values indicate more extensive exploration.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Enhance Engagement💬:
&lt;/h2&gt;

&lt;p&gt;Enhance your content with engaging components like gifs to captivate users and boost interaction.&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%2Fczrmwce5wardidwz9wal.gif" 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%2Fczrmwce5wardidwz9wal.gif" alt="Happy Audience" width="480" height="270"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;SEO is no longer a black box; it's an evolving science that demands creativity and adaptability. So, as you embark on the SEO journey, remember these rules, embrace the changes, and watch your website soar to new heights in the vast digital landscape.&lt;/p&gt;

&lt;p&gt;Happy optimizing! 🚀✨&lt;/p&gt;

&lt;p&gt;If you found these insights valuable, share your thoughts and experiences below. Let's continue this SEO conversation together!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>seo</category>
      <category>react</category>
      <category>developer</category>
    </item>
    <item>
      <title>Unnecessary Git Quiz</title>
      <dc:creator>Vedant Khairnar</dc:creator>
      <pubDate>Mon, 19 Feb 2024 15:54:40 +0000</pubDate>
      <link>https://forem.com/hyperswitchio/unnecessary-git-quiz-1b61</link>
      <guid>https://forem.com/hyperswitchio/unnecessary-git-quiz-1b61</guid>
      <description>&lt;h3&gt;
  
  
  Welcome to the Git quiz!
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Here's a quick litmus test for anyone looking to contribute to Hyperswitch or any open source repository in general. This quiz encapsulates basic concepts that you'd need to get started. Haffun!&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;




&lt;ul&gt;
&lt;li&gt;In a recent commit someone created a new file, and moved functions from random files into this file (because modularity). Now it seems that there might be a bug in one of these functions, and the dev that created the file doesn't know the underline logic present in the functions, how can you quickly know who authored it?&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;[a] &lt;code&gt;git blame&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;[b] &lt;code&gt;git blame -C&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;[c] &lt;code&gt;git blame -C -C&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;[d] &lt;code&gt;git blame -C -C -C&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;u&gt;Answer!&lt;/u&gt;&lt;/p&gt;

&lt;pre&gt;
git blame -C -C         # This is the right
git blame -C -C -C      # But, this isn't wrong! (why?)
&lt;/pre&gt;




&lt;ul&gt;
&lt;li&gt;Which of the following commands are used to go to a different existing branch?&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;[a]  &lt;code&gt;git branch &amp;lt;branch-name&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;[b]  &lt;code&gt;git switch &amp;lt;branch-name&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;[c]  &lt;code&gt;git branch -c &amp;lt;branch-name&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;[d]  &lt;code&gt;git checkout -b &amp;lt;branch-name&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;u&gt;Answer!&lt;/u&gt;&lt;/p&gt;

&lt;pre&gt;
git switch &amp;lt;branch-name&amp;gt;
&lt;/pre&gt;




&lt;ul&gt;
&lt;li&gt;Consider, if you have to raise a PR to a external open source repo, what are the steps that you will follow?
(Consider the OSS repo is on github, mention the steps that are performed locally as git commands and that performed on github &amp;amp; anything else as simple points)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;u&gt;Answer!&lt;/u&gt;&lt;/p&gt;

&lt;pre&gt;
Following are the steps of contributing to OSS repos
  1. Find issue and communicate about possible solution.
  2. Fork the repository
  3. Clone it to your local setup.
  4. Configure components mentioned in the `README.md`s 
  5. `git checkout -b &amp;lt;branch-name&amp;gt;` create a new branch for development
  6. complete the development, commit the changes following the guidelines for commits as mentioned in their repository
  7. add your personal forks origin, if you cloned before forking. `git remote add my-origin &amp;lt;your repo link&amp;gt;`
  8. push to the repository, either `git push origin &amp;lt;branch-name&amp;gt;` or `git push my-origin &amp;lt;branch-name&amp;gt;`
  9. raise a PR to their repository, (Optionally, run CI tests on your local fork, and then raise a PR)
&lt;/pre&gt;




&lt;ul&gt;
&lt;li&gt;You have made a few changes and added a few new files, turns out you have to start working on something else, so you need to keep everything that you have done aside, how will you do that?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;u&gt;Answer!&lt;/u&gt;&lt;/p&gt;

&lt;pre&gt;
`git stash -u`
&lt;/pre&gt;




&lt;ul&gt;
&lt;li&gt;You are reading a file in your local git repository, and you wish to know more about a certain function you saw in it, but there is no documentation, how can you get information about it?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;u&gt;Answer!&lt;/u&gt;&lt;/p&gt;

&lt;pre&gt;
`git blame /path/to/file` and ask the author about more details
&lt;/pre&gt;




&lt;ul&gt;
&lt;li&gt;What’s the difference between &lt;code&gt;git merge&lt;/code&gt; and &lt;code&gt;git rebase&lt;/code&gt;?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;u&gt;Answer!&lt;/u&gt;&lt;/p&gt;

&lt;pre&gt;
git merge, ands a new commit to your new branch which gets the branch up-to-date with the branch that your are merging. git rebase on the other hand rebases the commits on top of the other branch. The following diagram explains it.
     U----V----W----X----      (your current branch)
    /              / &amp;lt;---  (the merge)
  -A----B----C----D----F       (branch to be merged)

  git merge
                     U----V----W       (branch after rebase)
     U----V----W    /                  (branch before rebase)
    /              /
  -A----B----C----D----F               (branch to be merged)

  git rebase
&lt;/pre&gt;




&lt;ul&gt;
&lt;li&gt;Oops, someone accidentally pushed a commit to your main branch and that’s breaking quite a few things, what would you do, if you want to get the main branch stable again?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;u&gt;Answer!&lt;/u&gt;&lt;/p&gt;

&lt;pre&gt;
`git revert HEAD`
&lt;/pre&gt;




&lt;ul&gt;
&lt;li&gt;You have done some changes to your branch, you want to view those changes before committing them, what would you do to view what new code you have added.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;[a]  &lt;code&gt;git log&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;[b]  &lt;code&gt;git show&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;[c]  &lt;code&gt;git diff&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;[d]  &lt;code&gt;git status&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;u&gt;Answer!&lt;/u&gt;&lt;/p&gt;

&lt;pre&gt;
`git diff`
&lt;/pre&gt;




&lt;ul&gt;
&lt;li&gt;You are working on a new feature, while testing you found out that the application isn’t showing any logs. Luckily, a collaborator mentioned she added a commit just to enable logging in her own branch, but it was a long time back and she had added more commits after that, what would you do?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;u&gt;Answer!&lt;/u&gt;&lt;/p&gt;

&lt;pre&gt;
`git cherrypick`
&lt;/pre&gt;




&lt;ul&gt;
&lt;li&gt;You are getting ready for deploying your project on cloud, but the server configuration file in your branch is amiss, once again a collaborator to the rescue, lets you know that he has a proper config in one of his commit but unfortunately the commit also has other changes. you want to do a dry-run of the config by getting the changes from that single file into your current branch, which git command can accomplish this?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;u&gt;Answer!&lt;/u&gt;&lt;/p&gt;

&lt;pre&gt;
`git checkout branc-name:/path/to/file`
&lt;/pre&gt;




&lt;ul&gt;
&lt;li&gt;You have added a commit to your branch, the commit message looks something like, &lt;code&gt;feat(db): add new tabel to customre database&lt;/code&gt; seems like it there are a few spelling mistakes, how can you fix the commit message?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;u&gt;Answer!&lt;/u&gt;&lt;/p&gt;

&lt;pre&gt;
`git commit --amend`
&lt;/pre&gt;




&lt;ul&gt;
&lt;li&gt;You are maintaining a rust project on GitHub, and someone raised a PR to it with the binaries for the compiled rust project, but those are huge and we don’t need them. What can you do, so that now one in the future is able to commit &lt;code&gt;/target&lt;/code&gt; directory to the repo?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;u&gt;Answer!&lt;/u&gt;&lt;/p&gt;

&lt;pre&gt;
Add the folder in `.gitignore`
&lt;/pre&gt;




&lt;ul&gt;
&lt;li&gt;You had cloned your friends repository, and were working on it. You came up with a solid feature and committed it to your local branch, instead of sending the branch to his repository, you want to send it to your own fork of his repository on GitHub, list exactly 2 commands that will which when run in succession will allow this to happen.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;u&gt;Answer!&lt;/u&gt;&lt;/p&gt;

&lt;pre&gt;
Do the following
  1. Add remote `git remote add my-origin `
  2. Push change `git push my-origin `
&lt;/pre&gt;




&lt;ul&gt;
&lt;li&gt;You are working on a branch and want to incorporate the changes made to the main branch. What command do you use to do this?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;u&gt;Answer!&lt;/u&gt;&lt;/p&gt;

&lt;pre&gt;
`git pull origin main`
&lt;/pre&gt;




&lt;ul&gt;
&lt;li&gt;How will you make sure that your name and email appears on every commit that you make?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;u&gt;Answer!&lt;/u&gt;&lt;/p&gt;

&lt;pre&gt;
adding them to `git config` entries will be `user.name` and `user.email`
&lt;/pre&gt;




&lt;p&gt;Embark on an enlightening journey through the intricate world of payments. These blogs are your compass to navigate the complexities of the payment galaxy. &lt;/p&gt;

&lt;p&gt;As developers, we create a lot of value through the applications we build. Payments are the means to capture some of that value for ourselves. Surprisingly, the effort to set up a payments stack is often exaggerated. This is what we aim to solve at Hyperswitch by building a free and open payments switch. If you resonate with this vision, you can join the movement to help build an open payments ecosystem!&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%2Fvwbphgvpyilq2h1546h9.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%2Fvwbphgvpyilq2h1546h9.png" alt="contributors" width="800" height="681"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more about how you can set up your own payments stack in minutes with &lt;a href="https://docs.hyperswitch.io/about-hyperswitch/readme" rel="noopener noreferrer"&gt;Hyperswitch&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;




&lt;ul&gt;
&lt;li&gt;Want to contribute? Check out some of our &lt;a href="https://github.com/juspay/hyperswitch/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22" rel="noopener noreferrer"&gt;good first issues here.&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Try Hyperswitch. &lt;a href="https://app.hyperswitch.io/" rel="noopener noreferrer"&gt;Get your API keys here.&lt;/a&gt;
Happy reading!&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>opensource</category>
      <category>git</category>
      <category>linux</category>
      <category>github</category>
    </item>
    <item>
      <title>Top 10 Blogs of Hyperswitch from 2023</title>
      <dc:creator>Vedant Khairnar</dc:creator>
      <pubDate>Fri, 05 Jan 2024 14:01:57 +0000</pubDate>
      <link>https://forem.com/hyperswitchio/top-10-blogs-of-hyperswitch-from-2023-3e5b</link>
      <guid>https://forem.com/hyperswitchio/top-10-blogs-of-hyperswitch-from-2023-3e5b</guid>
      <description>&lt;p&gt;Welcome to our collection of standout blogs from 2023 at Hyperswitch, where we dive into the fascinating world of payments. Think of these blogs as your friendly guides, walking you through the twists and turns of payment technology and strategy. Whether you're a seasoned pro or just getting started, get ready for some eye-opening insights that these articles have to offer.&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%2Fil8oxz5pctl2uk8btidt.gif" 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%2Fil8oxz5pctl2uk8btidt.gif" alt="Bruno Mars 10" width="500" height="250"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Payments 101 for a Developer&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;Grab a gist of the various payment terminologies that you might encounter. This blog is an attempt to simplify the core concepts you need to know and bring you up to speed with payments. Understand the different stakeholders and stages involved in the payment process.&lt;/em&gt;&lt;br&gt;
&lt;a href="https://hyperswitch.io/blog/payments-101-for-a-developer" rel="noopener noreferrer"&gt;Read more &amp;gt;&amp;gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Ask not what the compiler can do for you&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;When we talk about Rust being very secure, there comes a point where one must ponder about just how much responsibility we can leave on the compiler. Even with all the brilliant features that the compiler provides there are always some things that the compiler might not catch. This blog covers our experience in the same situation.&lt;/em&gt;&lt;br&gt;
&lt;a href="https://hyperswitch.io/blog/what-the-compiler-can-do-for-you" rel="noopener noreferrer"&gt;Read more &amp;gt;&amp;gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;No code payments automation is a lie&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;Dive deep into the novel concept to eliminate code from accepting payments and managing payments lifecycle. This blog meticulously breaks down the concept of no-code payments automation, revealing how businesses can streamline workflows without the reliance on complex programming. Witness the power of automation in simplifying intricate payment processes.&lt;/em&gt;&lt;br&gt;
&lt;a href="https://hyperswitch.io/blog/what-is-no-code-payments-automation" rel="noopener noreferrer"&gt;Read more &amp;gt;&amp;gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;What the hell is Payment Orchestration?&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;Delve into the world full of payment processors and the evolving nature of the payments ecosystem and how payment orchestration helps simplify the world for everyone. This blog unveils the orchestration processes that ensure a flawless and efficient transactional experience for businesses and consumers alike. Gain insights into the orchestration of diverse payment methods and systems and how you can choose the ideal payment orchestrator for you.&lt;/em&gt;&lt;br&gt;
&lt;a href="https://hyperswitch.io/blog/what-is-payment-orchestration" rel="noopener noreferrer"&gt;Read more &amp;gt;&amp;gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;How to run Apple Pay inside iFrames&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;Improve user experience by integrating Apple Pay seamlessly into your app. You would it's a bit of a challenge if you have tried it. Well it's not difficult anymore. This blog provides step-by-step guidance on incorporating Apple Pay, the major problem in the process and it's solution as well.&lt;/em&gt;&lt;br&gt;
&lt;a href="https://hyperswitch.io/blog/integrating-apple-pay-on-your-app" rel="noopener noreferrer"&gt;Read more &amp;gt;&amp;gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Everything you need to know about setting up your WordPress site&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;WordPress, the powerhouse of content management systems, opens doors for everyone, from seasoned developers to eager beginners.&lt;br&gt;
In this comprehensive guide, we unravel the intricacies of WordPress, the renowned content management system that empowers users to create stunning websites without the need for extensive technical knowledge.&lt;/em&gt;&lt;br&gt;
&lt;a href="https://hyperswitch.io/blog/everything-you-need-to-know-about-wordpress" rel="noopener noreferrer"&gt;Read more &amp;gt;&amp;gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Why I won't pay on your website?&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;Step into the shoes of a user and explore the intricacies of the payment experience. This blog provides a user-centric perspective, uncovering the reasons users might hesitate to make payments on your website. Gain actionable insights into building trust and optimizing the user payment journey.&lt;/em&gt;&lt;br&gt;
&lt;a href="https://hyperswitch.io/blog/why-i-wont-pay-on-your-website" rel="noopener noreferrer"&gt;Read more &amp;gt;&amp;gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Add PayPal to your Stripe Integration | Hyperswitch&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;Get best of both worlds- Stripe's developer experience ad PayPal's user reach among your customer base. Expand your payment horizons by seamlessly integrating PayPal into your existing Stripe setup using hyperswitch. This blog mentions the advantages the Stripe-Paypal integration brings to you , ensuring a smooth and hassle-free experience for your users. Overall explore the benefits of offering multiple payment options to your users.&lt;/em&gt;&lt;br&gt;
&lt;a href="https://hyperswitch.io/blog/add-paypal-to-your-stripe-integration" rel="noopener noreferrer"&gt;Read more &amp;gt;&amp;gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Wire vs ACH: What's the Difference&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;Demystify the concepts behind wire transfers and ACH transactions and their differences in this comprehensive exploration. Gain insights into when to use each method, optimizing your financial transactions for efficiency and cost-effectiveness. This blog is your guide to navigating the intricacies of two essential payment avenues.&lt;/em&gt;&lt;br&gt;
&lt;a href="https://hyperswitch.io/blog/wire-vs-ach-whats-the-difference" rel="noopener noreferrer"&gt;Read more &amp;gt;&amp;gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Everything you need to know about Open Banking&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;Peek into the future of finance with this in-depth exploration of open banking. Understand how this transformative trend is reshaping the financial landscape, providing both challenges and opportunities for businesses and consumers alike. Stay ahead of the curve with a comprehensive guide to the open banking revolution.&lt;/em&gt;&lt;br&gt;
&lt;a href="https://hyperswitch.io/blog/everything-you-need-to-know-about-open-banking" rel="noopener noreferrer"&gt;Read more &amp;gt;&amp;gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you have come this far, then you are loving these. Here are some bonus blogs for you!&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;An Open Source Payments Switch with virtually zero overhead&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;Explore the revolutionary concept of an open-source payments switch and how Hyperswitch brought it into reality. This blog delves into how the virtually zero overhead was achieved and , offering insights into cost-effectiveness and enhanced customization.&lt;/em&gt;&lt;br&gt;
&lt;a href="https://hyperswitch.io/blog/an-opensource-payments-switch-with-virtually-zero-overhead" rel="noopener noreferrer"&gt;Read more &amp;gt;&amp;gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Realtime analytics with ClickHouse&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;The complexity around PCI compliance is often exaggerated, creating closed systems and walled gardens. Of course, PCI compliance is not a one-time exercise. It requires additional time and effort. But it is no rocket science either. Uncover the essential principles and practices to ensure your payment processes meet industry standards, safeguarding sensitive information and building trust with your users.&lt;/em&gt;&lt;br&gt;
&lt;a href="https://hyperswitch.io/blog/real-time-analytics-with-clickhouse" rel="noopener noreferrer"&gt;Read more &amp;gt;&amp;gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Payment methods: Which ones are right for your business?&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;With this blog, understand the importance of having multiple payment methods on your platform, on how it can improve the conversion rates, reduce processing costs and help you manage fraud and risk. From traditional credit cards to cutting-edge cryptocurrencies, this blog offers a comprehensive overview of the diverse options available. Stay ahead of the curve by understanding the nuances and implications of each payment method.&lt;/em&gt;&lt;br&gt;
&lt;a href="https://hyperswitch.io/blog/the-payment-methods-landscape" rel="noopener noreferrer"&gt;Read more &amp;gt;&amp;gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Explore the Tips for Checkout Optimization to Improve Conversion Rate&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;Unlock the secrets to optimizing your checkout experience and boosting conversion rates. This blog delves into user-centric strategies, design principles, and technological enhancements to create a seamless and frictionless checkout process for your customers with both bad and good examples for the different mentioned UX issues.&lt;/em&gt;&lt;br&gt;
&lt;a href="https://hyperswitch.io/blog/optimizing-checkout-experience-and-conversion-rates" rel="noopener noreferrer"&gt;Read more &amp;gt;&amp;gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;6 Reasons Why your business should have multiple Payment Processors&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;With the previous blog, you understood what is a processor and how it helps your business but there's a high need of having multiple processors. With this blog, dive into the strategic realm of payment diversification, where reliability meets innovation. Explore the myriad reasons why having multiple payment processors is not merely a choice but a strategic necessity. Uncover the benefits of redundancy, flexibility, and enhanced user experience that come with a diversified payment strategy.&lt;/em&gt;&lt;br&gt;
&lt;a href="https://hyperswitch.io/blog/reasons-to-business-should-have-multiple-payment-processors" rel="noopener noreferrer"&gt;Read more &amp;gt;&amp;gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;Embark on an enlightening journey through the intricate world of payments. These blogs are your compass to navigate the complexities of the payment galaxy. &lt;/p&gt;

&lt;p&gt;As developers, we create a lot of value through the applications we build. Payments are the means to capture some of that value for ourselves. Surprisingly, the effort to set up a payments stack is often exaggerated. This is what we aim to solve at Hyperswitch by building a free and open payments switch. If you resonate with this vision, you can join the movement to help build an open payments ecosystem!&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%2Fvwbphgvpyilq2h1546h9.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%2Fvwbphgvpyilq2h1546h9.png" alt="contributors" width="800" height="681"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn more about how you can set up your own payments stack in minutes with &lt;a href="https://docs.hyperswitch.io/about-hyperswitch/readme" rel="noopener noreferrer"&gt;Hyperswitch&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;




&lt;ul&gt;
&lt;li&gt;Want to contribute? Check out some of our &lt;a href="https://github.com/juspay/hyperswitch/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22" rel="noopener noreferrer"&gt;good first issues here.&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Try Hyperswitch. &lt;a href="https://app.hyperswitch.io/" rel="noopener noreferrer"&gt;Get your API keys here.&lt;/a&gt;
Happy reading!&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
    <item>
      <title>Adaptive Traffic Signal Control System</title>
      <dc:creator>Vedant Khairnar</dc:creator>
      <pubDate>Wed, 20 Dec 2023 07:15:23 +0000</pubDate>
      <link>https://forem.com/vedantkhairnar/adaptive-traffic-signal-control-system-1b6g</link>
      <guid>https://forem.com/vedantkhairnar/adaptive-traffic-signal-control-system-1b6g</guid>
      <description>&lt;p&gt;Traffic congestion is becoming a serious problem with a large number of cars on the roads. Vehicles queue length waiting to be processed at the intersection is rising sharply with the increase of the traffic flow, and the traditional traffic lights cannot efficiently schedule it.&lt;/p&gt;

&lt;p&gt;Traffic congestion is a major problem in many cities, and the fixed-cycle light signal controllers are not resolving the high waiting time in the intersection. &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%2Fwr4hmvq5p73e9m0vh6ut.gif" 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%2Fwr4hmvq5p73e9m0vh6ut.gif" alt="traffic jam" width="270" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We see often a policeman managing the movements instead of the traffic light. He sees road status and decides the allowed duration of each direction. This human achievement encourages us to create a smart Traffic light control taking into account the real time traffic condition and smartly manage the intersection.&lt;/p&gt;

&lt;p&gt;So, what do we do???&lt;/p&gt;

&lt;h2&gt;
  
  
  Solution
&lt;/h2&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%2Fwzuippxs6lm1hu59ngux.gif" 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%2Fwzuippxs6lm1hu59ngux.gif" alt="this way gif" width="480" height="360"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The answer is to build a self adaptive traffic light control system. Disproportionate and diverse traffic in different lanes leads to inefficient utilization of same time slot for each of them characterized by slower speeds, longer trip times, and increased vehicular queuing.To create a system which enable the traffic management system to take time allocation decisions for a particular lane according to the traffic density on other different lanes with the help of cameras, image processing modules.&lt;/p&gt;

&lt;p&gt;In fact, we use computer vision and machine learning to have the characteristics of the competing traffic flows at the signalized road intersection. This is done by a state-of-the-art, real-time object detection based on a deep Convolutional Neural Networks called You Only Look Once (YOLO). Then traffic signal phases are optimized according to collected data, mainly queue density and waiting time per vehicle, to enable as much as more vehicles to pass safely with minimum waiting time. YOLO can be implemented on embedded controllers using Transfer Learning&lt;br&gt;
technique.&lt;/p&gt;
&lt;h2&gt;
  
  
  The Tech Side
&lt;/h2&gt;

&lt;p&gt;Lets get our hands dirty with understanding why and how we can resolve this issue. To implement such a system, we need two main parts: eyes to watch the real-time road condition and a brain to process it. A traffic signal system at its core has two major tasks: move as many users through the intersection as possible doing this with as little conflict between these users as possible.&lt;/p&gt;

&lt;p&gt;Regarding literature,this project is based on &lt;a href="https://github.com/taehoonlee/tensornets" rel="noopener noreferrer"&gt;Tensornets&lt;/a&gt;, &lt;a href="https://github.com/experiencor/keras-yolo3" rel="noopener noreferrer"&gt;keras-yolov3&lt;/a&gt; repository and find more detailed read on this blog for YOLO.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Code for this is available &lt;a href="https://github.com/VedantKhairnar/Adaptive-Traffic-Signal-Control-System" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;The Dependencies we will be needing are mentioned in the requirements.txt&lt;/li&gt;
&lt;li&gt;Install dependencies via pip specified by requirements.txt file.&lt;/li&gt;
&lt;li&gt;The code is tested and run with Python 3.7.4 and Python 3.5.6 on Ubuntu 18.04.3 LTS.
(Windows 10 platforms should also be able to run the project).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Coming to the core of this project structure that is the technologies we will be using&lt;/p&gt;
&lt;h3&gt;
  
  
  YOLO
&lt;/h3&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%2F4xtfrk0q7y16ie1ddids.gif" 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%2F4xtfrk0q7y16ie1ddids.gif" alt="YOLO Silicon Valley" width="504" height="283"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You only look once (YOLO) is a state-of-the-art, real-time object detection&lt;br&gt;
systemYOLO, a new approach to object detection. Prior work on object detection repurposes classifiers to perform detection. Instead, we frame object detection as a regression problem to spatially separated bounding boxes and associated class probabilities. A single neural network predicts bounding boxes and class probabilities directly from full images in one evaluation. Since the whole detection pipeline is a single network, it can be optimized end-to-end directly on detection performance.&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%2Fi5uqb23grns6laqm0v8p.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%2Fi5uqb23grns6laqm0v8p.png" alt="YOLO" width="656" height="445"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The object detection task consists in determining the location on the image where certain objects are present, as well as classifying those objects. Previous methods for this, like R-CNN and its variations, used a pipeline to perform this task in multiple steps. This can be slow to run and also hard to optimize, because each individual component must be trained separately. YOLO, does it all with a single neural network.&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%2Fkzmh4adqd8575u9ep650.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%2Fkzmh4adqd8575u9ep650.png" alt="Yolo Neural Layers" width="640" height="300"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  YoloV3 Car Counter
&lt;/h3&gt;

&lt;p&gt;This is a demo project that uses pretrained YoloV3 neural network to count vehicles on a given video. The detection happens every x frames where x can be specified. Other times the dlib library is used for tracking previously detected vehicles. Furthermore, you can edit confidence detection level, number of frames to count vehicle as detected before removing it from trackable list and the maximum distance from centroid (see CentroidTracker class), number of frames to skip detection (and only use tracking) and the whether to use the original video size as annotations output or the YoloV3 416x416 size.&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%2Fshin40gdddutctdmzvwf.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%2Fshin40gdddutctdmzvwf.png" alt="Crossroad" width="475" height="317"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Regarding the working, the solution can be explained in four simple steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Get a real time image of each lane.&lt;/li&gt;
&lt;li&gt;Scan and determine traffic density.&lt;/li&gt;
&lt;li&gt;Input this data to the Time Allocation module.&lt;/li&gt;
&lt;li&gt;The output will be the time slots for each lane, accordingly.&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%2Fjydfvjlfrbvkqams805k.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%2Fjydfvjlfrbvkqams805k.png" alt="Flow of work" width="578" height="1091"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;and hence the sequence of operations performed are as follows&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Camera sends images after regular short intervals to our system.&lt;/li&gt;
&lt;li&gt;The system determines further the number of cars in the lane and hence computes its relative density with respect to other lanes.&lt;/li&gt;
&lt;li&gt;Time allotment module takes input (as traffic density) from this system and determines an optimized and efficient time slot.&lt;/li&gt;
&lt;li&gt;This value is then triggered by the microprocessor to the respective Traffic Lights.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Now, we have got the number of vehicles in all the lanes,&lt;br&gt;
Its time for the &lt;em&gt;Synchronization logic to come into action which will decide the time for all the lanes&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;baseTimer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;120&lt;/span&gt;
&lt;span class="n"&gt;timeLimits&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="n"&gt;timeList&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nf"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;no_of_vehicles&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;baseTimer&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;timeLimits&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nf"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;no_of_vehicles&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;baseTimer&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;timeLimits&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;else&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;timeLimits&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;lambda&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;abs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="err"&gt;—&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nf"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;no_of_vehicles&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;baseTimer&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;no_of_vehicles&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;timeList&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;timeList&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Result
&lt;/h2&gt;

&lt;p&gt;As a result, we get&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%2Fvpeq2nbk1ssebv7echmr.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%2Fvpeq2nbk1ssebv7echmr.png" alt="Detected Cars" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion and Extensibility
&lt;/h2&gt;

&lt;p&gt;and hence we conclude that the goal of this work is to improve intelligent transport systems by developing a Self-adaptive algorithm to control road traffic based on deep Learning. This new system facilitates the movement of cars in intersections, resulting in reducing congestion, less CO2 emissions, etc. The richness that video data provides highlights the importance of advancing the state-of-the-art in object detection, classification and tracking for real-time applications. YOLO provides extremely fast inference speed with slight compromise in accuracy, especially at lower resolutions and with smaller objects. While real-time inference is possible, applications that utilize edge devices still require improvements in either the architecture’s design or edge device’s hardware. Finally, we have proposed a new algorithm taking this real-time data from YOLO and optimizing phases in order to reduce vehicle waiting time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Regarding Extensibility&lt;/strong&gt; we can easily extend this project by changing the classes you are interested in detecting and tracking (see what classes does YoloV3 support and/or change the neural network used by tensornets for better speed/accuracy.&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%2Fc25apimagj4060yv05t8.gif" 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%2Fc25apimagj4060yv05t8.gif" alt="see you again" width="400" height="225"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>machinelearning</category>
      <category>deeplearning</category>
      <category>management</category>
      <category>python</category>
    </item>
  </channel>
</rss>
