<?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: Dibyendu Chatterjee</title>
    <description>The latest articles on DEV Community by Dibyendu Chatterjee (@dibyendu_chatterjee_409d4).</description>
    <link>https://dev.to/dibyendu_chatterjee_409d4</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%2F3764190%2Fbe1f7d38-1fac-4a36-854e-2bc7efc52251.jpeg</url>
      <title>DEV Community: Dibyendu Chatterjee</title>
      <link>https://dev.to/dibyendu_chatterjee_409d4</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/dibyendu_chatterjee_409d4"/>
    <language>en</language>
    <item>
      <title>You See the Swags. You Don’t See the Rejections.</title>
      <dc:creator>Dibyendu Chatterjee</dc:creator>
      <pubDate>Tue, 01 Sep 2026 12:34:28 +0000</pubDate>
      <link>https://dev.to/dibyendu_chatterjee_409d4/you-see-the-swags-you-dont-see-the-rejections-5bgl</link>
      <guid>https://dev.to/dibyendu_chatterjee_409d4/you-see-the-swags-you-dont-see-the-rejections-5bgl</guid>
      <description>&lt;p&gt;If you look at my LinkedIn profile, you might think I have figured things out.&lt;/p&gt;

&lt;p&gt;You’ll see opportunities.&lt;/p&gt;

&lt;p&gt;Programs.&lt;/p&gt;

&lt;p&gt;Hackathons.&lt;/p&gt;

&lt;p&gt;Certificates.&lt;/p&gt;

&lt;p&gt;Rewards.&lt;/p&gt;

&lt;p&gt;Swags.&lt;/p&gt;

&lt;p&gt;Achievements.&lt;/p&gt;

&lt;p&gt;You’ll see posts where I’m excited because I got selected for something. You’ll see pictures of packages that arrived at my door. You’ll see another opportunity, another badge, another small win.&lt;/p&gt;

&lt;p&gt;And honestly, I’m grateful for every single one of them.&lt;/p&gt;

&lt;p&gt;But there’s a part of the story that rarely gets posted.&lt;/p&gt;

&lt;p&gt;The part where I applied and didn’t get selected.&lt;/p&gt;

&lt;p&gt;Again.&lt;/p&gt;

&lt;p&gt;And again.&lt;/p&gt;

&lt;p&gt;And again.&lt;/p&gt;

&lt;p&gt;There was a time when my inbox felt like a collection of rejection emails.&lt;/p&gt;

&lt;p&gt;“Unfortunately…”&lt;/p&gt;

&lt;p&gt;“We regret to inform you…”&lt;/p&gt;

&lt;p&gt;“Your application was not selected…”&lt;/p&gt;

&lt;p&gt;“Due to the high number of applications…”&lt;/p&gt;

&lt;p&gt;You get used to reading those words.&lt;/p&gt;

&lt;p&gt;Or at least, you think you do.&lt;/p&gt;

&lt;p&gt;The truth is, rejection still hurts.&lt;/p&gt;

&lt;p&gt;Especially when you’ve spent hours filling out an application.&lt;/p&gt;

&lt;p&gt;Writing answers.&lt;/p&gt;

&lt;p&gt;Building something.&lt;/p&gt;

&lt;p&gt;Recording a video.&lt;/p&gt;

&lt;p&gt;Making a resume.&lt;/p&gt;

&lt;p&gt;Trying to explain why you deserve a chance.&lt;/p&gt;

&lt;p&gt;And then you wait.&lt;/p&gt;

&lt;p&gt;Sometimes for days.&lt;/p&gt;

&lt;p&gt;Sometimes for weeks.&lt;/p&gt;

&lt;p&gt;Only to receive a polite email telling you that you weren’t selected.&lt;/p&gt;

&lt;p&gt;Nobody sees that part.&lt;/p&gt;

&lt;p&gt;Nobody sees the applications that went nowhere.&lt;/p&gt;

&lt;p&gt;Nobody sees the nights spent working on something that never got noticed.&lt;/p&gt;

&lt;p&gt;Nobody sees the projects that didn't win.&lt;/p&gt;

&lt;p&gt;Nobody sees the hackathons where I walked away without a prize.&lt;/p&gt;

&lt;p&gt;Nobody sees the opportunities I really wanted but didn't get.&lt;/p&gt;

&lt;p&gt;People usually see the result.&lt;/p&gt;

&lt;p&gt;They rarely see the attempts.&lt;/p&gt;

&lt;p&gt;And I think that's one of the biggest illusions social media creates.&lt;/p&gt;

&lt;p&gt;We compare our &lt;strong&gt;behind the scenes&lt;/strong&gt; with someone else's &lt;strong&gt;highlight reel&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;We see someone getting selected and think, “They are so lucky.”&lt;/p&gt;

&lt;p&gt;We see someone winning a hackathon and think, “They are naturally talented.”&lt;/p&gt;

&lt;p&gt;We see someone receiving a package full of goodies and think, “Everything is working out for them.”&lt;/p&gt;

&lt;p&gt;But we don't see the hundreds of applications behind that one selection.&lt;/p&gt;

&lt;p&gt;We don't see the dozens of failures behind that one success.&lt;/p&gt;

&lt;p&gt;I have applied to opportunities knowing there was a very high chance I wouldn't get selected.&lt;/p&gt;

&lt;p&gt;I still applied.&lt;/p&gt;

&lt;p&gt;Because what if?&lt;/p&gt;

&lt;p&gt;What if this is the one?&lt;/p&gt;

&lt;p&gt;What if this application changes something?&lt;/p&gt;

&lt;p&gt;What if I learn something while applying?&lt;/p&gt;

&lt;p&gt;What if I meet someone?&lt;/p&gt;

&lt;p&gt;What if I get selected?&lt;/p&gt;

&lt;p&gt;Sometimes the answer is no.&lt;/p&gt;

&lt;p&gt;But occasionally, the answer is yes.&lt;/p&gt;

&lt;p&gt;And those few yeses make the previous no's feel a little different.&lt;/p&gt;

&lt;p&gt;The swags that arrive at my home aren't just swags to me.&lt;/p&gt;

&lt;p&gt;They are reminders.&lt;/p&gt;

&lt;p&gt;Reminders of an application I almost didn't submit.&lt;/p&gt;

&lt;p&gt;A project I almost gave up on.&lt;/p&gt;

&lt;p&gt;A late night.&lt;/p&gt;

&lt;p&gt;A failed attempt.&lt;/p&gt;

&lt;p&gt;A rejection that came before the acceptance.&lt;/p&gt;

&lt;p&gt;So when you see me posting about another opportunity or another reward, please don't assume that everything has been easy.&lt;/p&gt;

&lt;p&gt;It hasn't.&lt;/p&gt;

