<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Akash Santra</title>
    <description>The latest articles on DEV Community by Akash Santra (@akash_santra_3c96613546c6).</description>
    <link>https://dev.to/akash_santra_3c96613546c6</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3845534%2F7776dc1e-dab5-433e-ab5b-1defb9cc9839.jpg</url>
      <title>DEV Community: Akash Santra</title>
      <link>https://dev.to/akash_santra_3c96613546c6</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/akash_santra_3c96613546c6"/>
    <language>en</language>
    <item>
      <title>UDP Can Lose Your Packets. So I Made It Reliable.</title>
      <dc:creator>Akash Santra</dc:creator>
      <pubDate>Fri, 18 Sep 2026 18:13:30 +0000</pubDate>
      <link>https://dev.to/akash_santra_3c96613546c6/udp-can-lose-your-packets-so-i-made-it-reliable-edf</link>
      <guid>https://dev.to/akash_santra_3c96613546c6/udp-can-lose-your-packets-so-i-made-it-reliable-edf</guid>
      <description>&lt;h1&gt;
  
  
  UDP Can Lose Your Packets. So I Made It Reliable.
&lt;/h1&gt;

&lt;p&gt;UDP is fast and simple.&lt;/p&gt;

&lt;p&gt;But it also makes very few promises:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No delivery guarantee&lt;/li&gt;
&lt;li&gt;No ordering guarantee&lt;/li&gt;
&lt;li&gt;No retransmission&lt;/li&gt;
&lt;li&gt;No duplicate protection&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So I started wondering:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;What would it actually take to make UDP reliable?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Instead of only reading about how TCP handles reliability, I decided to build a small reliable transport layer on top of UDP.&lt;/p&gt;

&lt;p&gt;This isn't a replacement for TCP.&lt;/p&gt;

&lt;p&gt;It isn't production-ready either.&lt;/p&gt;

&lt;p&gt;It's a small experiment to understand what actually happens underneath reliable communication.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;When data is sent over UDP, the sender doesn't know whether a packet actually reached the receiver.&lt;/p&gt;

&lt;p&gt;A packet can be lost somewhere in the network.&lt;/p&gt;

&lt;p&gt;It can also arrive later than another packet, arrive more than once, or never arrive at all.&lt;/p&gt;

&lt;p&gt;That creates several problems:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How do we identify each packet?&lt;/li&gt;
&lt;li&gt;How do we know whether a packet arrived?&lt;/li&gt;
&lt;li&gt;How do we detect a missing packet?&lt;/li&gt;
&lt;li&gt;How do we resend it?&lt;/li&gt;
&lt;li&gt;How do we handle packets arriving out of order?&lt;/li&gt;
&lt;li&gt;How do we handle duplicate packets?&lt;/li&gt;
&lt;li&gt;How do we send multiple packets efficiently?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are the problems I wanted to solve.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Sequence Numbers
&lt;/h2&gt;

&lt;p&gt;The first requirement is being able to identify individual packets.&lt;/p&gt;

&lt;p&gt;Each packet gets a sequence number.&lt;/p&gt;

&lt;p&gt;This gives the receiver a way to determine the position of each packet and detect missing or duplicated data.&lt;/p&gt;

&lt;p&gt;For example, if packets 1, 3, and 4 arrive, the receiver can determine that packet 2 hasn't arrived yet.&lt;/p&gt;

&lt;p&gt;Sequence numbers are therefore useful for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Detecting missing packets&lt;/li&gt;
&lt;li&gt;Detecting duplicates&lt;/li&gt;
&lt;li&gt;Detecting out-of-order packets&lt;/li&gt;
&lt;li&gt;Maintaining the correct order of data&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  2. Acknowledgements
&lt;/h2&gt;

&lt;p&gt;The sender also needs feedback from the receiver.&lt;/p&gt;

&lt;p&gt;That's where acknowledgements, or ACKs, come in.&lt;/p&gt;

&lt;p&gt;When the receiver successfully receives a packet, it sends an acknowledgement back to the sender.&lt;/p&gt;

&lt;p&gt;The sender can then mark that packet as successfully delivered.&lt;/p&gt;

&lt;p&gt;Without acknowledgements, the sender has no direct way to know whether a packet reached its destination.&lt;/p&gt;

&lt;p&gt;But acknowledgements introduce another problem.&lt;/p&gt;

&lt;p&gt;What happens if the packet arrives, but the ACK itself gets lost?&lt;/p&gt;

&lt;p&gt;That's where timeouts become important.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Timeouts
&lt;/h2&gt;

&lt;p&gt;The sender cannot wait forever for an acknowledgement.&lt;/p&gt;

&lt;p&gt;So after sending a packet, it starts a timer.&lt;/p&gt;

&lt;p&gt;If the expected ACK arrives before the timer expires, the packet is considered successfully delivered.&lt;/p&gt;

&lt;p&gt;If the timer expires without receiving the expected ACK, the sender assumes that the packet or its acknowledgement may have been lost.&lt;/p&gt;

&lt;p&gt;This triggers the next mechanism:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;retransmission.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Retransmission
&lt;/h2&gt;

&lt;p&gt;When a packet is considered lost, the sender sends it again.&lt;/p&gt;

&lt;p&gt;This is the basic idea behind retransmission.&lt;/p&gt;

&lt;p&gt;The sender keeps track of packets that haven't been acknowledged.&lt;/p&gt;

&lt;p&gt;When a timeout occurs, the corresponding packet can be retransmitted.&lt;/p&gt;

&lt;p&gt;This means that even though UDP itself doesn't guarantee delivery, our additional layer can attempt to recover from packet loss.&lt;/p&gt;

&lt;p&gt;Of course, real transport protocols need much more sophisticated loss detection and recovery mechanisms.&lt;/p&gt;

&lt;p&gt;But this simple mechanism makes the idea much easier to understand.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Handling Out-of-Order Packets
&lt;/h2&gt;

&lt;p&gt;Packet loss isn't the only problem.&lt;/p&gt;

