<?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: Piyush Gupta</title>
    <description>The latest articles on DEV Community by Piyush Gupta (@knight0916).</description>
    <link>https://dev.to/knight0916</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%2F3995091%2Fd2bcde73-90e2-4c8d-8a2b-a67d97053367.png</url>
      <title>DEV Community: Piyush Gupta</title>
      <link>https://dev.to/knight0916</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/knight0916"/>
    <language>en</language>
    <item>
      <title>Deadline Buddy — The Open-Source Scholarship Compass That Explains Every Match (Built for a Friend)</title>
      <dc:creator>Piyush Gupta</dc:creator>
      <pubDate>Sun, 04 Oct 2026 16:54:19 +0000</pubDate>
      <link>https://dev.to/knight0916/deadline-buddy-the-open-source-scholarship-compass-that-explains-every-match-built-for-a-friend-1dh7</link>
      <guid>https://dev.to/knight0916/deadline-buddy-the-open-source-scholarship-compass-that-explains-every-match-built-for-a-friend-1dh7</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-weekend-2026-10-01"&gt;Hacktoberfest Weekend Challenge: Build for a Friend&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;




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

&lt;h3&gt;
  
  
  The Story: Building for a Friend Under a Mountain of PDFs
&lt;/h3&gt;

&lt;p&gt;My close friend is a 3rd-year Computer Science undergraduate at NIT Karnataka, Surathkal in India. Like thousands of ambitious students around the world, their dream is to pursue a Master's degree abroad in AI and Distributed Systems.&lt;/p&gt;

&lt;p&gt;A few weeks ago, I watched them spend an entire weekend buried under a mountain of open browser tabs: &lt;strong&gt;DAAD&lt;/strong&gt; in Germany, &lt;strong&gt;EduCanada&lt;/strong&gt;, &lt;strong&gt;Fulbright&lt;/strong&gt; in the US, and &lt;strong&gt;Chevening&lt;/strong&gt; and &lt;strong&gt;Commonwealth&lt;/strong&gt; in the UK. Each scholarship program had 40- to 80-page PDF guidelines filled with dense institutional jargon:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;em&gt;"Does a 4-year Indian B.Tech degree count as final-year standing right now?"&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;"Does an 8.4 / 10 CGPA meet the 'first-class honours or 2:1 equivalent' threshold?"&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;"Does a national hackathon finalist certificate satisfy 'demonstrated community leadership'?"&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Existing scholarship portals were useless: they either acted as clickbait lead-generation farms or slapped an opaque &lt;em&gt;"87% Match"&lt;/em&gt; badge on a card without explaining &lt;strong&gt;why&lt;/strong&gt; they qualified. The alternative—spending 20 hours drafting an essay only to be rejected over a technical disqualifier buried on page 52—was heartbreaking.&lt;/p&gt;

&lt;p&gt;I built &lt;strong&gt;Deadline Buddy&lt;/strong&gt; for my friend.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7ao466ovu8bz7zvf6wlc.png" alt=" " width="800" height="367"&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What Deadline Buddy Does
&lt;/h3&gt;

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

&lt;p&gt;Deadline Buddy turns scholarship discovery into a transparent, stress-free 5-step loop:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;📄 Zero-Friction Document Intake:&lt;/strong&gt; Drop in unofficial transcripts, resumes, or certificates (PDF, DOCX, TXT) or click the 1-click sample button.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;👤 Structured Profile Extraction:&lt;/strong&gt; The system extracts key attributes (GPA, current year of study, degree, graduation year, skills, achievements) into an editable profile with supporting document quotes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🌍 Destination Personalization:&lt;/strong&gt; Pick a target country (USA, Canada, UK, Germany, Australia, Netherlands, Singapore, Japan), immediately contextualizing currencies, deadlines, and official guides.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;⚖️ Deterministic Eligibility Matching:&lt;/strong&gt; Instead of letting an LLM guess eligibility, pure deterministic code evaluates published requirements against the profile, categorizing each award into &lt;strong&gt;Eligible (✓)&lt;/strong&gt;, &lt;strong&gt;Needs Verification (🟡)&lt;/strong&gt;, or &lt;strong&gt;Not Eligible (✕)&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🔍 The Signature "Why?" Evidence Drawer &amp;amp; AI Strategy Advisor:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;Clicking any status badge reveals a side-by-side audit trail: the exact published clause, the student's extracted evidence, the source document quote, and a link to the official university portal.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;⚡ Ask Open AI Strategy Advisor&lt;/code&gt;&lt;/strong&gt;: Generates a personalized gap plan with feasibility scoring and alternative scholarships.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;🧪 Open AI Guideline Lab&lt;/code&gt;&lt;/strong&gt;: Paste raw institutional PDF announcements to test real-time guideline extraction.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;⏳ Deadline-First Shortlist:&lt;/strong&gt; Saved opportunities are prioritized by nearest deadline so students never miss an application window.&lt;/li&gt;
&lt;/ol&gt;




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