&lt;p&gt;I have had my fair share of self-doubt.&lt;/p&gt;

&lt;p&gt;I've questioned whether I'm good enough.&lt;/p&gt;

&lt;p&gt;I've wondered why someone else got selected while I didn't.&lt;/p&gt;

&lt;p&gt;I've looked at other students moving faster than me and wondered if I'm falling behind.&lt;/p&gt;

&lt;p&gt;But I'm still applying.&lt;/p&gt;

&lt;p&gt;Still building.&lt;/p&gt;

&lt;p&gt;Still learning.&lt;/p&gt;

&lt;p&gt;Still trying.&lt;/p&gt;

&lt;p&gt;And maybe that's the real achievement.&lt;/p&gt;

&lt;p&gt;Not the certificate.&lt;/p&gt;

&lt;p&gt;Not the swag.&lt;/p&gt;

&lt;p&gt;Not the badge.&lt;/p&gt;

&lt;p&gt;Not even the selection.&lt;/p&gt;

&lt;p&gt;It's being able to open an inbox full of rejection emails and still send the next application.&lt;/p&gt;

&lt;p&gt;Because behind every visible achievement, there is usually an invisible pile of attempts.&lt;/p&gt;

&lt;p&gt;And mine is pretty big.&lt;/p&gt;

&lt;p&gt;So yes, you can celebrate the wins with me.&lt;/p&gt;

&lt;p&gt;But remember that they didn't happen overnight.&lt;/p&gt;

&lt;p&gt;You are just seeing the part of the journey that finally worked.&lt;/p&gt;

&lt;p&gt;You didn't see all the times it didn't.&lt;/p&gt;

&lt;p&gt;And honestly?&lt;/p&gt;

&lt;p&gt;I'm learning to be proud of those attempts too.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F08uw1vvr40nw9ee55v1d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F08uw1vvr40nw9ee55v1d.png" alt=" " width="800" height="1200"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>I Built a Voice-First Learning Companion in 10 Days</title>
      <dc:creator>Dibyendu Chatterjee</dc:creator>
      <pubDate>Sat, 15 Aug 2026 09:53:52 +0000</pubDate>
      <link>https://dev.to/dibyendu_chatterjee_409d4/i-built-a-voice-first-learning-companion-in-10-days-1hoe</link>
      <guid>https://dev.to/dibyendu_chatterjee_409d4/i-built-a-voice-first-learning-companion-in-10-days-1hoe</guid>
      <description>&lt;p&gt;Building an AI voice agent sounded simple at first.&lt;/p&gt;

&lt;p&gt;Give it a voice. Connect it to an LLM. Let users talk to it.&lt;/p&gt;

&lt;p&gt;But as I progressed through the 10 Days of Voice Agents – Voice for Bharat Edition, I realized that a useful voice agent needs much more than the ability to listen and speak.&lt;/p&gt;

&lt;p&gt;It needs to understand the user.&lt;/p&gt;

&lt;p&gt;It needs to remember context.&lt;/p&gt;

&lt;p&gt;It needs to know when to use external tools.&lt;/p&gt;

&lt;p&gt;It should know when to continue helping and when a human should take over.&lt;/p&gt;

&lt;p&gt;And most importantly, it should be able to measure whether it is actually helping the user achieve something.&lt;/p&gt;

&lt;p&gt;Over the last 10 days, I built a voice-first Learning &amp;amp; Literacy agent focused on helping learners practice spoken English in a more natural and supportive way.&lt;/p&gt;

&lt;p&gt;This is the story of what I built, the problems I faced, and what I learned while building it.&lt;/p&gt;

&lt;p&gt;Why I Chose the Learning &amp;amp; Literacy Track&lt;/p&gt;

&lt;p&gt;Many learners understand English but hesitate when it comes to speaking.&lt;/p&gt;

&lt;p&gt;Sometimes the problem is not a lack of knowledge.&lt;/p&gt;

&lt;p&gt;It is the fear of making mistakes.&lt;/p&gt;

&lt;p&gt;People may worry about pronunciation, grammar, or simply saying something wrong in front of others.&lt;/p&gt;

&lt;p&gt;I wanted to build something that gives learners a space to practice without feeling judged.&lt;/p&gt;

&lt;p&gt;That became the main idea behind my project.&lt;/p&gt;

&lt;p&gt;A voice-based learning companion that can:&lt;/p&gt;

&lt;p&gt;Talk with learners naturally&lt;br&gt;
Help them practice spoken English&lt;br&gt;
Give exercises&lt;br&gt;
Evaluate responses&lt;br&gt;
Provide supportive feedback&lt;br&gt;
Remember previous interactions&lt;br&gt;
Support Hindi-English code-mixed conversations&lt;br&gt;
Reach out for practice sessions&lt;br&gt;
Know when a human teacher should step in&lt;br&gt;
Track whether learning sessions are successful&lt;br&gt;
Hand off specialised requests to another agent when needed&lt;/p&gt;

&lt;p&gt;Instead of building just another chatbot with a voice attached to it, I wanted to explore what happens when a voice agent starts behaving more like a complete learning system.&lt;/p&gt;

&lt;p&gt;Why Voice?&lt;/p&gt;

&lt;p&gt;For spoken-English practice, typing is not enough.&lt;/p&gt;

&lt;p&gt;A learner needs to actually speak.&lt;/p&gt;

&lt;p&gt;Voice makes the interaction more natural.&lt;/p&gt;

&lt;p&gt;The learner can respond as they would in a normal conversation instead of typing carefully constructed sentences.&lt;/p&gt;

&lt;p&gt;It also makes the experience more accessible.&lt;/p&gt;

&lt;p&gt;A learner can simply speak:&lt;/p&gt;

&lt;p&gt;"Mujhe English practice karni hai."&lt;/p&gt;

&lt;p&gt;And continue the conversation naturally.&lt;/p&gt;

&lt;p&gt;This was especially important for my project because I wanted to support Hindi-English code-mixed conversations.&lt;/p&gt;

&lt;p&gt;In India, many people naturally switch between languages while speaking.&lt;/p&gt;

&lt;p&gt;Forcing users to speak in only one language can make an interaction feel unnatural.&lt;/p&gt;

&lt;p&gt;So one of my goals was to make the agent respond in a similar register when appropriate.&lt;br&gt;
The Core Idea&lt;/p&gt;

&lt;p&gt;The final project can be viewed as a learning journey.&lt;/p&gt;

&lt;p&gt;Learner speaks&lt;br&gt;
      ↓&lt;br&gt;
Voice agent understands the request&lt;br&gt;
      ↓&lt;br&gt;
Learner context and memory are considered&lt;br&gt;
      ↓&lt;br&gt;