&lt;p&gt;Packets can also arrive in a different order from the order in which they were sent.&lt;/p&gt;

&lt;p&gt;For example, packet 3 might arrive before packet 2.&lt;/p&gt;

&lt;p&gt;If the application receives the data immediately, it could process the information in the wrong order.&lt;/p&gt;

&lt;p&gt;Sequence numbers allow the receiver to recognize this situation.&lt;/p&gt;

&lt;p&gt;Instead of immediately delivering every packet, the receiver can temporarily buffer packets that arrive early and wait for the missing data.&lt;/p&gt;

&lt;p&gt;Once the required packets are available, they can be reordered and delivered to the application in the correct sequence.&lt;/p&gt;




&lt;h2&gt;
  
  
  6. Handling Duplicate Packets
&lt;/h2&gt;

&lt;p&gt;Retransmission creates another interesting situation.&lt;/p&gt;

&lt;p&gt;A packet may have successfully reached the receiver, but its ACK might have been lost.&lt;/p&gt;

&lt;p&gt;The sender doesn't know that the packet already arrived.&lt;/p&gt;

&lt;p&gt;Eventually, the timeout expires and the sender retransmits the same packet.&lt;/p&gt;

&lt;p&gt;Now the receiver gets the same packet again.&lt;/p&gt;

&lt;p&gt;This is a duplicate.&lt;/p&gt;

&lt;p&gt;Sequence numbers allow the receiver to recognize that it has already processed that packet.&lt;/p&gt;

&lt;p&gt;Instead of delivering the same data twice, it can ignore the duplicate while still handling the acknowledgement appropriately.&lt;/p&gt;




&lt;h2&gt;
  
  
  7. Sliding Window
&lt;/h2&gt;

&lt;p&gt;There is still another problem.&lt;/p&gt;

&lt;p&gt;What if we send one packet, wait for its ACK, then send the next packet?&lt;/p&gt;

&lt;p&gt;That would work, but it would waste a lot of time waiting for the network.&lt;/p&gt;

&lt;p&gt;A sliding window allows multiple packets to be in flight at the same time.&lt;/p&gt;

&lt;p&gt;Instead of waiting for every individual acknowledgement, the sender can transmit several packets and keep track of which ones have been acknowledged.&lt;/p&gt;

&lt;p&gt;As acknowledgements arrive, the window moves forward and new packets can be sent.&lt;/p&gt;

&lt;p&gt;This improves throughput because the sender doesn't have to stop after every packet.&lt;/p&gt;




&lt;h2&gt;
  
  
  8. Putting Everything Together
&lt;/h2&gt;

&lt;p&gt;At this point, the reliable layer has several responsibilities:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sequence numbers identify packets.&lt;/li&gt;
&lt;li&gt;ACKs confirm successful delivery.&lt;/li&gt;
&lt;li&gt;Timeouts detect packets that may have been lost.&lt;/li&gt;
&lt;li&gt;Retransmission attempts to recover lost packets.&lt;/li&gt;
&lt;li&gt;Reordering handles packets that arrive in the wrong order.&lt;/li&gt;
&lt;li&gt;Duplicate detection prevents the same data from being processed twice.&lt;/li&gt;
&lt;li&gt;Sliding windows allow multiple packets to be in flight.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;UDP remains underneath all of this.&lt;/p&gt;

&lt;p&gt;The network is still capable of losing, delaying, duplicating, or reordering packets.&lt;/p&gt;

&lt;p&gt;We're simply adding another layer that knows how to deal with those problems.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Not Just Use TCP?
&lt;/h2&gt;

&lt;p&gt;This was never about replacing TCP.&lt;/p&gt;

&lt;p&gt;TCP already provides reliable and ordered delivery, along with many other mechanisms for controlling how data moves across a network.&lt;/p&gt;

&lt;p&gt;The purpose of this project was different.&lt;/p&gt;

&lt;p&gt;I wanted to understand what the word &lt;strong&gt;"reliable"&lt;/strong&gt; actually means at the protocol level.&lt;/p&gt;

&lt;p&gt;It's easy to remember:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TCP = reliable&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;UDP = unreliable&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;But that doesn't explain much.&lt;/p&gt;

&lt;p&gt;Once you start implementing the mechanisms yourself, the abstraction becomes much clearer.&lt;/p&gt;

&lt;p&gt;Reliability isn't one feature.&lt;/p&gt;

&lt;p&gt;It's a collection of mechanisms working together.&lt;/p&gt;




&lt;h2&gt;
  
  
  Then QUIC Started Making More Sense
&lt;/h2&gt;

&lt;p&gt;This experiment also made QUIC much easier to understand.&lt;/p&gt;

&lt;p&gt;HTTP/3 uses QUIC, and QUIC runs over UDP.&lt;/p&gt;

&lt;p&gt;At first, that can sound strange.&lt;/p&gt;

&lt;p&gt;If UDP doesn't guarantee delivery, why would a modern web protocol use it?&lt;/p&gt;

&lt;p&gt;The important point is that UDP itself doesn't suddenly become reliable.&lt;/p&gt;

&lt;p&gt;QUIC provides its own transport functionality above UDP, including reliable delivery, streams, flow control, congestion control, and TLS integration.&lt;/p&gt;

&lt;p&gt;That's why the simplified HTTP/3 stack looks different from the traditional HTTP stack.&lt;/p&gt;

&lt;p&gt;HTTP traditionally sits on top of TCP.&lt;/p&gt;

&lt;p&gt;HTTP/3 sits on top of QUIC, which runs over UDP.&lt;/p&gt;

&lt;p&gt;The reliability hasn't disappeared.&lt;/p&gt;

&lt;p&gt;It's handled by QUIC.&lt;/p&gt;

&lt;p&gt;That distinction became much easier to understand after building a small version of the underlying idea myself.&lt;/p&gt;




&lt;h2&gt;
  
  
  TCP vs My Reliable UDP
&lt;/h2&gt;

&lt;p&gt;My implementation is obviously nowhere near the complexity or maturity of TCP.&lt;/p&gt;