&lt;ul&gt;
&lt;li&gt;🌐 &lt;strong&gt;Live Deployed Application:&lt;/strong&gt; &lt;a href="https://deadline-buddy-nine.vercel.app/" rel="noopener noreferrer"&gt;https://deadline-buddy-nine.vercel.app/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;⚡ &lt;strong&gt;1-Click Judge Walkthrough:&lt;/strong&gt; On the landing screen, click &lt;strong&gt;&lt;code&gt;⚡ Load Sample Student Documents (1-Click Demo)&lt;/code&gt;&lt;/strong&gt; to instantly populate a real-world academic profile and test the deterministic rules engine across 26 real scholarships!&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/guptapiyush16" rel="noopener noreferrer"&gt;
        guptapiyush16
      &lt;/a&gt; / &lt;a href="https://github.com/guptapiyush16/Deadline-Buddy" rel="noopener noreferrer"&gt;
        Deadline-Buddy
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;🎓 Deadline Buddy — The Open-Source Scholarship Compass&lt;/h1&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"Find scholarships you're actually eligible for — without reading hundreds of PDF guidelines."&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;Built for the &lt;a href="https://dev.to/challenges/hacktoberfest-weekend-2026-10-01" rel="nofollow"&gt;Hacktoberfest 2026 Weekend Challenge: Build for a Friend&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="https://www.typescriptlang.org/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/8946ab9e23d56aabb16c0e57e56030b30a3e847dabd2557a476cc91b99bf48b6/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f547970655363726970742d352e362d626c75652e737667" alt="TypeScript"&gt;&lt;/a&gt;
&lt;a href="https://react.dev/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/00e3e223744f75b14c36b6cd6620a6cbbbb6fb98410cd390a0fadf0a38f3efef/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f52656163742d31392d3631646166622e737667" alt="React"&gt;&lt;/a&gt;
&lt;a href="https://vitejs.dev/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/42c029effeb438b26ae2aa5fcf923cc565fdb9ab38b0fd9cdd14db11ddbd69fd/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f566974652d372e312d3634366366662e737667" alt="Vite"&gt;&lt;/a&gt;
&lt;a href="https://vitest.dev/" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/3ce9414a8368319d4bdff224f69c8bba3858968bece69d2500a6dd04862c2b5b/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f54657374732d50617373696e672532302831312532463131292d627269676874677265656e2e737667" alt="Tests"&gt;&lt;/a&gt;
&lt;a href="https://github.com/guptapiyush16/Deadline-Buddy#zero-api-keys-guarantee" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/4394f696336228f34f83bb2f2ba2195092207460b3f25d831a66f536ecc3c743/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4150492532304b6579732d5a65726f25323052657175697265642d737563636573732e737667" alt="Zero API Keys"&gt;&lt;/a&gt;
&lt;a href="https://github.com/guptapiyush16/Deadline-Buddy/LICENSE" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/fdf2982b9f5d7489dcf44570e714e3a15fce6253e0cc6b5aa61a075aac2ff71b/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d79656c6c6f772e737667" alt="License: MIT"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;📖 The Story: Building for a Friend&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;My close friend is a 3rd-year Computer Science undergraduate at NIT Karnataka, Surathkal in India. Like thousands of ambitious students worldwide, their dream is to pursue a Master's degree abroad in AI and Distributed Systems.&lt;/p&gt;
&lt;p&gt;A few weeks ago, I watched them spend an entire weekend buried under dozens of open browser tabs: &lt;strong&gt;DAAD&lt;/strong&gt; in Germany, &lt;strong&gt;EduCanada&lt;/strong&gt;, &lt;strong&gt;Fulbright&lt;/strong&gt; in the US, &lt;strong&gt;Chevening&lt;/strong&gt; and &lt;strong&gt;Commonwealth&lt;/strong&gt; in the UK. Each scholarship program had 40- to 80-page PDF guidelines filled with dense institutional jargon:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;"Does a 4-year Indian B.Tech degree count as final-year standing right now?"&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;"Does an 8.4 / 10 CGPA satisfy the 'first-class honours or 2:1 equivalent' threshold?"&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;"Does a&lt;/em&gt;…&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/guptapiyush16/Deadline-Buddy" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Repository:&lt;/strong&gt; &lt;a href="https://github.com/guptapiyush16/Deadline-Buddy" rel="noopener noreferrer"&gt;https://github.com/guptapiyush16/Deadline-Buddy&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tech Stack:&lt;/strong&gt; React 19, TypeScript, Vite, Tailwind CSS, Vitest (11/11 passing tests), Client-side PDF/DOCX Parsing (&lt;code&gt;pdfjs-dist&lt;/code&gt; + &lt;code&gt;mammoth&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero API Keys Required:&lt;/strong&gt; Runs 100% in-browser on client hardware with 0 external API dependencies.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;h3&gt;
  
  
  The Architecture: Open AI for Extraction, Code for Truth