Personalized learning interaction&lt;br&gt;
      ↓&lt;br&gt;
Exercise is provided&lt;br&gt;
      ↓&lt;br&gt;
Learner responds&lt;br&gt;
      ↓&lt;br&gt;
Answer is evaluated&lt;br&gt;
      ↓&lt;br&gt;
Supportive feedback&lt;br&gt;
      ↓&lt;br&gt;
Learning outcome is recorded&lt;br&gt;
      ↓&lt;br&gt;
If needed → Human help&lt;br&gt;
      ↓&lt;br&gt;
If specialist knowledge is needed → Agent handoff&lt;/p&gt;

&lt;p&gt;The goal was not to make every feature independent.&lt;/p&gt;

&lt;p&gt;I wanted the different parts of the project to work together.&lt;br&gt;
Building the Voice Agent&lt;/p&gt;

&lt;p&gt;The first step was creating the basic voice interaction.&lt;/p&gt;

&lt;p&gt;A typical voice agent involves several components working together:&lt;/p&gt;

&lt;p&gt;User speaks&lt;br&gt;
    ↓&lt;br&gt;
Speech-to-Text&lt;br&gt;
    ↓&lt;br&gt;
LLM / Agent Logic&lt;br&gt;
    ↓&lt;br&gt;
Memory + Tools + Agent Decisions&lt;br&gt;
    ↓&lt;br&gt;
Text Response&lt;br&gt;
    ↓&lt;br&gt;
Text-to-Speech&lt;br&gt;
    ↓&lt;br&gt;
User hears the response&lt;/p&gt;

&lt;p&gt;For the voice output, I used Murf Falcon, the fast text-to-speech API.&lt;/p&gt;

&lt;p&gt;The voice layer was important because the project was built around real conversations rather than text-based interactions.&lt;/p&gt;

&lt;p&gt;But getting an agent to speak is only the beginning.&lt;/p&gt;

&lt;p&gt;The next challenge was deciding how it should behave.&lt;/p&gt;

&lt;p&gt;Giving the Agent a Clear Personality and Guardrails&lt;/p&gt;

&lt;p&gt;For a Learning &amp;amp; Literacy agent, how the agent responds is just as important as what it responds with.&lt;/p&gt;

&lt;p&gt;A learner can make mistakes repeatedly.&lt;/p&gt;

&lt;p&gt;That is part of learning.&lt;/p&gt;

&lt;p&gt;So one of the important guardrails I implemented was:&lt;/p&gt;

&lt;p&gt;The agent should never shame a learner for giving a wrong answer.&lt;/p&gt;

&lt;p&gt;Instead of saying:&lt;/p&gt;

&lt;p&gt;"That's wrong."&lt;/p&gt;

&lt;p&gt;The agent should respond in a supportive way.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;"Good attempt. Let's look at this together."&lt;/p&gt;

&lt;p&gt;The goal was to make the interaction feel encouraging.&lt;/p&gt;

&lt;p&gt;Another important rule was that the agent should not make inappropriate assumptions about learners.&lt;/p&gt;

&lt;p&gt;It should focus on helping them practice and improve without making claims beyond its role.&lt;/p&gt;

&lt;p&gt;These instructions became the foundation for the rest of the project.&lt;/p&gt;

&lt;p&gt;Adding Memory and Personalization&lt;/p&gt;

&lt;p&gt;One of the biggest improvements came when I added persistent memory.&lt;/p&gt;

&lt;p&gt;A normal conversation can feel disconnected when the agent forgets everything after the session ends.&lt;/p&gt;

&lt;p&gt;If a learner practiced yesterday and comes back today, the experience should not always start from zero.&lt;/p&gt;

&lt;p&gt;I integrated a database to store useful learner context.&lt;/p&gt;

&lt;p&gt;This allowed the agent to remember information such as:&lt;/p&gt;

&lt;p&gt;Learner identity&lt;br&gt;
Preferences&lt;br&gt;
Relevant learning context&lt;br&gt;
Previous interactions&lt;/p&gt;

&lt;p&gt;The frontend was also adapted to reflect learner information and session state.&lt;/p&gt;

&lt;p&gt;This changed the experience from:&lt;/p&gt;

&lt;p&gt;"Hello, how can I help you?"&lt;/p&gt;

&lt;p&gt;every single time,&lt;/p&gt;

&lt;p&gt;to something more contextual and personalized.&lt;/p&gt;

&lt;p&gt;Memory made the agent feel less like a one-time interaction and more like a continuing learning companion.&lt;/p&gt;

&lt;p&gt;Teaching the Agent to Use Tools&lt;/p&gt;

&lt;p&gt;An AI agent cannot rely only on what the language model already knows.&lt;/p&gt;

&lt;p&gt;Sometimes it needs to fetch information or perform a specific action.&lt;/p&gt;

&lt;p&gt;For my Learning &amp;amp; Literacy track, I added tools that support the learning flow.&lt;/p&gt;

&lt;p&gt;The agent can:&lt;/p&gt;

&lt;p&gt;Fetch or select the next exercise&lt;br&gt;
Evaluate a learner's answer&lt;br&gt;
Use the result to provide feedback&lt;/p&gt;

&lt;p&gt;One lesson I learned here was that creating the function itself is not enough.&lt;/p&gt;

&lt;p&gt;The model needs to understand when it should use that function.&lt;/p&gt;

&lt;p&gt;A tool can work perfectly in the backend and still fail to be useful if the description is unclear.&lt;/p&gt;

&lt;p&gt;The tool description became an important part of the system.&lt;/p&gt;

&lt;p&gt;The agent needed to know:&lt;/p&gt;

&lt;p&gt;When to fetch an exercise&lt;br&gt;
When to evaluate an answer&lt;br&gt;
When not to call a tool unnecessarily&lt;/p&gt;

&lt;p&gt;This was one of the first moments where I understood that building AI agents is not only about writing functions.&lt;/p&gt;

&lt;p&gt;It is also about designing the decisions around those functions.&lt;/p&gt;

&lt;p&gt;Adding Outbound Practice Calls&lt;/p&gt;

&lt;p&gt;Most voice agents wait for the user to start the interaction.&lt;/p&gt;

&lt;p&gt;For Day 6, I explored the opposite approach.&lt;/p&gt;

&lt;p&gt;What if the agent could proactively reach out to the learner for practice?&lt;/p&gt;

&lt;p&gt;For a learning agent, the use case was simple:&lt;/p&gt;

&lt;p&gt;A learner chooses a practice time, and the agent can initiate a practice session.&lt;/p&gt;

&lt;p&gt;This introduced a new challenge.&lt;/p&gt;

&lt;p&gt;Outbound conversations need to begin differently from inbound conversations.&lt;/p&gt;