&lt;p&gt;But the comparison is useful for understanding the basic responsibilities involved.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;UDP&lt;/th&gt;
&lt;th&gt;My Implementation&lt;/th&gt;
&lt;th&gt;TCP&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Delivery guarantee&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ordered delivery&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sequence numbers&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ACKs&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Retransmission&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Duplicate handling&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sliding window&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Flow control&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Limited&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Congestion control&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Limited&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The important takeaway is that reliable communication requires much more than simply sending data from one machine to another.&lt;/p&gt;




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

&lt;p&gt;The project focuses on implementing the core mechanisms needed for reliable communication over UDP.&lt;/p&gt;

&lt;p&gt;The main components are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sequence numbers&lt;/li&gt;
&lt;li&gt;ACK handling&lt;/li&gt;
&lt;li&gt;Timeout detection&lt;/li&gt;
&lt;li&gt;Retransmission&lt;/li&gt;
&lt;li&gt;Packet reordering&lt;/li&gt;
&lt;li&gt;Duplicate handling&lt;/li&gt;
&lt;li&gt;Sliding-window transmission&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal wasn't to recreate TCP.&lt;/p&gt;

&lt;p&gt;The goal was to make the abstraction visible and understand the ideas behind reliable transport.&lt;/p&gt;




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

&lt;p&gt;Before working on this, it was easy to think about networking in terms of definitions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;TCP is reliable.&lt;/li&gt;
&lt;li&gt;UDP is fast.&lt;/li&gt;
&lt;li&gt;TCP uses acknowledgements.&lt;/li&gt;
&lt;li&gt;UDP doesn't guarantee delivery.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After implementing the mechanisms, those definitions started to feel much less abstract.&lt;/p&gt;

&lt;p&gt;I could see the problem each mechanism was trying to solve.&lt;/p&gt;

&lt;p&gt;Sequence numbers solve identification and ordering.&lt;/p&gt;

&lt;p&gt;ACKs provide feedback.&lt;/p&gt;

&lt;p&gt;Timeouts help detect missing communication.&lt;/p&gt;

&lt;p&gt;Retransmission provides recovery.&lt;/p&gt;

&lt;p&gt;Buffering handles out-of-order delivery.&lt;/p&gt;

&lt;p&gt;Duplicate detection prevents repeated processing.&lt;/p&gt;

&lt;p&gt;Sliding windows improve efficiency.&lt;/p&gt;

&lt;p&gt;Each mechanism exists because the network can fail in a different way.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Bigger Lesson
&lt;/h2&gt;

&lt;p&gt;The most useful thing I got from this project wasn't another definition of TCP or UDP.&lt;/p&gt;

&lt;p&gt;It was learning to ask:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Why does this mechanism exist?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Instead of memorizing that a protocol uses sequence numbers, I can now think about the problem sequence numbers are solving.&lt;/p&gt;

&lt;p&gt;Instead of memorizing that retransmission exists, I can think about what happens when data disappears.&lt;/p&gt;

&lt;p&gt;That shift from &lt;strong&gt;remembering features&lt;/strong&gt; to &lt;strong&gt;understanding the problems behind them&lt;/strong&gt; made networking much more interesting for me.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Thought
&lt;/h2&gt;

&lt;p&gt;One of the best ways I've found to understand a protocol is to remove some of the abstraction and rebuild a small part of it.&lt;/p&gt;

&lt;p&gt;Start with something simple:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Send data.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Then ask:&lt;/p&gt;

&lt;p&gt;What if the packet is lost?&lt;/p&gt;

&lt;p&gt;What if the ACK is lost?&lt;/p&gt;

&lt;p&gt;What if the packet arrives twice?&lt;/p&gt;

&lt;p&gt;What if packets arrive out of order?&lt;/p&gt;

&lt;p&gt;What if the network becomes congested?&lt;/p&gt;

&lt;p&gt;Each problem leads to another mechanism.&lt;/p&gt;

&lt;p&gt;And eventually, the protocol starts to make sense.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Don't just learn what a protocol does. Try rebuilding the reason it exists.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>networking</category>
      <category>backend</category>
      <category>programming</category>
      <category>systemdesign</category>
    </item>
    <item>
      <title>Fixing AI Observability: How I Added GenAI Semantic Support for RAG Embedding Spans in Mastra</title>
      <dc:creator>Akash Santra</dc:creator>
      <pubDate>Wed, 17 Jun 2026 12:51:08 +0000</pubDate>
      <link>https://dev.to/akash_santra_3c96613546c6/fixing-ai-observability-how-i-added-genai-semantic-support-for-rag-embedding-spans-in-mastra-4db9</link>
      <guid>https://dev.to/akash_santra_3c96613546c6/fixing-ai-observability-how-i-added-genai-semantic-support-for-rag-embedding-spans-in-mastra-4db9</guid>
      <description>&lt;p&gt;OpenTelemetry has become the standard for observing modern systems.&lt;/p&gt;

&lt;p&gt;But when you start building AI applications, traditional traces aren't enough.&lt;/p&gt;

&lt;p&gt;You don't just want to know that a request happened.&lt;/p&gt;

&lt;p&gt;You want to know:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which model generated the output?&lt;/li&gt;
&lt;li&gt;Which provider was used?&lt;/li&gt;
&lt;li&gt;How many tokens were consumed?&lt;/li&gt;
&lt;li&gt;What embedding model processed the documents?&lt;/li&gt;
&lt;li&gt;How much did the operation cost?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These questions become even more important when building Retrieval-Augmented Generation (RAG) systems.&lt;/p&gt;

&lt;p&gt;Recently while contributing to Mastra, I discovered an observability gap involving RAG embedding operations.&lt;/p&gt;

&lt;p&gt;This led me to open a pull request that introduced proper OpenTelemetry GenAI semantic mappings for RAG_EMBEDDING spans.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;Mastra already exported rich metadata for several AI operations.&lt;/p&gt;

&lt;p&gt;However, RAG embedding spans were missing standardized GenAI semantic attributes.&lt;/p&gt;