&lt;/h3&gt;

&lt;p&gt;The single biggest engineering mistake in AI applications is letting a non-deterministic LLM make hidden decisions. If you ask an LLM: &lt;em&gt;"Does this student qualify for this scholarship?"&lt;/em&gt;, it will frequently hallucinate or give inconsistent answers.&lt;/p&gt;

&lt;p&gt;Deadline Buddy is built on a &lt;strong&gt;defensible, split-brain architecture&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Open-Source AI / Open Weights:&lt;/strong&gt; Used where language models excel — extracting structured JSON from messy PDFs/transcripts and explaining complex mismatches in plain English.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deterministic TypeScript Code:&lt;/strong&gt; Used where mathematics and logic belong — comparing GPA scales, academic years, and citizenship lists.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;[ Uploaded Documents (Resume / Transcripts / Certificates) ]&lt;br&gt;
                               │&lt;br&gt;
                               ▼&lt;br&gt;
    ┌─────────────────────────────────────────────────────┐&lt;br&gt;
    │ Open-Weight Extractor / Local AST Document Pipeline │&lt;br&gt;
    └──────────────────────────┬──────────────────────────┘&lt;br&gt;
                               │ (Structured JSON Profile + Quotes)&lt;br&gt;
                               ▼&lt;br&gt;
    ┌─────────────────────────────────────────────────────┐&lt;br&gt;
    │           Deterministic Code Rules Engine           │&lt;br&gt;
    │               (shared/eligibility.ts)               │&lt;br&gt;
    │                                                     │&lt;br&gt;
    │  Requirement           Student Profile      Result  │&lt;br&gt;
    │  ─────────────────────────────────────────────────  │&lt;br&gt;
    │  Citizenship: India    India                  ✓     │&lt;br&gt;
    │  Min GPA ≥ 7.5         8.4 / 10               ✓     │&lt;br&gt;
    │  Final Year Standing   3rd year of 4          ✕     │&lt;br&gt;
    └──────────────────────────┬──────────────────────────┘&lt;br&gt;
                               │&lt;br&gt;
                               ▼&lt;br&gt;
    ┌─────────────────────────────────────────────────────┐&lt;br&gt;
    │        Three-State Explainable Evaluation           │&lt;br&gt;
    │  🟢 Eligible    🟡 Needs Verification    🔴 Ineligible&lt;br&gt;
    └──────────────────────────┬──────────────────────────┘&lt;br&gt;
                               │&lt;br&gt;
                               ▼&lt;br&gt;
    ┌─────────────────────────────────────────────────────┐&lt;br&gt;
    │      Interactive "Why?" Evidence Drawer &amp;amp; Shortlist  │&lt;br&gt;
    │      • Exact supporting quotes from your documents  │&lt;br&gt;
    │      • Open AI Strategy Advisor with gap workarounds│&lt;br&gt;
    └─────────────────────────────────────────────────────┘&lt;/p&gt;

&lt;h3&gt;
  
  
  The Three Eligibility States
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;🟢 Eligible:&lt;/strong&gt; Every checkable published requirement strictly passes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🔴 Ineligible:&lt;/strong&gt; A hard rule failed (e.g. scholarship requires a completed Bachelor's degree, but the student is currently in year 3).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;🟡 Needs Verification (The Crucial Third State):&lt;/strong&gt; The scholarship requires subjective criteria (like "community leadership") or university nomination that cannot be conclusively proven from the transcript. &lt;strong&gt;We refuse to guess or hallucinate an approval when proof is missing.&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  The GPA Uncertainty Band
&lt;/h3&gt;

&lt;p&gt;International GPA scale conversions vary across universities. Deadline Buddy enforces an explicit uncertainty threshold:&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
typescript
const diff = studentGpaRatio - requiredGpaRatio;
if (diff &amp;gt;= GPA_UNCERTAINTY_BAND) return check(req, "pass", ...);
if (diff &amp;lt;= -GPA_UNCERTAINTY_BAND) return check(req, "fail", ...);
return check(req, "unknown", ...); // Refuse to guess borderline scores!

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

&lt;/div&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>hf26challenge</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