&lt;p&gt;The user did not initiate the interaction.&lt;/p&gt;

&lt;p&gt;So the agent needs to clearly communicate:&lt;/p&gt;

&lt;p&gt;Who is calling&lt;br&gt;
Why it is calling&lt;br&gt;
How the user can stop future calls&lt;/p&gt;

&lt;p&gt;While building this feature, I also faced practical challenges with telephony services, trial limitations, and account requirements.&lt;/p&gt;

&lt;p&gt;I initially explored different options before moving toward a SIP-based setup using Linphone for testing.&lt;/p&gt;

&lt;p&gt;This was one of the more challenging parts of the project because the idea was simple, but getting the communication setup working reliably required experimenting with different approaches.&lt;/p&gt;

&lt;p&gt;It reminded me that real-world AI products are not only about AI.&lt;/p&gt;

&lt;p&gt;Integration and infrastructure can sometimes take more time than the model logic itself.&lt;/p&gt;

&lt;p&gt;Teaching the Agent When to Ask for Human Help&lt;/p&gt;

&lt;p&gt;This was one of my favourite parts of the project.&lt;/p&gt;

&lt;p&gt;An AI agent should not try to solve every situation by itself.&lt;/p&gt;

&lt;p&gt;For my Learning &amp;amp; Literacy agent, I defined two situations where human support may be needed:&lt;/p&gt;

&lt;p&gt;The learner is genuinely frustrated or upset.&lt;br&gt;
The learner explicitly asks to speak with a teacher or human.&lt;/p&gt;

&lt;p&gt;However, I also needed to make sure that the agent did not escalate unnecessarily.&lt;/p&gt;

&lt;p&gt;A wrong answer is not a reason to involve a human.&lt;/p&gt;

&lt;p&gt;Making mistakes is part of learning.&lt;/p&gt;

&lt;p&gt;So the system needed to distinguish between:&lt;/p&gt;

&lt;p&gt;"I got this answer wrong."&lt;/p&gt;

&lt;p&gt;and&lt;/p&gt;

&lt;p&gt;"I'm really frustrated. I don't understand this anymore. Can I talk to a teacher?"&lt;/p&gt;

&lt;p&gt;When human help is needed, the agent does not immediately share information.&lt;/p&gt;

&lt;p&gt;It first asks for permission.&lt;/p&gt;

&lt;p&gt;The flow looks like this:&lt;/p&gt;

&lt;p&gt;Learner needs help&lt;br&gt;
        ↓&lt;br&gt;
Agent detects the situation&lt;br&gt;
        ↓&lt;br&gt;
Agent explains what information can be shared&lt;br&gt;
        ↓&lt;br&gt;
Learner gives permission&lt;br&gt;
        ↓&lt;br&gt;
Human-help request is created&lt;br&gt;
        ↓&lt;br&gt;
Reference ID is generated&lt;br&gt;
        ↓&lt;br&gt;
Teacher or human can review the request&lt;/p&gt;

&lt;p&gt;The request contains only useful information, such as:&lt;/p&gt;

&lt;p&gt;Who needs help&lt;br&gt;
What the learner is struggling with&lt;br&gt;
What the agent has already tried&lt;br&gt;
Urgency&lt;br&gt;
Preferred language or follow-up method&lt;/p&gt;

&lt;p&gt;The agent does not need to send the entire conversation.&lt;/p&gt;

&lt;p&gt;This feature made the project feel more realistic.&lt;/p&gt;

&lt;p&gt;Sometimes the best thing an AI system can do is recognize that another person is better suited to help.&lt;/p&gt;

&lt;p&gt;Measuring Whether Learning Actually Happened&lt;/p&gt;

&lt;p&gt;Building an agent is one thing.&lt;/p&gt;

&lt;p&gt;Knowing whether it is useful is another.&lt;/p&gt;

&lt;p&gt;For the Call Analytics Dashboard, I had to answer a simple question:&lt;/p&gt;

&lt;p&gt;What does a successful call mean for my agent?&lt;/p&gt;

&lt;p&gt;I decided that a successful learning session means:&lt;/p&gt;

&lt;p&gt;The learner completes at least one exercise and receives feedback.&lt;/p&gt;

&lt;p&gt;A failed session does not necessarily mean the system crashed.&lt;/p&gt;

&lt;p&gt;It simply means the learning objective was not completed.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;The learner ends the session early.&lt;br&gt;
The learner does not complete an exercise.&lt;br&gt;
The conversation stops before feedback is given.&lt;/p&gt;

&lt;p&gt;Every session is recorded with an outcome.&lt;/p&gt;

&lt;p&gt;The dashboard tracks:&lt;/p&gt;

&lt;p&gt;Total Calls&lt;br&gt;
Successful Calls&lt;br&gt;
Failed Calls&lt;/p&gt;

&lt;p&gt;The important part was that these numbers come from actual agent sessions.&lt;/p&gt;

&lt;p&gt;They are not hardcoded values.&lt;/p&gt;

&lt;p&gt;This changed the way I thought about AI agents.&lt;/p&gt;

&lt;p&gt;It is easy to measure activity.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;How many conversations happened?&lt;/p&gt;

&lt;p&gt;But activity does not automatically mean success.&lt;/p&gt;

&lt;p&gt;For a learning agent, a better question is:&lt;/p&gt;

&lt;p&gt;Did the learner actually complete something useful?&lt;/p&gt;

&lt;p&gt;That became the purpose of the analytics system.&lt;/p&gt;

&lt;p&gt;Moving from One Agent to Multiple Agents&lt;/p&gt;

&lt;p&gt;By Day 9, the main agent could already handle several tasks.&lt;/p&gt;

&lt;p&gt;But one agent should not try to become an expert at everything.&lt;/p&gt;

&lt;p&gt;For the Learning &amp;amp; Literacy track, I created a separate:&lt;/p&gt;

&lt;p&gt;Maths Practice Specialist&lt;/p&gt;

&lt;p&gt;The main Learning &amp;amp; Literacy agent continues to handle things such as:&lt;/p&gt;

&lt;p&gt;Spoken English practice&lt;br&gt;
English exercises&lt;br&gt;
Grammar support&lt;br&gt;
General learning conversations&lt;/p&gt;

&lt;p&gt;But when the learner asks for maths help, the conversation is handed off to the Maths Practice Specialist.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;Learner:&lt;/p&gt;

&lt;p&gt;"I don't understand percentages."&lt;/p&gt;

&lt;p&gt;The main agent responds:&lt;/p&gt;

&lt;p&gt;"I'll connect you to our Maths Practice Specialist."&lt;/p&gt;

&lt;p&gt;The specialist then continues the conversation.&lt;/p&gt;