&lt;p&gt;As a result, observability tools could see that an embedding operation occurred, but they couldn't easily understand:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Model information&lt;/li&gt;
&lt;li&gt;Provider information&lt;/li&gt;
&lt;li&gt;Token usage&lt;/li&gt;
&lt;li&gt;Embedding-specific metadata&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Without standardized semantic conventions, dashboards and tracing systems lose valuable context.&lt;/p&gt;

&lt;p&gt;This becomes a bigger issue in production environments where teams need visibility into AI workloads.&lt;/p&gt;

&lt;h2&gt;
  
  
  Understanding RAG Embedding Spans
&lt;/h2&gt;

&lt;p&gt;A typical RAG pipeline looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Documents
    ↓
Chunking
    ↓
Embedding Model
    ↓
Vector Database
    ↓
Similarity Search
    ↓
LLM Generation
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The embedding stage is critical.&lt;/p&gt;

&lt;p&gt;Every document chunk gets transformed into a vector representation.&lt;/p&gt;

&lt;p&gt;If observability data from this stage is incomplete, debugging performance issues becomes significantly harder.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why OpenTelemetry Semantic Conventions Matter
&lt;/h2&gt;

&lt;p&gt;OpenTelemetry doesn't just define traces.&lt;/p&gt;

&lt;p&gt;It also defines semantic conventions.&lt;/p&gt;

&lt;p&gt;These conventions create a common language for telemetry data.&lt;/p&gt;

&lt;p&gt;Instead of every framework inventing custom field names, everyone follows the same standard.&lt;/p&gt;

&lt;p&gt;For GenAI workloads this means tools can automatically understand attributes such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;gen_ai.system
gen_ai.request.model
gen_ai.response.model
gen_ai.usage.input_tokens
gen_ai.usage.output_tokens
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Standardization enables better interoperability across platforms and observability vendors.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Fix
&lt;/h2&gt;

&lt;p&gt;The goal was straightforward:&lt;/p&gt;

&lt;p&gt;Map RAG embedding telemetry data to OpenTelemetry's GenAI semantic conventions.&lt;/p&gt;

&lt;p&gt;The implementation included:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Exporting embedding model metadata&lt;/li&gt;
&lt;li&gt;Exporting provider information&lt;/li&gt;
&lt;li&gt;Mapping token usage metrics&lt;/li&gt;
&lt;li&gt;Aligning span attributes with OpenTelemetry standards&lt;/li&gt;
&lt;li&gt;Preserving compatibility with existing tracing infrastructure&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This allows downstream observability systems to understand embedding operations without requiring custom integrations.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Matters for AI Engineers
&lt;/h2&gt;

&lt;p&gt;As AI applications become more complex, observability becomes a first-class requirement.&lt;/p&gt;

&lt;p&gt;Production AI systems need answers to questions like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which embedding model is causing latency spikes?&lt;/li&gt;
&lt;li&gt;Which provider generates the highest cost?&lt;/li&gt;
&lt;li&gt;How many tokens are consumed during indexing?&lt;/li&gt;
&lt;li&gt;Which retrieval operations are failing?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Without standardized telemetry, these questions become difficult to answer.&lt;/p&gt;

&lt;p&gt;With proper semantic conventions, observability tools can surface these insights automatically.&lt;/p&gt;

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

&lt;p&gt;One thing I enjoy about open source is that small improvements often have larger impacts than expected.&lt;/p&gt;

&lt;p&gt;This wasn't a flashy feature.&lt;/p&gt;

&lt;p&gt;Users won't notice it immediately.&lt;/p&gt;

&lt;p&gt;But maintainers, platform engineers, and teams operating AI workloads will benefit from more accurate telemetry and better visibility into their systems.&lt;/p&gt;

&lt;p&gt;These kinds of contributions taught me an important lesson:&lt;/p&gt;

&lt;p&gt;Not every valuable contribution adds new functionality.&lt;/p&gt;

&lt;p&gt;Sometimes the most impactful improvements make existing systems easier to understand, monitor, and operate.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;AI infrastructure is evolving rapidly.&lt;/p&gt;

&lt;p&gt;Frameworks, observability platforms, and standards are all maturing at the same time.&lt;/p&gt;

&lt;p&gt;Contributing to these ecosystems provides a unique opportunity to learn how modern AI systems work under the hood.&lt;/p&gt;

&lt;p&gt;For me, this contribution was another reminder that reading unfamiliar codebases often leads to discovering interesting problems.&lt;/p&gt;

&lt;p&gt;And occasionally, solving one of those problems helps improve the developer experience for everyone else.&lt;/p&gt;

&lt;p&gt;If you're contributing to AI infrastructure projects, don't overlook observability.&lt;/p&gt;

&lt;p&gt;The best AI systems aren't just intelligent.&lt;/p&gt;

&lt;p&gt;They're observable too.&lt;/p&gt;




&lt;p&gt;GitHub: &lt;a href="https://github.com/Akash504-ai" rel="noopener noreferrer"&gt;https://github.com/Akash504-ai&lt;/a&gt;&lt;br&gt;
Open Source Contributor | Backend Engineering | AI Systems | OSS&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>opentelemetry</category>
      <category>observability</category>
    </item>
    <item>
      <title>How I Finally Finished My Unfinished Chat App with GitHub Copilot</title>
      <dc:creator>Akash Santra</dc:creator>
      <pubDate>Fri, 05 Jun 2026 06:46:26 +0000</pubDate>
      <link>https://dev.to/akash_santra_3c96613546c6/how-i-finally-finished-my-unfinished-chat-app-with-github-copilot-3e13</link>
      <guid>https://dev.to/akash_santra_3c96613546c6/how-i-finally-finished-my-unfinished-chat-app-with-github-copilot-3e13</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the *&lt;/em&gt;&lt;a href="https://dev.to/challenges/github-2026-05-21"&gt;GitHub Finish-Up-A-Thon Challenge&lt;/a&gt;*&lt;em&gt;.&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;PASO is a real-time chat platform inspired by apps like WhatsApp, Discord, and Slack.&lt;/p&gt;

