<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Aigle's Perch]]></title><description><![CDATA[Aigle's Perch]]></description><link>https://aiglelevant.hashnode.dev</link><generator>RSS for Node</generator><lastBuildDate>Fri, 25 Sep 2026 08:45:33 GMT</lastBuildDate><atom:link href="https://aiglelevant.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[So, What Even Is RAG?]]></title><description><![CDATA[AI-powered RAG agent. RAG this. RAG that.
You: “What even is RAG?”
Tbh, shit’s confusing as hell at first. But the deeper you go, the better it gets.
What LLMs OFTEN get wrong at
We all have had this ]]></description><link>https://aiglelevant.hashnode.dev/so-what-even-is-rag</link><guid isPermaLink="true">https://aiglelevant.hashnode.dev/so-what-even-is-rag</guid><category><![CDATA[RAG ]]></category><category><![CDATA[AI]]></category><category><![CDATA[ai agents]]></category><category><![CDATA[llm]]></category><category><![CDATA[#PromptEngineering]]></category><category><![CDATA[Prompt]]></category><category><![CDATA[software development]]></category><category><![CDATA[Software Engineering]]></category><dc:creator><![CDATA[aiglelevant]]></dc:creator><pubDate>Mon, 14 Sep 2026 05:00:00 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/6a4ba86e60d4a5c44d985d8d/7a087f80-4a89-47b1-a869-e031bda04ca0.jpg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>AI-powered RAG agent. RAG this. RAG that.</p>
<p>You: “What even is RAG?”</p>
<p>Tbh, shit’s confusing as hell at first. But the deeper you go, the better it gets.</p>
<h2><strong>What LLMs OFTEN get wrong at</strong></h2>
<p>We all have had this moment before vivas.</p>
<p>Cram all the information a few hours before your turn.</p>
<p>Then yap at the external examiner and hope for the best. But then the examiner asks: “Okay, but why did you make that decision in your project?”</p>
<p>Now all quiet at the viva hall.</p>
<p>LLMs do just that.</p>
<p>They are designed to generate plausible responses.</p>
<p>Which means…they simply dunno how to say ‘I dunno’.</p>
<p>And then there’s the problem of outdated information.</p>
<p>Imagine your examiner asks:</p>
<p>“Why did you use that approach when there’s a newer and better way of doing it?”</p>
<p>You’re in trouble.</p>
<p>LLMs can face the same problem when their knowledge doesn’t contain the latest information.</p>
<p>So… <strong>How do we give an LLM the information it needs when it needs it?</strong></p>
<h2><strong>Introducing Retrieval-Augmented Generation</strong></h2>
<p>Press enter or click to view image in full size</p>
<p>Don’t get intimated by the name. Just a fancy name for a simple process: find relevant info., give it to the model and let it generate an answer.</p>
<p>That’s it.</p>
<p>Let’s break down what’s actually happening under the hood.</p>
<h2><strong>Understanding the problem</strong></h2>
<p>Picture this: you’re building an AI assistant for your company.</p>
<p>Now, the company has several documents: employee handbook, internal FAQs, security policies, etc.</p>
<p>Let’s say that you’re finished building it. People will want to test it for sure. So, someone asks the model:</p>
<blockquote>
<p><em>“How many days of parental leave do I get?”</em></p>
</blockquote>
<p>Now the problem is, the model <em>doesn’t</em> know what your company policies are. Nor can you dump a 500 documents [each of several hundred pages] on a poor model and ask it to spit out an answer [this leads to overfitting, context window overload, etc.]</p>
<h2><strong>Process behind RAG</strong></h2>
<p>Instead of asking the LLM to answer the question from its own knowledge, we first retrieve relevant information from our own knowledge base. Then we give that information to the LLM.</p>
<p>The LLM uses that information to generate the answer.</p>
<p>This means the model doesn’t need to know everything. We just need to feed it the <strong>right information</strong> at the <strong>right time</strong>.</p>
<p>But now we have another problem: <strong>How do we figure out which information is relevant in the first place?</strong></p>
<h2><strong>Retrieval</strong></h2>
<p>We don’t want to send all of them to the LLM for every question. We first need to <strong>find the relevant bits</strong>, as finding every single one is resource-intensive, very time-consuming!</p>
<p>So we split the documents into smaller pieces called <strong>chunks</strong>. One chunk might contain the parental leave policy, another the security policy, and another the expense policy.</p>
<h3><strong>How do we find the right chunk?</strong></h3>
<p>A user might ask: <em>“How long can I stay away from work after having a baby?”</em></p>
<p>The document says: <em>“Employees are entitled to 26 weeks of parental leave.”</em></p>
<p>Different words. Same meaning. For tackling this unique issue, we introduce <strong>embeddings</strong>.</p>
<h3><strong>Embeddings</strong></h3>
<p>An embedding converts text into numbers that capture its meaning. Similar text ends up close together in this mathematical space [we use a terminology called vector distance: meaning, how far are 2 vectors away from each other?].</p>
<p>We store these embeddings in a <strong>vector database</strong>. When a question comes in, we embed it too and search for the closest chunks.</p>
<p>That gives us the relevant chunks, which are then passed to the LLM as context.</p>
<h2><strong>Augmentation</strong></h2>
<p>We’ve found the relevant chunks.</p>
<p>Now we add them to the LLM’s <strong>context</strong> alongside the user’s question:</p>
<pre><code class="language-plaintext">Context:
Employees are entitled to 26 weeks of parental leave.