&lt;p&gt;The important part is that the learner does not have to repeat the entire problem.&lt;/p&gt;

&lt;p&gt;Relevant context is passed during the handoff.&lt;/p&gt;

&lt;p&gt;The flow looks like this:&lt;/p&gt;

&lt;p&gt;Learner asks for help&lt;br&gt;
        ↓&lt;br&gt;
Main Learning Agent&lt;br&gt;
        ↓&lt;br&gt;
Does this require Maths expertise?&lt;br&gt;
        ↓&lt;br&gt;
      YES&lt;br&gt;
        ↓&lt;br&gt;
Agent announces handoff&lt;br&gt;
        ↓&lt;br&gt;
Maths Practice Specialist&lt;br&gt;
        ↓&lt;br&gt;
Continues with existing context&lt;/p&gt;

&lt;p&gt;The specialist can:&lt;/p&gt;

&lt;p&gt;Explain concepts step by step&lt;br&gt;
Give practice questions&lt;br&gt;
Provide hints&lt;br&gt;
Evaluate answers&lt;br&gt;
Give supportive feedback&lt;/p&gt;

&lt;p&gt;The same language style can also continue after the handoff.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;"Mujhe fractions samajh nahi aa raha."&lt;/p&gt;

&lt;p&gt;The specialist can continue naturally in a Hindi-English code-mixed style.&lt;/p&gt;

&lt;p&gt;This was my first deeper experience with a multi-agent workflow.&lt;/p&gt;

&lt;p&gt;The biggest lesson was simple:&lt;/p&gt;

&lt;p&gt;Instead of making one agent responsible for everything, it can be better to give different agents clear and focused responsibilities.&lt;/p&gt;

&lt;p&gt;The Overall Architecture&lt;/p&gt;

&lt;p&gt;The final system can be represented like this:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                    ┌───────────────────┐
                    │      Learner      │
                    │   Voice / Browser │
                    └─────────┬─────────┘
                              │
                              ▼
                    ┌───────────────────┐
                    │ Speech-to-Text    │
                    └─────────┬─────────┘
                              │
                              ▼
             ┌─────────────────────────────┐
             │ Main Learning &amp;amp; Literacy    │
             │ Agent                       │
             │                             │
             │ • English Practice          │
             │ • Guardrails                │
             │ • Memory                    │
             │ • Learning Flow             │
             └───────┬──────────┬──────────┘
                     │          │
                     │          │
              ┌──────▼───┐  ┌──▼────────────────┐
              │ Learning │  │ Maths Practice    │
              │ Tools    │  │ Specialist Agent  │
              └──────┬───┘  └───────────────────┘
                     │
                     ▼
             ┌─────────────────┐
             │ Memory / SQLite │
             └────────┬────────┘
                      │
         ┌────────────┼─────────────┐
         │            │             │
         ▼            ▼             ▼
  Human Help     Call Analytics   Outbound
   Escalation      Dashboard       Calling

                      │
                      ▼
                ┌─────────────┐
                │ Murf Falcon │
                │     TTS     │
                └─────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;The Difficult Parts I Faced&lt;/p&gt;

&lt;p&gt;Not everything worked perfectly on the first attempt.&lt;/p&gt;

&lt;p&gt;And honestly, that was probably one of the biggest learning experiences from this challenge.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Telephony Setup&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I initially explored different telephony services for outbound calling.&lt;/p&gt;

&lt;p&gt;Some required upgrades before allowing access to certain features.&lt;/p&gt;

&lt;p&gt;Others had trial limitations or different onboarding requirements.&lt;/p&gt;

&lt;p&gt;I had to experiment with different approaches instead of assuming that the first service would work perfectly.&lt;/p&gt;

&lt;p&gt;Eventually, I explored a SIP-based setup using Linphone for the outbound calling workflow.&lt;/p&gt;

&lt;p&gt;The lesson was:&lt;/p&gt;

&lt;p&gt;Always have an alternative approach when a third-party integration becomes a blocker.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Tool Calling&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Creating a function was relatively straightforward.&lt;/p&gt;

&lt;p&gt;Making sure the agent calls it at the correct time was harder.&lt;/p&gt;

&lt;p&gt;If the tool description is too vague, the agent might:&lt;/p&gt;

&lt;p&gt;Call it unnecessarily&lt;br&gt;
Never call it&lt;br&gt;
Call it at the wrong point in the conversation&lt;/p&gt;

&lt;p&gt;I learned that tool descriptions are part of the agent's reasoning interface.&lt;/p&gt;

&lt;p&gt;The description needs to clearly explain:&lt;/p&gt;

&lt;p&gt;What the tool does&lt;br&gt;
When it should be used&lt;br&gt;
When it should not be used&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Human Escalation&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The difficult part was defining when the agent should stop.&lt;/p&gt;

&lt;p&gt;A learner making mistakes does not mean the system failed.&lt;/p&gt;

&lt;p&gt;The agent should continue encouraging and teaching.&lt;/p&gt;

&lt;p&gt;But genuine frustration or an explicit request for a teacher is different.&lt;/p&gt;

&lt;p&gt;Finding this boundary helped me understand the importance of defining clear conditions for AI systems.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Defining Success&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;At first, it would have been easy to mark every completed conversation as successful.&lt;/p&gt;

&lt;p&gt;But that would not tell me much.&lt;/p&gt;

&lt;p&gt;A learner could talk for five minutes and still not complete a single exercise.&lt;/p&gt;

&lt;p&gt;So I defined success around the actual learning outcome.&lt;/p&gt;

&lt;p&gt;The learner needs to:&lt;/p&gt;

&lt;p&gt;Complete at least one exercise.&lt;br&gt;
Have the answer evaluated.&lt;br&gt;
Receive feedback.&lt;/p&gt;

&lt;p&gt;Only then is the session marked as successful.&lt;/p&gt;

&lt;p&gt;This made the analytics more meaningful.&lt;/p&gt;

&lt;p&gt;What I Learned About Building Voice Agents&lt;/p&gt;

&lt;p&gt;After working on this project for 10 days, I learned that a voice agent is much more than:&lt;/p&gt;

&lt;p&gt;Speech in → AI → Speech out.&lt;/p&gt;

&lt;p&gt;A useful agent needs a complete system around it.&lt;/p&gt;

&lt;p&gt;Here are some of my biggest takeaways.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Voice is only one layer&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The voice may be the first thing the user notices.&lt;/p&gt;

&lt;p&gt;But memory, tools, guardrails, decisions, and context determine whether the interaction is actually useful.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Memory changes the experience&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Remembering previous interactions makes the agent feel more continuous.&lt;/p&gt;

&lt;p&gt;The conversation no longer needs to restart from zero every time.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Tools need good descriptions&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A working function is not enough.&lt;/p&gt;