&lt;p&gt;It supports:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Real-time messaging&lt;/li&gt;
&lt;li&gt;Group chats&lt;/li&gt;
&lt;li&gt;Voice and video calling&lt;/li&gt;
&lt;li&gt;AI-powered moderation&lt;/li&gt;
&lt;li&gt;OTP-based password recovery&lt;/li&gt;
&lt;li&gt;Admin dashboard&lt;/li&gt;
&lt;li&gt;Redis-powered Socket.IO scaling&lt;/li&gt;
&lt;li&gt;Machine Learning integration using FastAPI&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I originally started this project as a way to learn full-stack development and distributed systems. Like many side projects, it reached a point where the core features worked, but there were still many unfinished parts, missing documentation, incomplete testing, and several production-level improvements that I wanted to add.&lt;/p&gt;

&lt;p&gt;The GitHub Finish-Up-A-Thon gave me the perfect reason to come back and finally finish it properly.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  Live Demo
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://chat-app-sooty-mu.vercel.app" rel="noopener noreferrer"&gt;https://chat-app-sooty-mu.vercel.app&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  GitHub Repository
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/CodePlaygroundHub/paso-chat-app" rel="noopener noreferrer"&gt;https://github.com/CodePlaygroundHub/paso-chat-app&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Screenshots
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/CodePlaygroundHub/paso-chat-app/blob/main/docs/SCREENSHOTS.md" rel="noopener noreferrer"&gt;https://github.com/CodePlaygroundHub/paso-chat-app/blob/main/docs/SCREENSHOTS.md&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Application Preview
&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%2Fge161zksc5y81b1aru1j.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%2Fge161zksc5y81b1aru1j.png" alt=" " width="800" height="406"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Comeback Story
&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%2Ffdir62djqytmv9kcuvqy.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%2Ffdir62djqytmv9kcuvqy.png" alt=" " width="800" height="320"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One thing I like about this graph is that it tells the story better than I can.&lt;/p&gt;

&lt;p&gt;I started PASO earlier as a learning project and made steady progress for a while. Like many side projects, it eventually slowed down and sat unfinished.&lt;/p&gt;

&lt;p&gt;The GitHub Finish-Up-A-Thon gave me a reason to come back to it.&lt;/p&gt;

&lt;p&gt;The spike in contributions during May reflects the work that went into finally completing the missing pieces: Redis scaling, OTP password recovery, testing improvements, documentation, roadmap planning, and overall project polish.&lt;/p&gt;

&lt;p&gt;What started as "I'll come back to this someday" turned into a project I was finally proud to share publicly.&lt;/p&gt;

&lt;h3&gt;
  
  
  Before
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Basic chat functionality&lt;/li&gt;
&lt;li&gt;Limited documentation&lt;/li&gt;
&lt;li&gt;Minimal test coverage&lt;/li&gt;
&lt;li&gt;Single-instance Socket.IO setup&lt;/li&gt;
&lt;li&gt;Missing password recovery flow&lt;/li&gt;
&lt;li&gt;Several unfinished project docs&lt;/li&gt;
&lt;li&gt;No clear future roadmap&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  What I Added
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Redis Horizontal Scaling
&lt;/h4&gt;

&lt;p&gt;One of the biggest upgrades was adding Redis support for Socket.IO.&lt;/p&gt;

&lt;p&gt;This allowed the application to move beyond a single server setup and support communication across multiple instances using Redis Pub/Sub.&lt;/p&gt;

&lt;p&gt;Working on this taught me a lot about distributed systems and real-time communication.&lt;/p&gt;

&lt;h4&gt;
  
  
  OTP Password Recovery
&lt;/h4&gt;

&lt;p&gt;I implemented a complete OTP-based password recovery system.&lt;/p&gt;

&lt;p&gt;Users can now:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Request password reset codes&lt;/li&gt;
&lt;li&gt;Verify OTPs&lt;/li&gt;
&lt;li&gt;Securely update passwords&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This made the authentication flow much more realistic and production-ready.&lt;/p&gt;

&lt;h4&gt;
  
  
  Testing Improvements
&lt;/h4&gt;

&lt;p&gt;I spent a lot of time improving tests across the project.&lt;/p&gt;

&lt;p&gt;I added and expanded tests for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Authentication&lt;/li&gt;
&lt;li&gt;Messaging&lt;/li&gt;
&lt;li&gt;Groups&lt;/li&gt;
&lt;li&gt;Admin functionality&lt;/li&gt;
&lt;li&gt;Middleware&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This gave me much more confidence when making changes.&lt;/p&gt;

&lt;h4&gt;
  
  
  Documentation Overhaul
&lt;/h4&gt;

&lt;p&gt;A huge part of this challenge was finishing the documentation.&lt;/p&gt;

&lt;p&gt;I added and improved:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Architecture documentation&lt;/li&gt;
&lt;li&gt;Deployment guides&lt;/li&gt;
&lt;li&gt;Scaling documentation&lt;/li&gt;
&lt;li&gt;Testing guides&lt;/li&gt;
&lt;li&gt;Security documentation&lt;/li&gt;
&lt;li&gt;Roadmap planning&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal was to make the project easier for future contributors to understand and use.&lt;/p&gt;

&lt;h4&gt;
  
  
  Roadmap &amp;amp; Future Planning
&lt;/h4&gt;

&lt;p&gt;I also completely updated the roadmap to better reflect where the project is today and where it can go in the future.&lt;/p&gt;

&lt;p&gt;Future plans include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;End-to-End Encryption&lt;/li&gt;
&lt;li&gt;Mobile Applications&lt;/li&gt;
&lt;li&gt;Enterprise Features&lt;/li&gt;
&lt;li&gt;Multi-region Scaling&lt;/li&gt;
&lt;li&gt;Plugin Ecosystem&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;One thing that surprised me was seeing people actually use and interact with the project.&lt;/p&gt;