Question:
How long can I stay away from work after having a baby?
</code></pre>
<p>The LLM now has the information it needs to answer.</p>
<h2><strong>Generation</strong></h2>
<p>Now the LLM does what it’s extremely good at: <strong>generating the answer.</strong></p>
<p>It takes the user’s question and the retrieved context, then produces a response:</p>
<blockquote>
<p><em>“You’re entitled to 26 weeks of parental leave.”</em></p>
</blockquote>
<p>That’s the final step from the process of: <strong>Retrieve → Augment → Generate</strong></p>
<h3><strong>But there’s a catch.</strong></h3>
<p>The LLM can only work with the <strong>information we retrieve</strong>. If we retrieve the wrong chunk, the answer can still be wrong.</p>
<p>Here’s an example:</p>
<p><strong>Question:</strong> “How long is parental leave?”</p>
<p><strong>Retrieved:</strong> “Notify your manager 30 days before taking parental leave.”</p>
<p><strong>Answer:</strong> “You need to notify your manager 30 days before taking parental leave.”</p>
<h3><strong>How to make it better, then?</strong></h3>
<p>So, how do we make sure we retrieve the <strong>right</strong> information?</p>
<p>A few things matter:</p>
<p><strong>Chunking:</strong> How we split documents can determine whether the useful context stays together.</p>
<p><strong>Embeddings:</strong> Better embeddings make it easier to match questions with relevant content.</p>
<p><strong>Search:</strong> We can combine semantic search with keyword search to catch both meaning and exact terms.</p>
<p><strong>Reranking:</strong> Retrieve a few candidates first, then rank them again to find the most relevant ones.</p>
<p>The goal is simple: <strong>Get the right context in front of the LLM.</strong></p>
<h2><strong>To conclude</strong></h2>
<p>RAG isn’t magic.</p>
<p>Find the right information.<br />Give it to the LLM.<br />Let it answer.</p>
<p>That’s it.</p>
<p>The LLM doesn’t need to know everything.</p>
<p>It just needs the <strong>right context</strong> at the <strong>right time.</strong></p>
<p>And in RAG, that’s the real game: Garbage in, garbage out and vice versa.</p>
<p>Now you know what all the “RAG this, RAG that” is about.</p>
]]></content:encoded></item><item><title><![CDATA[I Failed NIMCET. 40 Days Later, I Landed an Internship at a US-Based Consultancy.]]></title><description><![CDATA[On a July evening, an email landed in my inbox.

We are thrilled to offer you a position...

I stared at it for a few seconds before it finally sank in.
Forty days earlier, I had walked out of the NIM]]></description><link>https://aiglelevant.hashnode.dev/i-failed-nimcet-40-days-later-i-landed-an-internship-at-a-us-based-consultancy</link><guid isPermaLink="true">https://aiglelevant.hashnode.dev/i-failed-nimcet-40-days-later-i-landed-an-internship-at-a-us-based-consultancy</guid><category><![CDATA[internships]]></category><category><![CDATA[exam ]]></category><category><![CDATA[startup]]></category><category><![CDATA[Startups]]></category><category><![CDATA[InternshipJourney]]></category><category><![CDATA[software development]]></category><category><![CDATA[student]]></category><category><![CDATA[Career]]></category><category><![CDATA[Developer]]></category><category><![CDATA[leetcode]]></category><dc:creator><![CDATA[aiglelevant]]></dc:creator><pubDate>Mon, 07 Sep 2026 02:14:00 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/6a4ba86e60d4a5c44d985d8d/9ae66c57-63eb-484d-a571-e48ad6050b0b.jpg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>On a July evening, an email landed in my inbox.</p>
<blockquote>
<p><strong>We are thrilled to offer you a position...</strong></p>
</blockquote>
<p>I stared at it for a few seconds before it finally sank in.</p>
<p>Forty days earlier, I had walked out of the NIMCET exam hall convinced I'd wasted an entire year.</p>
<p>Funny how quickly life can change.</p>
<h3>The D-Day: June 6</h3>
<p>History remembers it as one of humanity's greatest victories.</p>
<p>I remember it as the day I walked out of an exam hall completely broken.</p>
<p>I still remember how innocently I walked into the tech lab, feeling prepared and enthused.</p>
<p><em><strong>"What the fuck was that?!"</strong></em></p>
<p>I had found myself in an utterly hope-shattering predicament. Not a single section that was doable. My stress levels were through the fucking roof.</p>
<p>I walked out a changed person. Once full of hope, I was now nothing but a husk, trudging all the way home.</p>
<h3>I had two choices</h3>
<p>Complain about the miserable experience, complain that one specific rule made you lose marks, complain that people who didn't study as hard as I did got more marks than me.</p>
<p>Complain, complain, <em>complain</em>.</p>
<p>OR</p>
<p>Just get over it and grind.</p>
<p>There is a concept in my native language: <em>விடாமுயற்சி</em> [perseverance].</p>
<p>And the wise old men say: perseverance is king.</p>
<p>So be it.</p>
<p>I am restarting my DSA prep <strong>today</strong>. I am hunting an internship <strong>today</strong>. I am building projects <strong>starting today</strong>...I said to myself the evening after NIMCET, staring at the LeetCode problem section page.</p>
<h3>The grind begins</h3>
<p>Every day, my job was to catch the morning job postings and then follow-up in the evening.</p>
<p>LinkedIn. Twitter [now known as X]. Reddit. Naukri. WellFound. You name it, I've already scrounged through it.</p>
<p>I also practiced DSA like there was no tomorrow. 4 problems every day. Couple that with spaced repetition and building projects, my schedule was packed tight.</p>
<h3>When an opportunity comes in, GRAB it</h3>
<p>I hate missing opportunities.</p>
<p>I now hate it even more, thanks to that exam day.</p>
<p>So when someone wrote a comment that his company was hiring for interns on a reddit post, I immediately reached out and asked for the details.</p>
<p>At that time, I had absolutely no idea where it would eventually lead.</p>
<h3>The Assignment</h3>
<p>"Oh nice, looks like this is a start-up", I thought and accepted the take-home assignment.</p>
<p>Out of curiosity, I decided to dig deeper into who assigned me the assignment. Turns out, he was a core contributor to one of the tools explicitly mentioned in the assignment.</p>
<p>I looked up the Reddit user whom I had contacted as well, and found that he held a senior position at the company.</p>
<p>That was the moment it hit me.</p>
<p>This wasn't just another take-home assignment I'd submit and forget about.</p>
<p>The people reviewing my code weren't just hiring managers. They had helped build the ecosystem I was now writing code for.</p>
<p>Suddenly, every line of code mattered. Every single decision I made mattered.</p>
<p>In short, I realized they weren't just looking for someone who could make the code work. They wanted someone who could think like an <strong>engineer</strong>.</p>
<h3>Working on the assignment</h3>
<p>I set up my repository and started building.</p>
<p>The assignment details were surprisingly good. Everything was moving smoothly.</p>
<p>Then came a major roadblock... where none of my solutions worked.</p>
<p><em><strong>"Wtf do I even do?"</strong></em></p>
<p>Eventually I reached out to the poster regarding the assignment.</p>
<p>Apparently, he expected candidates to ask questions instead of silently struggling. Now that was surprisingly refreshing.</p>
<p>I got the clarification, fixed the issue, and continued working and finally submitted it 2 days before the deadline.</p>
<h3>The interview</h3>
<p>I honestly didn't expect to reach the interview stage this quickly.</p>
<p>I prepared myself for the usual experience: formal introductions, rapid-fire technical questions, STAR format...</p>
<p>Instead, we spent time discussing Retrieval-Augmented Generation [RAG], projects, other tech stuff.</p>
<p>It felt less like being evaluated and more like talking to engineers who actually enjoyed engineering.</p>
<h3>And soon...</h3>
<p>An email landed in my inbox.</p>
<p>The internship offer letter. From the very US-based consultancy I talked about.</p>
<p>The month that started with my biggest academic disappointment ended with the opportunity I'd been chasing every single day.</p>
<h3>If you're reading this after failing an exam...</h3>
<p>You probably think you're behind.</p>
<p>You're not. You're just standing at a crossroads.</p>
<p>One road leads to endless doom-scrolling and self-pity. The other leads back to your desk.</p>
<p>Open your IDE.</p>
<p>Open LeetCode.</p>
<p>Ship something.</p>
<p>Apply again.</p>
<p>Because sometimes the worst day of your year quietly becomes the first chapter of your best story.</p>
<p>Mine started with failing NIMCET.</p>
<p>It led me to a US-based consultancy.</p>
<p>I can't wait to see where yours begins.</p>
]]></content:encoded></item><item><title><![CDATA[The Email Verification API is Coming: Here's Why Your Login Flow is About to Change]]></title><description><![CDATA[We've all used this feature on our phones.
You receive an OTP via SMS, and your device suggests it automatically. One tap, and you're verified—no switching apps, no copying and pasting.
Now imagine th]]></description><link>https://aiglelevant.hashnode.dev/the-email-verification-api-is-coming-here-s-why-your-login-flow-is-about-to-change</link><guid isPermaLink="true">https://aiglelevant.hashnode.dev/the-email-verification-api-is-coming-here-s-why-your-login-flow-is-about-to-change</guid><category><![CDATA[OTP Verification]]></category><category><![CDATA[gmail]]></category><category><![CDATA[email]]></category><category><![CDATA[api]]></category><category><![CDATA[Developer Tools]]></category><dc:creator><![CDATA[aiglelevant]]></dc:creator><pubDate>Mon, 13 Jul 2026 03:24:42 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/6a4ba86e60d4a5c44d985d8d/2e492523-9b09-4f8a-9884-b6010377cf43.jpg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>We've all used this feature on our phones.</p>
<p>You receive an OTP via SMS, and your device suggests it automatically. One tap, and you're verified—no switching apps, no copying and pasting.</p>
<p>Now imagine the same seamless experience, but for <strong>email verification</strong>.</p>
<p>That's exactly what Google Chrome is working on with the <strong>Email Verification API</strong>, currently available as an <strong>Origin Trial</strong>.</p>
<hr />
<h2>The Problem with Email Verification</h2>
<p>Today, verifying an email address usually looks like this:</p>
<ol>
<li>Enter your email address.</li>
<li>Open your inbox.</li>
<li>Find the verification email.</li>
<li>Copy the OTP or click the verification link.</li>
<li>Return to the website.</li>
</ol>
<p>It's a familiar process, but it breaks the user's flow.</p>
<h2>Chrome's Proposal</h2>
<p>Instead of relying on OTPs or verification links, Chrome wants browsers to verify ownership of an email address directly.</p>
<p>The flow looks like this:</p>
<ol>
<li>You select an email address from the browser's autofill suggestions.</li>
<li>With your permission, the browser contacts the email provider.</li>
<li>The provider confirms that you own the selected email address.</li>
<li>The website receives the verification result.</li>
</ol>
<p>No inbox.</p>
<p>No OTP.</p>
<p>No verification link.</p>
<p>Just a smoother user experience.</p>
<hr />
<h2>Why This Is Interesting</h2>
<h3>For users</h3>
<ul>
<li>Faster sign-ups and logins</li>
<li>No switching between the browser and email app</li>
<li>Less friction during onboarding</li>
</ul>
<h3>For developers</h3>
<ul>
<li>Simpler verification flows</li>
<li>Fewer issues caused by delayed or missing emails</li>
<li>Better conversion rates during registration</li>
</ul>
<h2>Current Status</h2>
<p>The Email Verification API is currently available as an <strong>Origin Trial</strong> in Chrome. This allows developers to experiment with the feature and provide feedback before it becomes part of the web platform.</p>
<p>If adopted widely, email verification on the web could become as seamless as SMS OTP autofill is on modern smartphones.</p>
<hr />
<h2>Learn More</h2>
<p>Read Google's announcement at <a href="https://developer.chrome.com/blog/email-verification-protocol-origin-trial">their dev page</a></p>
<p>What do you think? Would you prefer this over traditional email verification links?</p>
<hr />
<p>If you enjoyed this post, feel free to connect with me!</p>
<ul>
<li><strong>X:</strong> <a href="https://x.com/aiglelevant">@aiglelevant</a></li>
<li><strong>LinkedIn:</strong> <a href="https://www.linkedin.com/in/prajanya-subramanian/">Prajanya Subramanian</a></li>
<li><strong>Email:</strong> <a href="mailto:aiglelevant@gmail.com">aiglelevant@gmail.com</a></li>
<li><strong>GitHub:</strong> <a href="https://github.com/aigle-levant">@aigle-levant</a></li>
<li><strong>Substack:</strong> <a href="https://substack.com/@aiglelevant">@aiglelevant</a></li>
<li><strong>Dev.to:</strong> <a href="https://dev.to/aiglelevant">Aiglelevant</a></li>
</ul>
<p>I'd love to hear your thoughts or discuss all things web development, browsers and AI.</p>
]]></content:encoded></item></channel></rss>