&lt;p&gt;The agent needs clear instructions about when and why it should use it.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;AI should know its limits&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Human escalation was an important reminder that an AI agent does not need to solve everything.&lt;/p&gt;

&lt;p&gt;Knowing when to ask for help can be just as important as answering correctly.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Measure outcomes, not just conversations&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Counting calls is easy.&lt;/p&gt;

&lt;p&gt;Understanding whether users achieved something meaningful is more valuable.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;One agent does not need to do everything&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Specialist agents can have smaller, clearer responsibilities.&lt;/p&gt;

&lt;p&gt;The main agent can focus on coordinating the experience and hand off specific tasks when needed.&lt;br&gt;
How to Build and Run This Project &lt;br&gt;
GitHub Repository&lt;/p&gt;

&lt;p&gt;Repository: &lt;a href="https://github.com/dibyendu-coder/murf-livekit-starter" rel="noopener noreferrer"&gt;https://github.com/dibyendu-coder/murf-livekit-starter&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Prerequisites&lt;/p&gt;

&lt;p&gt;1.Python (v3.9 or higher)&lt;br&gt;
2.Node.js (v18 or higher) and npm&lt;br&gt;
3.LiveKit Cloud / Server credentials or local LiveKit Server instance&lt;br&gt;
4.API Keys:&lt;br&gt;
 LiveKit API Key &amp;amp; Secret&lt;br&gt;
 Murf AI API Key&lt;br&gt;
 LLM Provider API Key (e.g., OpenAI / Gemini API key used in your agent        backend)&lt;/p&gt;

&lt;p&gt;Installation&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Obtain the Project Files&lt;br&gt;
Clone the repository or download the project files into a local folder.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Configure Environment Variables (.env.local)&lt;br&gt;
Create a .env.local file inside the murf-livekit-starter root (or backend/frontend folders as required by your setup) containing:&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;env&lt;/p&gt;

&lt;h1&gt;
  
  
  LiveKit Configuration
&lt;/h1&gt;

&lt;p&gt;LIVEKIT_URL=wss://your-livekit-domain.livekit.cloud&lt;br&gt;
LIVEKIT_API_KEY=your_livekit_api_key&lt;br&gt;
LIVEKIT_API_SECRET=your_livekit_api_secret&lt;/p&gt;

&lt;h1&gt;
  
  
  Next.js Public URL
&lt;/h1&gt;

&lt;p&gt;NEXT_PUBLIC_LIVEKIT_URL=wss://your-livekit-domain.livekit.cloud&lt;/p&gt;

&lt;h1&gt;
  
  
  Murf &amp;amp; AI Keys
&lt;/h1&gt;

&lt;p&gt;MURF_API_KEY=your_murf_api_key&lt;br&gt;
OPENAI_API_KEY=your_openai_api_key # (or relevant LLM key)&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Backend Setup
Open a terminal and navigate to the backend folder:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;bash&lt;br&gt;
cd murf-livekit-starter/backend&lt;br&gt;
Create and activate a Virtual Environment:&lt;/p&gt;

&lt;p&gt;Windows (PowerShell):&lt;br&gt;
powershell&lt;br&gt;
python -m venv .venv&lt;br&gt;
..venv\Scripts\Activate.ps1&lt;br&gt;
macOS / Linux:&lt;br&gt;
bash&lt;br&gt;
python3 -m venv .venv&lt;br&gt;
source .venv/bin/activate&lt;br&gt;
Install Dependencies:&lt;/p&gt;

&lt;p&gt;bash&lt;br&gt;
pip install -r requirements.txt&lt;br&gt;
Start the Agent Backend Worker:&lt;/p&gt;

&lt;p&gt;bash&lt;br&gt;
python agent.py dev&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Frontend Setup
Open a second terminal window and navigate to the frontend folder:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;bash&lt;br&gt;
cd murf-livekit-starter/frontend&lt;br&gt;
Install Node Dependencies:&lt;/p&gt;

&lt;p&gt;bash&lt;br&gt;
npm install&lt;br&gt;
Start the Next.js Development Server:&lt;/p&gt;

&lt;p&gt;bash&lt;br&gt;
npm run dev&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Launch the Application
Open your browser and go to &lt;a href="http://localhost:3000" rel="noopener noreferrer"&gt;http://localhost:3000&lt;/a&gt;.
Click Connect / Start Call to initiate a voice session with your LiveKit + Murf AI voice agent.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Environment Variables&lt;/p&gt;

&lt;h1&gt;
  
  
  LiveKit Configuration
&lt;/h1&gt;

&lt;p&gt;LIVEKIT_URL=wss://your-livekit-domain.livekit.cloud&lt;br&gt;
LIVEKIT_API_KEY=your_livekit_api_key&lt;br&gt;
LIVEKIT_API_SECRET=your_livekit_api_secret&lt;/p&gt;

&lt;h1&gt;
  
  
  Next.js Public URL
&lt;/h1&gt;

&lt;p&gt;NEXT_PUBLIC_LIVEKIT_URL=wss://your-livekit-domain.livekit.cloud&lt;/p&gt;

&lt;h1&gt;
  
  
  Murf &amp;amp; AI Keys
&lt;/h1&gt;

&lt;p&gt;MURF_API_KEY=your_murf_api_key&lt;br&gt;
OPENAI_API_KEY=your_openai_api_key  or GEMINI_API_KEY=your_gemini_api_key&lt;br&gt;
Also make sure .env is included in .gitignore.&lt;br&gt;
How to Run the Project&lt;br&gt;
Activate the livekit server from the root folder :&lt;br&gt;
.\livekit-server.exe --dev&lt;br&gt;
Activate the backend : uv run python src/agent.py dev&lt;br&gt;
Activate the  frontend : pnpm dev&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fiv7ox37mm1jlcktv3bd8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fiv7ox37mm1jlcktv3bd8.png" alt=" " width="799" height="357"&gt;&lt;/a&gt;&lt;br&gt;
What I Built in 10 Days&lt;/p&gt;

&lt;p&gt;Looking back, the project started as a simple idea:&lt;/p&gt;

&lt;p&gt;Build a voice agent for learning.&lt;/p&gt;

&lt;p&gt;By the end of the challenge, the project had grown into a system that could:&lt;/p&gt;

&lt;p&gt;Communicate through voice&lt;br&gt;
Follow learning and safety guardrails&lt;br&gt;
Support Hindi-English code-mixed conversations&lt;br&gt;
Remember returning learners&lt;br&gt;
Personalize interactions&lt;br&gt;
Fetch and provide learning exercises&lt;br&gt;
Evaluate answers&lt;br&gt;
Give supportive feedback&lt;br&gt;
Make outbound practice calls&lt;br&gt;
Ask for permission before escalating to a human&lt;br&gt;
Create structured human-help requests&lt;br&gt;
Track successful and failed learning sessions&lt;br&gt;
Display analytics from real session data&lt;br&gt;
Hand conversations to a specialist agent&lt;/p&gt;