&lt;p&gt;After sharing PASO publicly and documenting the development journey, the project received:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;5,000+ LinkedIn post views&lt;/li&gt;
&lt;li&gt;8 GitHub stars&lt;/li&gt;
&lt;li&gt;7 GitHub forks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Posts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/feed/update/urn:li:activity:7441348793234735104/" rel="noopener noreferrer"&gt;Building PASO - Part 1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/feed/update/urn:li:activity:7462322432427859968/" rel="noopener noreferrer"&gt;Building PASO - Part 2&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For a student-built open source project, that was incredibly motivating and reminded me why finishing projects matters.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Experience with GitHub Copilot
&lt;/h2&gt;

&lt;p&gt;GitHub Copilot played a huge role throughout this project. I didn't use it to blindly generate code.&lt;/p&gt;

&lt;p&gt;Instead, I used it as a development partner.&lt;/p&gt;

&lt;h3&gt;
  
  
  Where Copilot Helped Most
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Boilerplate Code
&lt;/h4&gt;

&lt;p&gt;Copilot helped generate:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Controllers&lt;/li&gt;
&lt;li&gt;Routes&lt;/li&gt;
&lt;li&gt;Middleware&lt;/li&gt;
&lt;li&gt;Database models&lt;/li&gt;
&lt;li&gt;API handlers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This saved a lot of repetitive work.&lt;/p&gt;

&lt;h4&gt;
  
  
  Testing
&lt;/h4&gt;

&lt;p&gt;One of the biggest benefits was test generation.&lt;/p&gt;

&lt;p&gt;Copilot helped me create test cases much faster, which encouraged me to write more tests than I normally would.&lt;/p&gt;

&lt;h4&gt;
  
  
  Debugging
&lt;/h4&gt;

&lt;p&gt;While implementing Redis scaling and authentication features, Copilot was extremely useful for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Explaining errors&lt;/li&gt;
&lt;li&gt;Suggesting fixes&lt;/li&gt;
&lt;li&gt;Identifying edge cases&lt;/li&gt;
&lt;li&gt;Reviewing implementation ideas&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Documentation
&lt;/h4&gt;

&lt;p&gt;A large portion of the documentation improvements were accelerated with Copilot.&lt;/p&gt;

&lt;p&gt;It helped me structure technical documentation, explain architecture decisions, and improve overall clarity.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I Learned
&lt;/h3&gt;

&lt;p&gt;The biggest lesson from this project is that finishing a project requires a different mindset than starting one.&lt;/p&gt;

&lt;p&gt;Building features is fun.&lt;/p&gt;

&lt;p&gt;Writing tests, improving documentation, fixing edge cases, and polishing the developer experience is where real software engineering happens.&lt;/p&gt;

&lt;p&gt;GitHub Copilot helped me spend less time on repetitive tasks and more time learning system design, architecture, and problem solving.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;PASO started as a learning project.&lt;/p&gt;

&lt;p&gt;This challenge pushed me to turn it into something much closer to a real production-ready application.&lt;/p&gt;

&lt;p&gt;More importantly, it reminded me that unfinished projects still have value.&lt;/p&gt;

&lt;p&gt;Sometimes the hardest part isn't building a project.&lt;/p&gt;

&lt;p&gt;It's coming back and finishing it.&lt;/p&gt;

&lt;p&gt;For me, that's what this challenge was really about.&lt;/p&gt;

&lt;p&gt;Thanks GitHub and DEV for creating a challenge that encouraged builders to finish what they started. ❤️&lt;/p&gt;

&lt;p&gt;If you'd like to check out the project, feedback and contributions are always welcome.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;⭐ Project Repository: &lt;a href="https://github.com/CodePlaygroundHub/paso-chat-app" rel="noopener noreferrer"&gt;https://github.com/CodePlaygroundHub/paso-chat-app&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/Akash504-ai" rel="noopener noreferrer"&gt;https://github.com/Akash504-ai&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;LinkedIn: &lt;a href="https://www.linkedin.com/in/akash-santra-5823b42a6/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/akash-santra-5823b42a6/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;X (Twitter): &lt;a href="https://x.com/akashsantra999" rel="noopener noreferrer"&gt;https://x.com/akashsantra999&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>githubchallenge</category>
      <category>githubcopilot</category>
      <category>opensource</category>
    </item>
    <item>
      <title># Why Hermes Agent Feels Different From Most AI Agent Frameworks</title>
      <dc:creator>Akash Santra</dc:creator>
      <pubDate>Sat, 30 May 2026 02:25:50 +0000</pubDate>
      <link>https://dev.to/akash_santra_3c96613546c6/-why-hermes-agent-feels-different-from-most-ai-agent-frameworks-4cg3</link>
      <guid>https://dev.to/akash_santra_3c96613546c6/-why-hermes-agent-feels-different-from-most-ai-agent-frameworks-4cg3</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the Hermes Agent Challenge&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Over the last year, I've been obsessed with building AI-powered systems. From experimenting with LLM applications to contributing to open source and building real-world products, I've spent countless hours trying to understand what separates a simple chatbot from a genuinely useful AI system.&lt;/p&gt;

&lt;p&gt;While exploring different agent frameworks, I came across Hermes Agent. At first glance, it looked like another entry in the rapidly growing "AI agents" space. But after digging deeper, I realized it was aiming at a much more interesting problem: creating agents that can learn, remember, and become more useful over time.&lt;/p&gt;

&lt;p&gt;That's why Hermes Agent immediately caught my attention.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem With Most AI Agents
&lt;/h2&gt;

&lt;p&gt;A lot of AI projects today stop at the "chat" stage.&lt;/p&gt;

&lt;p&gt;They can answer questions, generate content, or call a few tools, but they often struggle when a task requires persistence, planning, memory, and adaptation over time.&lt;/p&gt;

&lt;p&gt;Real-world work rarely happens in a single prompt.&lt;/p&gt;

&lt;p&gt;Whether you're researching a topic, debugging a codebase, managing a project, or automating repetitive work, the system needs context and continuity.&lt;/p&gt;

&lt;p&gt;This is where agentic systems become interesting.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Makes Hermes Agent Different
&lt;/h2&gt;