&lt;p&gt;The project changed significantly from the original idea.&lt;/p&gt;

&lt;p&gt;And that is probably the biggest thing I enjoyed about this challenge.&lt;/p&gt;

&lt;p&gt;Every day added a new question.&lt;/p&gt;

&lt;p&gt;What should the agent remember?&lt;/p&gt;

&lt;p&gt;When should it use a tool?&lt;/p&gt;

&lt;p&gt;How should it contact the user?&lt;/p&gt;

&lt;p&gt;When should it stop?&lt;/p&gt;

&lt;p&gt;How do we know whether it is actually helping?&lt;/p&gt;

&lt;p&gt;When should another agent take over?&lt;/p&gt;

&lt;p&gt;Answering those questions slowly turned a simple voice assistant into something that feels much closer to a real product.&lt;/p&gt;

&lt;p&gt;Final Thoughts&lt;/p&gt;

&lt;p&gt;Ten days ago, I started with the goal of building a voice agent.&lt;/p&gt;

&lt;p&gt;I thought the biggest challenge would be getting the AI to listen and respond.&lt;/p&gt;

&lt;p&gt;It was not.&lt;/p&gt;

&lt;p&gt;The bigger challenge was deciding how the agent should behave once the conversation starts.&lt;/p&gt;

&lt;p&gt;What should it remember?&lt;/p&gt;

&lt;p&gt;What should it do with that information?&lt;/p&gt;

&lt;p&gt;When should it use a tool?&lt;/p&gt;

&lt;p&gt;When should it continue helping?&lt;/p&gt;

&lt;p&gt;When should it ask for human support?&lt;/p&gt;

&lt;p&gt;And how do we know if the interaction was actually successful?&lt;/p&gt;

&lt;p&gt;By the end of this journey, I realized that building an AI agent is not just about making it more capable.&lt;/p&gt;

&lt;p&gt;It is also about giving it boundaries.&lt;/p&gt;

&lt;p&gt;Knowing what it should do.&lt;/p&gt;

&lt;p&gt;Knowing what it should not do.&lt;/p&gt;

&lt;p&gt;And knowing when it should step aside.&lt;/p&gt;

&lt;p&gt;This project is still a work in progress, but the last 10 days gave me a much better understanding of how voice agents can move beyond simple conversations.&lt;/p&gt;

&lt;p&gt;I started by building a voice agent.&lt;/p&gt;

&lt;p&gt;I ended up building the foundation of a voice-first learning companion that can remember learners, personalize practice, use tools, proactively initiate conversations, involve humans when needed, measure outcomes, and work with specialist agents.&lt;/p&gt;

&lt;p&gt;And this is only the beginning.&lt;/p&gt;

&lt;p&gt;Built as part of the 10 Days of Voice Agents – Voice for Bharat Edition using Murf Falcon.&lt;/p&gt;

&lt;h1&gt;
  
  
  VoiceForBharat #MurfAI #MurfFalcon #AIVoiceAgents #VoiceAI #LearningAndLiteracy #AIAgents #MultiAgent #ConversationalAI #BuildInPublic #10DaysofAIVoiceAgents
&lt;/h1&gt;

</description>
    </item>
    <item>
      <title>The Silent Side of Hackathons: When Your Name Is Never Called</title>
      <dc:creator>Dibyendu Chatterjee</dc:creator>
      <pubDate>Wed, 03 Jun 2026 17:26:17 +0000</pubDate>
      <link>https://dev.to/dibyendu_chatterjee_409d4/the-silent-side-of-hackathons-when-your-name-is-never-called-2683</link>
      <guid>https://dev.to/dibyendu_chatterjee_409d4/the-silent-side-of-hackathons-when-your-name-is-never-called-2683</guid>
      <description>&lt;p&gt;If you look at my social media profile, you might think my hackathon journey has been exciting. There are photos from events, team pictures, project demos, certificates, and countless posts about late-night coding sessions.&lt;/p&gt;

&lt;p&gt;What you won't see are the moments after the winner announcements.&lt;/p&gt;

&lt;p&gt;The moments when everyone gathers around the stage, waiting for the results.&lt;/p&gt;

&lt;p&gt;The moments when I sit quietly in the audience, listening to names that are never mine.&lt;/p&gt;

&lt;p&gt;I have participated in many hackathons. I have spent sleepless nights building projects, fixing bugs at 3 AM, creating presentations minutes before submission, and learning technologies that I had never touched before. Every time I join a new hackathon, I tell myself that maybe this time things will be different.&lt;/p&gt;

&lt;p&gt;Maybe this time my project will be good enough.&lt;/p&gt;

&lt;p&gt;Maybe this time my team will make it to the top.&lt;/p&gt;

&lt;p&gt;Maybe this time I will finally hear my name being called.&lt;/p&gt;

&lt;p&gt;But often, the results are the same.&lt;/p&gt;

&lt;p&gt;Someone else wins.&lt;/p&gt;

&lt;p&gt;I clap for them.&lt;/p&gt;

&lt;p&gt;I smile.&lt;/p&gt;

&lt;p&gt;And then I quietly leave the venue.&lt;/p&gt;

&lt;p&gt;At first, it was easy to accept. I was a beginner, and there was always something new to learn. But after participating in many hackathons, the feeling became heavier. Watching other teams win again and again started making me question myself.&lt;/p&gt;

&lt;p&gt;Am I not working hard enough?&lt;/p&gt;

&lt;p&gt;Am I not skilled enough?&lt;/p&gt;

&lt;p&gt;What am I doing wrong?&lt;/p&gt;

&lt;p&gt;These questions are difficult because there is rarely a clear answer.&lt;/p&gt;

&lt;p&gt;The truth is that hackathons are strange competitions. Sometimes the best technical solution does not win. Sometimes the team with the best presentation stands out. Sometimes the judges are looking for something different. Sometimes another team simply builds something extraordinary.&lt;/p&gt;

&lt;p&gt;And sometimes, despite doing everything right, you still don't win.&lt;/p&gt;

&lt;p&gt;That is probably the hardest lesson I have learned.&lt;/p&gt;

&lt;p&gt;I used to think that effort always guarantees results. Hackathons taught me that effort guarantees growth, not necessarily trophies.&lt;/p&gt;

&lt;p&gt;Every project I built taught me something valuable. I learned how to work under pressure. I learned how to communicate ideas. I learned how to collaborate with teammates. I learned how to present in front of judges. Most importantly, I learned how to keep going after disappointment.&lt;/p&gt;