&lt;p&gt;What stood out to me about Hermes Agent is its focus on long-term usefulness rather than one-off interactions.&lt;/p&gt;

&lt;p&gt;The idea of an agent that can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Learn from previous interactions&lt;/li&gt;
&lt;li&gt;Store useful knowledge&lt;/li&gt;
&lt;li&gt;Search its own memory&lt;/li&gt;
&lt;li&gt;Improve skills through experience&lt;/li&gt;
&lt;li&gt;Work with different models and providers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;makes it feel much closer to what developers actually want from AI assistants.&lt;/p&gt;

&lt;p&gt;Instead of creating another chatbot, the goal becomes building a system that can evolve alongside its user.&lt;/p&gt;

&lt;p&gt;Of course, no framework is a silver bullet.&lt;/p&gt;

&lt;p&gt;The effectiveness of any AI agent still depends on model quality, tool integrations, prompting strategies, and the problems it's being asked to solve. Hermes Agent doesn't magically solve those challenges, but it does provide a strong foundation for developers who want to build more capable systems.&lt;/p&gt;

&lt;p&gt;What I find particularly interesting is that it treats memory and learning as first-class concepts rather than optional add-ons. As AI systems become more integrated into our daily workflows, those capabilities will likely become increasingly important.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Would Use Hermes Agent
&lt;/h2&gt;

&lt;p&gt;One project idea I've been exploring is a developer productivity agent.&lt;/p&gt;

&lt;p&gt;Imagine an assistant that can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Analyze GitHub issues&lt;/li&gt;
&lt;li&gt;Generate implementation plans&lt;/li&gt;
&lt;li&gt;Search project documentation&lt;/li&gt;
&lt;li&gt;Summarize pull requests&lt;/li&gt;
&lt;li&gt;Maintain context across sessions&lt;/li&gt;
&lt;li&gt;Learn common workflows over time&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Rather than repeating instructions every day, the agent gradually becomes more useful because it remembers how you work.&lt;/p&gt;

&lt;p&gt;For engineers working on large projects, that kind of persistent context can save a surprising amount of time.&lt;/p&gt;

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

&lt;p&gt;One aspect I particularly appreciate is that Hermes Agent is open source.&lt;/p&gt;

&lt;p&gt;The AI ecosystem is increasingly dominated by closed platforms and proprietary systems. While those tools can be powerful, developers often have limited visibility into how they work and limited control over where they run.&lt;/p&gt;

&lt;p&gt;With Hermes Agent, developers can inspect the code, modify behavior, self-host deployments, and experiment freely.&lt;/p&gt;

&lt;p&gt;That flexibility is incredibly valuable for learning and innovation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Personal Note
&lt;/h2&gt;

&lt;p&gt;Alongside this exploration, I've been building a Hermes Agent-powered project that I'm genuinely excited about. It's still under active development, and I expect it will take another 3–5 weeks before it's ready to be shared publicly.&lt;/p&gt;

&lt;p&gt;Rather than rushing out an unfinished version, I'm focusing on polishing the architecture, improving reliability, and making sure the user experience is something I'm proud of. Once it's ready, I'll publish a detailed technical breakdown covering the design decisions, implementation challenges, and lessons learned while building with Hermes Agent.&lt;/p&gt;

&lt;p&gt;If you'd like to follow my work or future updates, you can find me on GitHub:&lt;/p&gt;

&lt;p&gt;GitHub: &lt;a href="https://github.com/Akash504-ai" rel="noopener noreferrer"&gt;https://github.com/Akash504-ai&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;The most exciting part of modern AI isn't generating text.&lt;/p&gt;

&lt;p&gt;It's creating systems that can remember, reason, plan, adapt, and collaborate with humans over time.&lt;/p&gt;

&lt;p&gt;Hermes Agent represents an interesting step toward that future. Whether you're building developer tools, research assistants, productivity systems, or entirely new categories of software, the ability to combine memory, learning, and tool use opens up possibilities that extend far beyond traditional chat interfaces.&lt;/p&gt;

&lt;p&gt;I'm excited to continue experimenting with Hermes Agent, finish the project I'm currently building, and share the results with the community in the coming weeks.&lt;/p&gt;

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

&lt;p&gt;If you're building with Hermes Agent too, I'd love to hear what you're working on.&lt;/p&gt;

</description>
      <category>hermesagentchallenge</category>
      <category>devchallenge</category>
      <category>agents</category>
    </item>
    <item>
      <title>My CI/CD Architecture</title>
      <dc:creator>Akash Santra</dc:creator>
      <pubDate>Sun, 24 May 2026 01:41:46 +0000</pubDate>
      <link>https://dev.to/akash_santra_3c96613546c6/my-cicd-architecture-4m1d</link>
      <guid>https://dev.to/akash_santra_3c96613546c6/my-cicd-architecture-4m1d</guid>
      <description>&lt;h2&gt;
  
  
  Why I Decided to Add CI/CD
&lt;/h2&gt;

&lt;p&gt;As my AI-powered realtime communication platform started growing, manual deployments and inconsistent validation became difficult to manage. I wanted a more production-oriented workflow with automated checks, deployment pipelines, and scalable infrastructure practices.&lt;/p&gt;

&lt;h2&gt;
  
  
  Challenges Before Automation
&lt;/h2&gt;

&lt;p&gt;Before introducing CI/CD:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Manual deployment workflows were error-prone&lt;/li&gt;
&lt;li&gt;Frontend/backend validation was inconsistent&lt;/li&gt;
&lt;li&gt;Merge stability became harder to maintain&lt;/li&gt;
&lt;li&gt;Infrastructure scaling introduced additional complexity&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  CI/CD Workflow Architecture
&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%2Fehjolcur2ag0dgd8tcgv.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%2Fehjolcur2ag0dgd8tcgv.png" alt="CI/CD workflow architecture showing pull request validation, automated testing, Docker image publishing, staging deployment, and production deployment pipeline" width="800" height="238"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The workflow is divided into two major phases:&lt;/p&gt;

&lt;h3&gt;
  
  
  CI Phase
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Pull request validation&lt;/li&gt;
&lt;li&gt;Linting and formatting&lt;/li&gt;
&lt;li&gt;Build checks&lt;/li&gt;
&lt;li&gt;Security and dependency scanning&lt;/li&gt;
&lt;li&gt;Automated validation&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  CD Phase
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Artifact generation&lt;/li&gt;
&lt;li&gt;Docker image publishing&lt;/li&gt;
&lt;li&gt;Staging deployment&lt;/li&gt;
&lt;li&gt;Production deployment workflow&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Building this pipeline helped me better understand:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Deployment automation&lt;/li&gt;
&lt;li&gt;Fail-fast engineering workflows&lt;/li&gt;
&lt;li&gt;Continuous integration principles&lt;/li&gt;
&lt;li&gt;Infrastructure reliability&lt;/li&gt;
&lt;li&gt;DevOps-oriented system design&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;I’m currently working on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Redis-based scaling improvements&lt;/li&gt;
&lt;li&gt;Docker Compose setup&lt;/li&gt;
&lt;li&gt;Integration testing&lt;/li&gt;
&lt;li&gt;Load balancing experiments&lt;/li&gt;
&lt;li&gt;Architecture refinements&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>architecture</category>
      <category>automation</category>
      <category>cicd</category>
      <category>devops</category>
    </item>
    <item>
      <title>I Built an AI-Powered Real-Time Chat App with React, Node.js and Machine Learning</title>
      <dc:creator>Akash Santra</dc:creator>
      <pubDate>Fri, 27 Mar 2026 04:22:52 +0000</pubDate>
      <link>https://dev.to/akash_santra_3c96613546c6/i-built-an-ai-powered-real-time-chat-app-with-react-nodejs-and-machine-learning-52el</link>
      <guid>https://dev.to/akash_santra_3c96613546c6/i-built-an-ai-powered-real-time-chat-app-with-react-nodejs-and-machine-learning-52el</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4v8j1kdgjwxxiclljt0n.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%2F4v8j1kdgjwxxiclljt0n.png" alt=" " width="799" height="264"&gt;&lt;/a&gt;I built a full-stack real-time chat application inspired by modern messaging platforms, but enhanced with AI automation and Machine Learning moderation.&lt;/p&gt;

&lt;p&gt;GitHub Repo: &lt;a href="https://github.com/Akash504-ai/Chat-app" rel="noopener noreferrer"&gt;https://github.com/Akash504-ai/Chat-app&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Live Demo: &lt;a href="https://chat-app-sooty-mu.vercel.app" rel="noopener noreferrer"&gt;https://chat-app-sooty-mu.vercel.app&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What makes this project different?&lt;/p&gt;

&lt;p&gt;This is not just a basic chat app. It is designed like a production-ready communication platform with real-world features.&lt;/p&gt;

&lt;p&gt;Core Features&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Real-time one-to-one and group chat using Socket.io&lt;/li&gt;
&lt;li&gt;Message reactions, replies, pin and delete&lt;/li&gt;
&lt;li&gt;Seen status with tick indicators&lt;/li&gt;
&lt;li&gt;Global message search&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AI and Machine Learning Features&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI chatbot integration using Groq API&lt;/li&gt;
&lt;li&gt;Toxic message detection using ML models&lt;/li&gt;
&lt;li&gt;Spam detection system&lt;/li&gt;
&lt;li&gt;Admin moderation pipeline&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Communication Features&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Voice and video calling using ZegoCloud&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Security and Authentication&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Secure login and signup&lt;/li&gt;
&lt;li&gt;Three-level security questions&lt;/li&gt;
&lt;li&gt;Password recovery with identity verification&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;UI and Customization&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Built with Tailwind CSS and DaisyUI&lt;/li&gt;
&lt;li&gt;Dynamic themes&lt;/li&gt;
&lt;li&gt;Custom chat wallpapers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Admin Panel&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;User management system&lt;/li&gt;
&lt;li&gt;Report handling and moderation&lt;/li&gt;
&lt;li&gt;Analytics dashboard&lt;/li&gt;
&lt;li&gt;CSV export support&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tech Stack&lt;/p&gt;

&lt;p&gt;Frontend&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React.js&lt;/li&gt;
&lt;li&gt;Tailwind CSS&lt;/li&gt;
&lt;li&gt;DaisyUI&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Backend&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Node.js&lt;/li&gt;
&lt;li&gt;Express.js&lt;/li&gt;
&lt;li&gt;Socket.io&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Machine Learning Service&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;FastAPI&lt;/li&gt;
&lt;li&gt;Scikit-learn models&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Database&lt;/p&gt;

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

&lt;p&gt;Architecture&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Frontend handles UI and client logic&lt;/li&gt;
&lt;li&gt;Backend manages APIs and real-time communication&lt;/li&gt;
&lt;li&gt;ML service handles moderation and predictions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This separation makes the system scalable and closer to real-world applications.&lt;/p&gt;

&lt;p&gt;What I Learned&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Building real-time systems with Socket.io&lt;/li&gt;
&lt;li&gt;Integrating Machine Learning into production apps&lt;/li&gt;
&lt;li&gt;Designing scalable architecture&lt;/li&gt;
&lt;li&gt;Handling complex chat state and features&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Future Improvements&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Improving ML models&lt;/li&gt;
&lt;li&gt;Adding push notifications&lt;/li&gt;
&lt;li&gt;Better mobile responsiveness&lt;/li&gt;
&lt;li&gt;UI and UX improvements&lt;/li&gt;
&lt;li&gt;Use webRTC instead of ZegoCloud&lt;/li&gt;
&lt;li&gt;Any feature which can improve this&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Contributing&lt;/p&gt;

&lt;p&gt;Contributions are welcome&lt;br&gt;
Feel free to fork the repository and submit a pull request.&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%2F3xuzi95nomqzgfewjle3.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%2F3xuzi95nomqzgfewjle3.png" alt=" " width="799" height="264"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>machinelearning</category>
      <category>node</category>
      <category>ai</category>
    </item>
  </channel>
</rss>