&lt;p&gt;People often celebrate the winners, and they deserve that recognition. But there are hundreds of participants who return home without medals, prize money, or certificates of achievement. Their stories are rarely told.&lt;/p&gt;

&lt;p&gt;I am one of them.&lt;/p&gt;

&lt;p&gt;I know what it feels like to refresh the results page again and again.&lt;/p&gt;

&lt;p&gt;I know what it feels like to believe your project has a chance.&lt;/p&gt;

&lt;p&gt;I know what it feels like to hear the final winner announcement and realize your journey ends there.&lt;/p&gt;

&lt;p&gt;It hurts.&lt;/p&gt;

&lt;p&gt;Not because someone else won.&lt;/p&gt;

&lt;p&gt;But because of the dreams you secretly attached to that project.&lt;/p&gt;

&lt;p&gt;The dreams of proving yourself.&lt;/p&gt;

&lt;p&gt;The dreams of finally succeeding.&lt;/p&gt;

&lt;p&gt;The dreams of showing everyone that your hard work was worth it.&lt;/p&gt;

&lt;p&gt;Yet despite all of this, I keep coming back.&lt;/p&gt;

&lt;p&gt;Not because I enjoy losing.&lt;/p&gt;

&lt;p&gt;Not because failure feels good.&lt;/p&gt;

&lt;p&gt;But because every hackathon gives me another opportunity to improve.&lt;/p&gt;

&lt;p&gt;Every loss teaches me something that a victory never could.&lt;/p&gt;

&lt;p&gt;Every rejected project reveals a weakness I can work on.&lt;/p&gt;

&lt;p&gt;Every unsuccessful attempt makes me more experienced than I was before.&lt;/p&gt;

&lt;p&gt;One day, maybe my name will finally be called on that stage.&lt;/p&gt;

&lt;p&gt;Maybe I will stand where the winners stand today.&lt;/p&gt;

&lt;p&gt;Maybe all these failures will become part of a success story.&lt;/p&gt;

&lt;p&gt;But even if that day takes longer than expected, I refuse to stop trying.&lt;/p&gt;

&lt;p&gt;Because hackathons were never just about winning.&lt;/p&gt;

&lt;p&gt;They were about becoming the kind of person who keeps building even when nobody is watching.&lt;/p&gt;

&lt;p&gt;And until the day my name is announced, I will continue doing exactly that.&lt;/p&gt;

&lt;p&gt;Building.&lt;/p&gt;

&lt;p&gt;Learning.&lt;/p&gt;

&lt;p&gt;Failing.&lt;/p&gt;

&lt;p&gt;Improving.&lt;/p&gt;

&lt;p&gt;And showing up again.&lt;/p&gt;

&lt;p&gt;Because sometimes the strongest participants in a hackathon are not the ones holding the trophies.&lt;/p&gt;

&lt;p&gt;They are the ones sitting quietly in the audience, carrying their disappointment home, and still deciding to come back for the next challenge.&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%2Fkfbovhnfxcvvmweidzll.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%2Fkfbovhnfxcvvmweidzll.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Building BackBench — An Emotionally Adaptive AI Learning Platform</title>
      <dc:creator>Dibyendu Chatterjee</dc:creator>
      <pubDate>Tue, 19 May 2026 21:22:52 +0000</pubDate>
      <link>https://dev.to/dibyendu_chatterjee_409d4/building-backbench-an-emotionally-adaptive-ai-learning-platform-3bhd</link>
      <guid>https://dev.to/dibyendu_chatterjee_409d4/building-backbench-an-emotionally-adaptive-ai-learning-platform-3bhd</guid>
      <description>&lt;p&gt;During this hackathon I kind of wanted to build something that felt different from the usual AI chatbots, quiz makers, and productivity tools. I mean not just another screen that delivers content or spits out answers right away. Instead of focusing on content only, I wanted to tackle a more real and human issue in education—silent student struggle, you know.&lt;/p&gt;

&lt;p&gt;A lot of students don’t exactly “stop learning” they just… hesitate. They mess up again and again , lose confidence, avoid asking doubts where everyone can see, and slowly drift out of the whole learning vibe. Most platforms never catch that emotional part. They can track marks, timelines, “progress”, but they don’t really see when a student is quietly giving up.&lt;/p&gt;

&lt;p&gt;That’s how BackBench happened. It’s an emotionally adaptive AI-powered learning platform made to support students in real time when they struggle silently , without turning it into a big performance.&lt;/p&gt;

&lt;p&gt;The main idea behind BackBench is honestly pretty plain:&lt;/p&gt;

&lt;p&gt;“Learning should adapt to the student, not the other way around.” &lt;/p&gt;

&lt;p&gt;So the platform looks for patterns like repeated wrong answers, hesitation, inactivity, quick guessing, and focus drops. Once those signals show up, BackBench adjusts the learning experience automatically with things like Rescue Mode, adaptive AI explanations, emotional learning analytics, and anonymous doubt rooms.&lt;/p&gt;

&lt;p&gt;One of the coolest pieces I built was Rescue Mode. When the system notices that a student is struggling repeatedly, the interface turns into a more calm, more supportive space. The AI simplifies the concepts, it changes teaching styles, and it gives guided explanations in a way that feels less overwhelming. The point isn’t to “correct” them harder, or make them feel judged. It’s more like helping them get confidence back, step by step, while learning.&lt;/p&gt;

&lt;p&gt;Another feature I really enjoyed was the Anonymous Doubt Rooms. A ton of students avoid questions publicly because they worry about embarrassment or being judged. These rooms let students collaborate anonymously in real time, so they get a safe emotional space, while still getting AI-assisted help when they need it.&lt;/p&gt;

&lt;p&gt;I built the whole project using MeDo.dev. One thing I learned here is that modern development isn’t just about writing code by hand. It’s also product thinking, user experience design, and figuring out the actual problem you’re solving. I used MeDo not only as a code generation helper, but kind of as a creative partner to sharpen the product direction, the interaction flows, the adaptive systems, and the emotional UX of the platform , step by step.&lt;/p&gt;

&lt;p&gt;This hackathon taught me that the best projects aren’t always the ones with the most technical complexity. Sometimes the strongest ideas come from understanding human problems deeply, and then building experiences that actually feel meaningful.&lt;/p&gt;

&lt;p&gt;BackBench isn’t just another AI tutor. It’s an attempt to make education more emotionally aware, more supportive, and more human-centered.&lt;/p&gt;

&lt;p&gt;And yeah, this is only the beginning.&lt;/p&gt;

</description>
      <category>builtwithmedo</category>
    </item>
  </channel>
</rss>
