<?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: Dhruv Jani</title>
    <description>The latest articles on DEV Community by Dhruv Jani (@dj29).</description>
    <link>https://dev.to/dj29</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%2F3743406%2F227d53d3-1443-4ceb-9fb8-98c02ff9e60f.jpg</url>
      <title>DEV Community: Dhruv Jani</title>
      <link>https://dev.to/dj29</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/dj29"/>
    <language>en</language>
    <item>
      <title>IND-TECH WEEKLY #2: Jio's IPO Gets a Festive-Season Window, Slice Takes a ~70% Haircut, and the Jobs Watch Section 🇮🇳</title>
      <dc:creator>Dhruv Jani</dc:creator>
      <pubDate>Sat, 05 Sep 2026 16:46:56 +0000</pubDate>
      <link>https://dev.to/dj29/ind-tech-weekly-2-jios-ipo-gets-a-festive-season-window-slice-takes-a-70-haircut-and-the-3dlg</link>
      <guid>https://dev.to/dj29/ind-tech-weekly-2-jios-ipo-gets-a-festive-season-window-slice-takes-a-70-haircut-and-the-3dlg</guid>
      <description>&lt;p&gt;Hey 👋&lt;/p&gt;

&lt;p&gt;Quick heads-up before anything else: &lt;strong&gt;Sessional-2 exams for Sem 7 kick in on my end starting this week, so I won't be able to reply to comments on this post for a bit.&lt;/strong&gt; Please don't take the silence personally — I'll circle back and reply to everyone once exams wrap up. 🙏&lt;/p&gt;

&lt;p&gt;Now, the actual backstory. Issue #1 got a solid response, and I added a &lt;strong&gt;Jobs Watch&lt;/strong&gt; section — hiring drives, layoffs, who's actually recruiting. I said I'd try it from Issue #2, so here it is.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This issue covers India tech news from Sunday, Aug 30 to Saturday, Sep 5.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  What's Inside
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;📰 The Big Headline — Jio's IPO Gets a Date Window&lt;/li&gt;
&lt;li&gt;💰 This Week in Funding&lt;/li&gt;
&lt;li&gt;🌐 The Bigger AI Picture&lt;/li&gt;
&lt;li&gt;💼 Jobs Watch — Stats, Layoffs, and Who's Hiring&lt;/li&gt;
&lt;li&gt;💻 Developer Corner — Open Right Now&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  - 🗳️ What Do You Want in Issue #3?
&lt;/h2&gt;

&lt;h2&gt;
  
  
  📰 The Big Headline — Jio's IPO Gets a Date Window
&lt;/h2&gt;

&lt;p&gt;Last issue, Jio Platforms had just cleared SEBI's approval — the last major hurdle before what's expected to be &lt;strong&gt;India's largest-ever IPO&lt;/strong&gt;. This week, we got the first real signal on timing.&lt;/p&gt;

&lt;p&gt;According to a report picked up by Outlook Business, Jio Platforms is now targeting the &lt;strong&gt;Navratri–Diwali window&lt;/strong&gt; (late October) to launch its IPO, which is expected to raise close to ₹37,800 crore (&lt;a href="https://www.outlookbusiness.com/corporate/reliances-jio-platforms-targets-navratri-diwali-window-for-4-bn-ipo-launch" rel="noopener noreferrer"&gt;source&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;A few things worth flagging:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SEBI cleared the share sale on August 28 — nearly two months after the draft papers were filed in June.&lt;/li&gt;
&lt;li&gt;This would be Reliance's first IPO in almost two decades.&lt;/li&gt;
&lt;li&gt;It could end up overtaking NSE's own planned listing, which is also in the pipeline for this festive season.
&lt;strong&gt;Why it matters for devs:&lt;/strong&gt; the festive window is a popular listing target because retail participation tends to be higher. If Jio does launch around Diwali, expect a fresh wave of "should I apply" posts and — more relevantly for us — renewed attention on Jio's developer and API ecosystem as the company builds its public-market story.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  💰 This Week in Funding
&lt;/h2&gt;

&lt;p&gt;Two funding stories this week pulled in completely opposite directions — which felt worth sitting with instead of just listing as two rows in a table.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Startup&lt;/th&gt;
&lt;th&gt;Raise&lt;/th&gt;
&lt;th&gt;What's Notable&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://inc42.com/buzz/slice-eyes-100-mn-funding-at-60-valuation-cut-as-bank-valuation-takes-shape/" rel="noopener noreferrer"&gt;slice&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;~$100M (in talks)&lt;/td&gt;
&lt;td&gt;At a $450–465M valuation — roughly a 70% cut from its 2022 peak of $1.5B, as it rebuilds itself as a digital bank after merging with North East Small Finance Bank&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://startuptalky.com/news/daily-indian-funding-roundup-key-news-4-september-2026/" rel="noopener noreferrer"&gt;Ultrahuman&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;$70M&lt;/td&gt;
&lt;td&gt;Led by Qualcomm Ventures; values the wearable health-tech maker at ~$365M — about 3x its 2023 valuation&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;💡 Sourcing angle:&lt;/strong&gt; slice was once one of India's flashier fintech unicorns. Ultrahuman was a comparatively quieter hardware bet. This week, the "quiet" one tripled its valuation while the "flashy" one raised at less than a third of its old price. Valuation isn't really a scoreboard for who's "winning" — it's a snapshot of investor confidence at one moment, shaped by very different business models (regulated banking vs. consumer hardware). Worth remembering next time a headline number gets thrown around as proof of anything.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Bringing back the Issue #1 sourcing check:&lt;/strong&gt; total weekly funding numbers depend a lot on which tracker you read and where they draw the week's line.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tracker&lt;/th&gt;
&lt;th&gt;Window&lt;/th&gt;
&lt;th&gt;Total Raised&lt;/th&gt;
&lt;th&gt;Deals&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://entrackr.com/report/weekly-funding-report-weekly-funding-report/funding-and-acquisitions-in-indian-startups-this-week-aug-31-sep-05-12495074" rel="noopener noreferrer"&gt;Entrackr&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Aug 31 – Sep 5&lt;/td&gt;
&lt;td&gt;$303.7M&lt;/td&gt;
&lt;td&gt;25 (5 growth-stage, 16 early-stage, 3 undisclosed)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://inc42.com/buzz/from-ultrahuman-to-comet-indian-startups-raised-over-177-mn-this-week/" rel="noopener noreferrer"&gt;Inc42&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Aug 31 – Sep 4&lt;/td&gt;
&lt;td&gt;$176.5M&lt;/td&gt;
&lt;td&gt;22&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;💡 Takeaway:&lt;/strong&gt; Same week, ~$127M apart. Some of that gap is just the extra day in Entrackr's window — but a chunk of it is which deals get classified as trackable "growth-stage" rounds versus left out. Same lesson as Issue #1: the "$X raised this week" headline is never as clean as it looks.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Also worth a mention: RentoMojo set its IPO price band this week, another name to watch as India's 2026 IPO pipeline gets busier (&lt;a href="https://www.newskart.com/india-startup-funding-update-from-august-10-to-september-4-2026-big-cheques-ai-bets-and-founders-to-watch/" rel="noopener noreferrer"&gt;source&lt;/a&gt;).
&lt;/h2&gt;

&lt;h2&gt;
  
  
  🌐 The Bigger AI Picture
&lt;/h2&gt;

&lt;p&gt;Nothing dramatically new dropped on this front this week either, but two things are worth updating from Issue #1's numbers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Compute capacity is scaling up faster than the February figures suggested.&lt;/strong&gt; Issue #1 mentioned 38,000+ GPUs subsidized under the IndiaAI Mission. That number has already crossed &lt;strong&gt;45,000 GPUs&lt;/strong&gt; as of June 2026 (&lt;a href="https://helloentrepreneurs.com/technology/india-ai-semiconductor-bet-96870/" rel="noopener noreferrer"&gt;source&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SEMICON India 2026&lt;/strong&gt; is happening &lt;strong&gt;September 17–19&lt;/strong&gt; in New Delhi, themed "Silicon to Systems." Worth flagging because the framing has shifted — earlier policy conversation was about attracting individual chip fabs, this year's theme is explicitly about connecting component manufacturing, design, AI infrastructure, and downstream products into one value chain (same source).
&lt;strong&gt;Why it matters for devs:&lt;/strong&gt; if you're anywhere near hardware, embedded systems, or AI infra, SEMICON India is the one to watch this month — it's less about announcements and more about where India's compute-to-application pipeline is actually headed.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  💼 Jobs Watch — Stats, Layoffs, and Who's Hiring
&lt;/h2&gt;

&lt;p&gt;This is new, so bear with me while I figure out the right format. For Issue #2, I'm splitting it into three parts: the big-picture stats, this week's layoffs, and who's actually hiring right now.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Big Picture
&lt;/h3&gt;

&lt;p&gt;Nasscom's own Annual Strategic Review projects India's tech industry to cross $315 billion in FY26 revenue — up 6.1% — while adding a net &lt;strong&gt;1.35 lakh jobs&lt;/strong&gt;, taking total direct employment to roughly &lt;strong&gt;59.5 lakh&lt;/strong&gt; (&lt;a href="https://www.businesstoday.in/amp/latest/corporate/story/it-industry-likely-to-hire-135000-employees-in-fy26-projects-nasscom-517760-2026-02-24" rel="noopener noreferrer"&gt;source&lt;/a&gt;). On paper, the industry is still growing.&lt;/p&gt;

&lt;p&gt;But that headline number hides a pretty split reality underneath it once you look at individual companies:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Company&lt;/th&gt;
&lt;th&gt;This Cycle&lt;/th&gt;
&lt;th&gt;Signal&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.peoplematters.in/news/performance-management/tcs-announces-12000-layoffs-by-fy26-in-strategic-workforce-realignment-42242" rel="noopener noreferrer"&gt;TCS&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Cutting ~12,000 roles (2% of its workforce) through FY26, mostly mid- and senior-level&lt;/td&gt;
&lt;td&gt;Still drawing scrutiny from Karnataka's labour ministry and MeitY&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.businesstoday.in/technology/story/wipro-hits-pause-on-campus-hiring-as-ai-shift-forces-526096-2026-04-17" rel="noopener noreferrer"&gt;Wipro&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;~7,500 freshers hired in FY26; no fresher hiring target set for FY27&lt;/td&gt;
&lt;td&gt;Sharpest freeze among the majors right now&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.outlookbusiness.com/amp/story/corporate/infosys-plans-to-hire-20000-freshers-in-fy27-even-as-quarterly-headcount-dips" rel="noopener noreferrer"&gt;Infosys&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Crossed 20,000 fresher hires in FY26; planning 20,000+ more for FY27&lt;/td&gt;
&lt;td&gt;Most aggressive fresher hirer among the tier-1 IT majors&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.freepressjournal.in/amp/tech/cognizant-plans-to-hire-25000-freshers-in-2026-cfo-jatin-dalal-confirms" rel="noopener noreferrer"&gt;Cognizant&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Targeting 24,000–25,000 fresh graduates in 2026 — up ~20% from last year&lt;/td&gt;
&lt;td&gt;Betting on a "broader pyramid," using AI to make junior engineers billable faster&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;TCS's official line on its own cuts: &lt;strong&gt;"TCS is on a journey to become a Future-Ready organisation."&lt;/strong&gt; Wipro's CHRO Saurabh Govil was more blunt about fresher hiring for the year ahead: &lt;strong&gt;"We don't have any target for fresher hiring for the next fiscal."&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;(Note: TCS's 12,000-role cut was originally announced in July 2025 — this is an update on an ongoing FY26 process, not a fresh development from this week's window.)&lt;/em&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;💡 Takeaway:&lt;/strong&gt; Same industry, same week, wildly different signals depending on which company's earnings call you read. If you only follow one company's hiring news, you're getting a skewed picture of the fresher job market — good or bad.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;
  
  
  Layoffs This Week
&lt;/h3&gt;

&lt;p&gt;The one that actually landed within our Aug 30–Sep 5 window: &lt;strong&gt;Uber is cutting around 200–250 jobs in India&lt;/strong&gt;, as part of a global restructuring eliminating roughly 3,300 roles (about 10% of its global workforce) (&lt;a href="https://inc42.com/buzz/uber-to-lay-off-200-250-employees-in-india-amid-global-restructuring/" rel="noopener noreferrer"&gt;source&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;A few details:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;This is Uber India's second round of cuts in six months — it cut around 80 jobs earlier this year.&lt;/li&gt;
&lt;li&gt;The cuts are hitting technology and operations teams, with close to half of the AI Solutions team reportedly affected.&lt;/li&gt;
&lt;li&gt;Uber maintains this isn't a retreat from India — it says it's actually expanding its regional footprint here to run its Asia-Pacific mobility business.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Who's Actually Hiring
&lt;/h3&gt;

&lt;p&gt;Zooming out from the IT majors table above, the more interesting fresher demand right now is sitting in GCCs (Global Capability Centres) — India-based R&amp;amp;D and delivery arms of multinationals, as opposed to services vendors like TCS or Wipro. GCCs are projected to add over 5 lakh jobs in 2026 alone, with names like Google India, Microsoft IDC, Adobe India R&amp;amp;D, SAP Labs India, Salesforce India, and JPMorgan Chase actively hiring freshers, concentrated mostly in Bengaluru and Hyderabad.&lt;/p&gt;

&lt;p&gt;If you're a fresher reading this and only checking TCS/Infosys/Wipro placement portals, you might be missing where a decent chunk of the actual growth is happening right now.&lt;/p&gt;


&lt;h2&gt;
  
  
  💻 Developer Corner — Open Right Now
&lt;/h2&gt;
&lt;h3&gt;
  
  
  🏗️ Hacktivate 2.0
&lt;/h3&gt;

&lt;p&gt;A 36-hour national hackathon by JIMS Engineering Management Technical Campus, Greater Noida. &lt;strong&gt;Registration closes September 12.&lt;/strong&gt; Open to Indian college students and early-stage tech enthusiasts, teams of 2–4.&lt;/p&gt;

&lt;p&gt;The listing advertises an "up to ₹15 lakh" prize and benefits pool, but the actual cash prizes are more modest — ₹20,000 / ₹12,000 / ₹8,000 for 1st, 2nd, and 3rd place, with the rest of that ₹15L figure made up of goodies, sponsor credits, and mentorship rather than cash (&lt;a href="https://www.startupgrantsindia.com/competitions/hacktivate-20" rel="noopener noreferrer"&gt;source&lt;/a&gt;). &lt;a href="https://www.startupgrantsindia.com/competitions/hacktivate-20" rel="noopener noreferrer"&gt;Check listings →&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;💡 Heads up:&lt;/strong&gt; this is exactly the kind of gap between a headline prize figure and actual cash payout that's easy to miss if you don't read past the poster. Worth doing for the 36-hour build experience and mentorship either way — just don't go in expecting ₹15L in your account if you win.&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  🗳️ What Do You Want in Issue #3?
&lt;/h2&gt;

&lt;p&gt;A few quick questions, since this format is still finding its shape:&lt;/p&gt;

&lt;p&gt;1️⃣ &lt;strong&gt;Was the Jobs Watch section useful in this format&lt;/strong&gt; — split into stats / layoffs / who's hiring — or would you rather see it as one flowing section?&lt;/p&gt;

&lt;p&gt;2️⃣ &lt;strong&gt;Anything you want more of?&lt;/strong&gt; More funding deep-dives, more AI/infra coverage, more on IPOs as the festive season pipeline builds up — drop it in the comments.&lt;/p&gt;

&lt;p&gt;As mentioned up top, I won't be able to jump into the comments this week because of Sessional-2 exams, but I will read every single one and reply once I'm back. Thanks for bearing with the slightly newsletter-shaped chaos of building this in public.&lt;/p&gt;



&lt;p&gt;&lt;em&gt;And in case you missed it — my last post picked up way more traction than I expected. Check it out below if you haven't already:&lt;/em&gt;&lt;/p&gt;


&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/dj29/the-stack-nobody-picks-might-be-the-one-that-picks-you-473c" class="crayons-story__hidden-navigation-link"&gt;The Stack Nobody Picks Might Be the One That Picks You&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
      &lt;a href="https://dev.to/dj29/the-stack-nobody-picks-might-be-the-one-that-picks-you-473c" class="crayons-article__context-note crayons-article__context-note__feed"&gt;&lt;p&gt;Readers debate underrated tech stacks&lt;/p&gt;

&lt;/a&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/dj29" class="crayons-avatar  crayons-avatar--l  "&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%2Fuser%2Fprofile_image%2F3743406%2F227d53d3-1443-4ceb-9fb8-98c02ff9e60f.jpg" alt="dj29 profile" class="crayons-avatar__image" width="96" height="96"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/dj29" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Dhruv Jani
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Dhruv Jani
                &lt;a href="/++"&gt;&lt;img alt="Subscriber" class="subscription-icon" src="https://assets.dev.to/assets/subscription-icon-805dfa7ac7dd660f07ed8d654877270825b07a92a03841aa99a1093bd00431b2.png" width="166" height="102"&gt;&lt;/a&gt;
                
              
              &lt;div id="story-author-preview-content-4547474" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/dj29" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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%2Fuser%2Fprofile_image%2F3743406%2F227d53d3-1443-4ceb-9fb8-98c02ff9e60f.jpg" class="crayons-avatar__image" alt="" width="96" height="96"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Dhruv Jani&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/dj29/the-stack-nobody-picks-might-be-the-one-that-picks-you-473c" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Sep 1&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/dj29/the-stack-nobody-picks-might-be-the-one-that-picks-you-473c" id="article-link-4547474"&gt;
          The Stack Nobody Picks Might Be the One That Picks You
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag crayons-tag--filled  " href="/t/discuss"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;discuss&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/csharp"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;csharp&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/devjournal"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;devjournal&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/career"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;career&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/dj29/the-stack-nobody-picks-might-be-the-one-that-picks-you-473c" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/exploding-head-daceb38d627e6ae9b730f36a1e390fca556a4289d5a41abb2c35068ad3e2c4b5.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;55&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;span class="crayons-story__favorited"&gt;
              &lt;span class="favorited-marker"&gt;
                &lt;span&gt;
                  

                &lt;/span&gt;
                &lt;span class="hidden"&gt;
                  

                &lt;/span&gt;
              &lt;/span&gt;
            &lt;/span&gt;
            &lt;a href="https://dev.to/dj29/the-stack-nobody-picks-might-be-the-one-that-picks-you-473c#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              52&lt;span class="hidden s:inline"&gt;&amp;nbsp;comments&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            5 min read
          &lt;/small&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


&lt;p&gt;🇮🇳 Follow for the next drop — Indian tech doesn't slow down.&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__user ltag__user__id__3743406"&gt;
    &lt;a href="/dj29" class="ltag__user__link profile-image-link"&gt;
      &lt;div class="ltag__user__pic"&gt;
        &lt;img src="https://media2.dev.to/dynamic/image/width=150,height=150,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3743406%2F227d53d3-1443-4ceb-9fb8-98c02ff9e60f.jpg" alt="dj29 image"&gt;
      &lt;/div&gt;
    &lt;/a&gt;
  &lt;div class="ltag__user__content"&gt;
    &lt;h2&gt;
&lt;a class="ltag__user__link" href="/dj29"&gt;Dhruv Jani&lt;/a&gt;Follow
&lt;/h2&gt;
    &lt;div class="ltag__user__summary"&gt;
      &lt;a class="ltag__user__link" href="/dj29"&gt;Upcoming Trainee Engineer @ Simform 🚀
Building, experimenting, and writing my way through tech.
AI • Web • Open Source • Challenges
If I find something interesting, I'll probably write about it. 😄&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


</description>
      <category>india</category>
      <category>news</category>
      <category>career</category>
      <category>discuss</category>
    </item>
    <item>
      <title>The Stack Nobody Picks Might Be the One That Picks You</title>
      <dc:creator>Dhruv Jani</dc:creator>
      <pubDate>Tue, 01 Sep 2026 14:02:25 +0000</pubDate>
      <link>https://dev.to/dj29/the-stack-nobody-picks-might-be-the-one-that-picks-you-473c</link>
      <guid>https://dev.to/dj29/the-stack-nobody-picks-might-be-the-one-that-picks-you-473c</guid>
      <description>&lt;p&gt;Nobody chooses .NET.&lt;/p&gt;

&lt;p&gt;Not as a student, at least. You hear "backend" and the room splits into Spring Boot and Django camps — maybe Express if someone's feeling adventurous. .NET? That's the framework your seniors warned you about, the one companies use but colleges don't hype, and the one that shows up in job listings you scroll past because you've never touched C# in your life.&lt;/p&gt;

&lt;p&gt;I chose it anyway. Twice. And I'd do it again.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Everyone Avoids It
&lt;/h2&gt;

&lt;p&gt;Let's be honest about why .NET has the reputation it does.&lt;/p&gt;

&lt;p&gt;First — the ecosystem is genuinely harder to wrap your head around. When your architecture breaks in Django or Spring, there's usually a clear file to check, a well-known error pattern, a Stack Overflow thread with 400 upvotes. With .NET? The debugging trail is less obvious. The framework does &lt;em&gt;a lot&lt;/em&gt; for you, which is great until something goes wrong three layers deep in middleware you didn't know existed.&lt;/p&gt;

&lt;p&gt;Second — nobody around you is practicing it. When fewer people in your batch are working with a stack, there's no study group, no "hey can you check why my controller isn't routing" at 2 AM. You're mostly on your own.&lt;/p&gt;

&lt;p&gt;Third — the perception of fewer opportunities. Less hype means fewer students learning it, which means even &lt;em&gt;fewer&lt;/em&gt; students bothering to learn it. It's a cycle that feeds itself.&lt;/p&gt;

&lt;p&gt;So yeah, I get why people avoid it. The question is — what happens when you &lt;em&gt;don't&lt;/em&gt;?&lt;/p&gt;

&lt;h2&gt;
  
  
  What C# Actually Is (And Why It's Not What You Think)
&lt;/h2&gt;

&lt;p&gt;Here's the thing nobody tells you in college: &lt;strong&gt;C# is what you'd get if C++ and Java had a kid and that kid actually turned out well.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Think about it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Syntax from C++&lt;/strong&gt; — if you've written C++ in your DSA courses, C# feels instantly familiar. The curly braces, the type system, the way classes work — it clicks faster than you'd expect.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cross-platform compatibility from Java&lt;/strong&gt; — .NET Core (now just .NET) runs on Windows, Linux, macOS. The "it's a Windows-only thing" argument died years ago.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Package ecosystem like Java&lt;/strong&gt; — NuGet is to C# what Maven is to Java. Entity Framework, ASP.NET Identity, background services — you're not reinventing the wheel.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Modern language features&lt;/strong&gt; — LINQ, async/await (C# had it before JavaScript made it cool), pattern matching, nullable reference types. The language has been quietly evolving while people weren't paying attention.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It's not the dinosaur people make it out to be. It's more like the quiet kid in class who's been getting better grades than everyone but nobody noticed because they weren't loud about it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Real Reason I Picked It
&lt;/h2&gt;

&lt;p&gt;I'll be completely honest here — part of why I went for .NET was &lt;strong&gt;low competition&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;When you're a fresher with no LeetCode grind and no club presidencies (if you've read &lt;a href="https://dev.to/dj29/how-i-got-a-job-offer-as-a-fresher-in-an-ai-fearing-market-without-leetcode-or-club-leaderships-2gig"&gt;Issue 1&lt;/a&gt;, you know the full story), you start thinking strategically. Everyone and their roommate has a MERN project on GitHub. Everyone's got a Spring Boot REST API. But .NET? Barely anyone in my batch had even &lt;em&gt;one&lt;/em&gt; open-source project in it.&lt;/p&gt;

&lt;p&gt;I had exactly one. A college assignment.&lt;/p&gt;

&lt;h2&gt;
  
  
  EduResolve — The Assignment That Became a Résumé Line
&lt;/h2&gt;

&lt;p&gt;In sem 5, one of three projects I built was for our Web Application Development course. My team built &lt;strong&gt;EduResolve&lt;/strong&gt; — a university grievance management system using ASP.NET Core MVC, Entity Framework Core, and SQL Server.&lt;/p&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/Edu-Trinity" rel="noopener noreferrer"&gt;
        Edu-Trinity
      &lt;/a&gt; / &lt;a href="https://github.com/Edu-Trinity/EduResolve" rel="noopener noreferrer"&gt;
        EduResolve
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A secure university grievance management system built with ASP.NET Core MVC. Features strict Role-Based Access Control (RBAC), end-to-end state transition tracking, and department-aware dashboards powered by Entity Framework and SQL Server.
    &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;EduResolve – Startup Pitch Web Application&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;EduResolve is our proof-of-concept startup project for the Web Application Development course. It applies the MVC pattern in ASP.NET Core to solve a real campus problem: fragmented complaint handling between students, faculty, and department leadership. The platform offers a streamlined channel to submit, track, triage, and escalate academic or administrative complaints with clear accountability.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;1. Startup Pitch Snapshot&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Problem&lt;/strong&gt;: Students lack transparency and timely feedback once a complaint leaves their hands; faculty and HODs juggle manual tracking and miss escalations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Solution&lt;/strong&gt;: EduResolve centralizes complaint workflows, automates reminders and escalations, and gives each persona a focused dashboard to act quickly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unique Edge&lt;/strong&gt;: Department-aware routing plus an automated escalation service that highlights unattended items, making it easy to prove measurable response times to stakeholders.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;2. Core Features&lt;/h2&gt;
&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Role-Based Dashboards&lt;/strong&gt; – Personas (Student, Teacher, HOD, Admin) see tailored metrics and action items, improving decision-making…&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/Edu-Trinity/EduResolve" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/wTcqiJuvsfs" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Was it a production-ready SaaS? No. It was a semester assignment with role-based dashboards, a complaint lifecycle engine, and a background escalation service. But here's what made it matter:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It was &lt;strong&gt;on GitHub, public, documented, and working&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;It used a stack &lt;strong&gt;almost nobody in my year had touched&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;It showed I could work with &lt;strong&gt;enterprise patterns&lt;/strong&gt; — RBAC, EF Core migrations, Identity auth, hosted services — not just CRUD tutorials.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That one project, sitting quietly on my GitHub while I was busy with hackathons and DEV challenges in other stacks, ended up being the .NET proof on my resume that got me noticed for my internship and eventually my fresher role at Simform.&lt;/p&gt;

&lt;p&gt;I said this in my job post and I'll say it again: &lt;strong&gt;you genuinely don't know which project takes you to the opportunity you want.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Uncomfortable Truth About "Popular" Stacks
&lt;/h2&gt;

&lt;p&gt;Here's something I've been thinking about since placements ended:&lt;/p&gt;

&lt;p&gt;The stacks that &lt;em&gt;feel&lt;/em&gt; cool and popular might not actually be the best strategic move for &lt;em&gt;you&lt;/em&gt;. When 200 people in your batch all have React + Node projects, your React + Node project has to be &lt;em&gt;exceptional&lt;/em&gt; to stand out. But when you're one of three people with a .NET project? Even a solid one gets a second look.&lt;/p&gt;

&lt;p&gt;This isn't about .NET being better than everything else — it's about understanding that the job market isn't just about what you know, it's about what you know &lt;em&gt;relative to who else is applying&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;When fewer candidates around you are targeting a stack that still has real industry use, your odds of standing out improve. Simple math.&lt;/p&gt;

&lt;h2&gt;
  
  
  So, Should You Learn .NET?
&lt;/h2&gt;

&lt;p&gt;Honestly? Only if you're willing to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Debug things with less hand-holding from the internet&lt;/li&gt;
&lt;li&gt;Be the only person in your friend group who knows what &lt;code&gt;IServiceCollection&lt;/code&gt; is&lt;/li&gt;
&lt;li&gt;Explain to people at hackathons that yes, C# is a real language and no, it's not the same as C&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But if you're a fresher looking for an edge — especially if you don't have the LeetCode profile or the club titles to compete on the traditional track — picking the road less traveled is a legitimate strategy. It worked for me.&lt;/p&gt;

&lt;p&gt;One college assignment. One "unpopular" stack. One internship. One job.&lt;/p&gt;

&lt;p&gt;Sometimes the stack nobody picks is the one that picks you.&lt;/p&gt;

&lt;p&gt;This is Issue 3 of &lt;strong&gt;The DEV Guide I Wish Existed&lt;/strong&gt; — a series where I write down the stuff I wish someone had told me before I figured it out the hard way.&lt;/p&gt;

&lt;p&gt;If you're a student who picked an "unpopular" stack and it actually worked out — or if you're currently debating whether to go against the herd — I'd love to hear your story in the comments.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Disclaimer: So, guys this is my first post using AI to enhance final editing like bolds, liquid tags, ... and removing grammar mistakes. If you don't like this I'll go back to my original writing.😄&lt;/em&gt;&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>csharp</category>
      <category>devjournal</category>
      <category>career</category>
    </item>
    <item>
      <title>IND-TECH WEEKLY #1: Jio Files for India's Biggest-Ever IPO, Navi Bags $100M, and What Devs Should Know 🇮🇳</title>
      <dc:creator>Dhruv Jani</dc:creator>
      <pubDate>Sun, 30 Aug 2026 06:10:18 +0000</pubDate>
      <link>https://dev.to/dj29/ind-tech-weekly-1-jio-files-for-indias-biggest-ever-ipo-navi-bags-100m-and-what-devs-should-204h</link>
      <guid>https://dev.to/dj29/ind-tech-weekly-1-jio-files-for-indias-biggest-ever-ipo-navi-bags-100m-and-what-devs-should-204h</guid>
      <description>&lt;p&gt;Hey 👋&lt;/p&gt;

&lt;p&gt;Quick backstory — my last post on &lt;a href="https://dev.to/dj29/what-happens-after-you-win-a-dev-challenge-a-complete-guide-to-getting-paid-3f8n"&gt;getting paid after winning a DEV Challenge&lt;/a&gt; did way better than I expected. It even got the &lt;strong&gt;Community Resource&lt;/strong&gt; badge from the editorial team (still buzzing from that, genuinely — thank you).&lt;/p&gt;

&lt;p&gt;That post has now rotated out of the active feed, so I figured: why not try something new?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Welcome to IND-TECH WEEKLY — Issue #1.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Think of it as a scannable newsletter for the biggest Indian tech, startup, and developer news from the past week. Every claim is linked to a real source. No fluff. You read it in 4 minutes and walk away knowing what happened.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;🧪 This is an experiment.&lt;/strong&gt; If this is useful → it becomes a weekly series. If not → it stays a one-off. You decide. Jump to the vote ↓&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  What's Inside
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;📰 The Big Headline — Jio's IPO&lt;/li&gt;
&lt;li&gt;💰 This Week in Funding&lt;/li&gt;
&lt;li&gt;🌐 The Bigger AI Picture&lt;/li&gt;
&lt;li&gt;💻 Developer Corner — Open Opportunities&lt;/li&gt;
&lt;li&gt;🗳️ Should This Continue?&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  📰 The Big Headline — Jio's IPO
&lt;/h2&gt;

&lt;p&gt;Jio Platforms got &lt;strong&gt;SEBI approval&lt;/strong&gt; for its IPO on August 28.&lt;/p&gt;

&lt;p&gt;That's the last major regulatory hurdle before what's expected to become &lt;strong&gt;India's largest-ever public listing&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Here's what we know (&lt;a href="https://businessnewsthisweek.com/business/jio-platforms-wins-sebi-approval-sets-stage-for-indias-biggest-ever-ipo/" rel="noopener noreferrer"&gt;source&lt;/a&gt;):&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Detail&lt;/th&gt;
&lt;th&gt;Number&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Fresh equity shares&lt;/td&gt;
&lt;td&gt;~27 crore (no offer-for-sale — this is all new capital)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Expected raise&lt;/td&gt;
&lt;td&gt;₹37,700 crore (~$3.8 billion)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Expected valuation&lt;/td&gt;
&lt;td&gt;~$137 billion&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The DRHP was filed back in June. SEBI's clearance landed August 28. What's left — pricing and listing timeline — hasn't been announced yet.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters for devs:&lt;/strong&gt; Jio isn't just a telco anymore. Jio Platforms sits on top of 5G infrastructure, JioCloud, JioAI, and the entire digital services stack that touches 450M+ subscribers. An IPO this size will likely accelerate their developer platform and API play. Worth keeping on your radar.&lt;/p&gt;




&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  💰 This Week in Funding
&lt;/h2&gt;

&lt;p&gt;Here's something most roundups skip over — &lt;strong&gt;the numbers don't always agree.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For the week of Aug 17–22, three trackers reported three different totals:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tracker&lt;/th&gt;
&lt;th&gt;Total Raised&lt;/th&gt;
&lt;th&gt;Deals&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://entrackr.com/report/weekly-funding-report-weekly-funding-report/funding-and-acquisitions-in-indian-startups-this-week-aug-17-aug-22-12412429" rel="noopener noreferrer"&gt;Entrackr&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;$198.3M&lt;/td&gt;
&lt;td&gt;21&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://inc42.com/buzz/from-navi-to-bookmyshow-indian-startups-raised-over-233-mn-this-week/" rel="noopener noreferrer"&gt;Inc42&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;$233.2M&lt;/td&gt;
&lt;td&gt;19&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://indianstartupnews.com/funding/indian-startups-raised-over-469-million-from-august-17-to-august-22-2026-wispr-flow-tops-the-list-12416081" rel="noopener noreferrer"&gt;IndianStartupNews&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;$469.8M&lt;/td&gt;
&lt;td&gt;20&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The big gap? That last number includes &lt;strong&gt;Wispr Flow's $280M raise&lt;/strong&gt; — which not every tracker counts as an "Indian" startup. Different trackers, different cutoff dates, different definitions.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;💡 Takeaway:&lt;/strong&gt; Next time you see a headline saying "Indian startups raised $X this week" — check the source. The number changes depending on who's counting.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  The headline everyone agrees on:
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Navi&lt;/strong&gt; (Sachin Bansal's fintech) raised &lt;strong&gt;$100 million from Prosus&lt;/strong&gt; — its &lt;a href="https://techcrunch.com/2026/08/19/sachin-bansals-fintech-navi-raises-first-outside-capital-with-100m-prosus-investment/" rel="noopener noreferrer"&gt;first-ever outside funding round&lt;/a&gt; after running on founder capital alone for eight years.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Valuation: ~$1.3 billion&lt;/li&gt;
&lt;li&gt;Navi Finserv (lending arm) has crossed ₹13,000 crore in AUM&lt;/li&gt;
&lt;li&gt;Company is also prepping for its own IPO&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Eight years of self-funding before taking institutional money. That's a rare playbook in 2026.&lt;/p&gt;




&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🌐 The Bigger AI Picture
&lt;/h2&gt;

&lt;p&gt;Nothing brand-new dropped on this front this week, but here's the context worth knowing if you're building in AI or keeping an eye on India's infra push:&lt;/p&gt;

&lt;p&gt;Back in February, at the &lt;strong&gt;India AI Impact Summit&lt;/strong&gt;, IT Minister Ashwini Vaishnaw &lt;a href="https://techcrunch.com/2026/02/17/india-bids-to-attract-over-200b-in-ai-infrastructure-investment-by-2028/" rel="noopener noreferrer"&gt;outlined a plan to attract $200B+ in AI infrastructure investment by 2028&lt;/a&gt; — on top of ~$70B already committed by Amazon, Google, and Microsoft.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The government's own bet:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;IndiaAI Mission&lt;/strong&gt; — $1.25 billion budget&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;38,000+ GPUs&lt;/strong&gt; subsidized for startups and researchers&lt;/li&gt;
&lt;li&gt;Goal: make compute accessible so the bottleneck isn't "can you afford GPUs?" but "what can you build?"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're a developer working on AI in India (or planning to), this is the landscape your work sits in. File it under "useful background."&lt;/p&gt;




&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  💻 Developer Corner — Open Right Now
&lt;/h2&gt;

&lt;p&gt;Real opportunities, not just announcements:&lt;/p&gt;

&lt;h3&gt;
  
  
  🏆 NASSCOM AI Code Sarathi
&lt;/h3&gt;

&lt;p&gt;National agentic AI hackathon. &lt;strong&gt;₹10 lakh prize pool.&lt;/strong&gt; Part of NASSCOM's push to upskill 1.5 lakh developers. If you're already building with agent frameworks (LangChain, CrewAI, AutoGen, etc.), this is your lane.&lt;/p&gt;

&lt;h3&gt;
  
  
  🏗️ NASSCOM CoE AI Innovation Challenge
&lt;/h3&gt;

&lt;p&gt;Build a foreign-object-detection solution for a large port terminal operator's bulk cargo unloaders. This isn't a demo day — there's a &lt;strong&gt;paid Proof-of-Concept&lt;/strong&gt; on offer if selected. Real deployment. &lt;a href="https://startupfunds.in/type/competition" rel="noopener noreferrer"&gt;Check listings →&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  🇦🇪 UAE-India Start-up Series 2.0
&lt;/h3&gt;

&lt;p&gt;Up to &lt;strong&gt;₹56.75 lakh via SAFE note&lt;/strong&gt; + mentorship + UAE market-entry support through Hub71.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;⚠️ &lt;strong&gt;Heads up:&lt;/strong&gt; The deadline is &lt;strong&gt;August 30 — that's today.&lt;/strong&gt; If you're reading this later, this round has likely closed. Verify on &lt;a href="https://www.startupgrantsindia.com/uae-india-startup-series" rel="noopener noreferrer"&gt;the official listing&lt;/a&gt; before applying.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🗳️ Should This Continue?
&lt;/h2&gt;

&lt;p&gt;This is genuinely a pilot. Your answers decide what happens next:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Four things I want to know:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;1️⃣ &lt;strong&gt;Did the sourcing angle help?&lt;/strong&gt; (Like calling out the funding-number discrepancy above — useful context, or more detail than you wanted?)&lt;/p&gt;

&lt;p&gt;2️⃣ &lt;strong&gt;Should this become a weekly series?&lt;/strong&gt; Drop a 🔥 reaction if yes.&lt;/p&gt;

&lt;p&gt;3️⃣ &lt;strong&gt;Got a better name than "IND-TECH WEEKLY"?&lt;/strong&gt; I'm not married to it. Throw suggestions in the comments.&lt;/p&gt;

&lt;p&gt;4️⃣ &lt;strong&gt;Would you want a "Jobs Watch" section?&lt;/strong&gt; Hiring drives, layoffs, who's recruiting in Indian tech — thinking of adding it from Issue #2.&lt;/p&gt;

&lt;p&gt;Issue #2 depends entirely on what you tell me here. 👇&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Thanks for reading the pilot. If you found this useful, a reaction or bookmark helps more people find it. And if you missed my previous post — here's the one that started it all:&lt;/em&gt;&lt;/p&gt;


&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/dj29/what-happens-after-you-win-a-dev-challenge-a-complete-guide-to-getting-paid-3f8n" class="crayons-story__hidden-navigation-link"&gt;What Happens After You Win a DEV Challenge? A Complete Guide to Getting Paid&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
      &lt;a href="https://dev.to/dj29/what-happens-after-you-win-a-dev-challenge-a-complete-guide-to-getting-paid-3f8n" class="crayons-article__context-note crayons-article__context-note__feed"&gt;&lt;p&gt;Details the MLH payout timeline and FEMA steps&lt;/p&gt;

&lt;/a&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/dj29" class="crayons-avatar  crayons-avatar--l  "&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%2Fuser%2Fprofile_image%2F3743406%2F227d53d3-1443-4ceb-9fb8-98c02ff9e60f.jpg" alt="dj29 profile" class="crayons-avatar__image" width="96" height="96"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/dj29" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Dhruv Jani
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Dhruv Jani
                &lt;a href="/++"&gt;&lt;img alt="Subscriber" class="subscription-icon" src="https://assets.dev.to/assets/subscription-icon-805dfa7ac7dd660f07ed8d654877270825b07a92a03841aa99a1093bd00431b2.png" width="166" height="102"&gt;&lt;/a&gt;
                
              
              &lt;div id="story-author-preview-content-4519645" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/dj29" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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%2Fuser%2Fprofile_image%2F3743406%2F227d53d3-1443-4ceb-9fb8-98c02ff9e60f.jpg" class="crayons-avatar__image" alt="" width="96" height="96"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Dhruv Jani&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/dj29/what-happens-after-you-win-a-dev-challenge-a-complete-guide-to-getting-paid-3f8n" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Aug 29&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/dj29/what-happens-after-you-win-a-dev-challenge-a-complete-guide-to-getting-paid-3f8n" id="article-link-4519645"&gt;
          What Happens After You Win a DEV Challenge? A Complete Guide to Getting Paid
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag crayons-tag--filled  " href="/t/discuss"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;discuss&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/devjournal"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;devjournal&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/career"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;career&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/hackathon"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;hackathon&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/dj29/what-happens-after-you-win-a-dev-challenge-a-complete-guide-to-getting-paid-3f8n" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/exploding-head-daceb38d627e6ae9b730f36a1e390fca556a4289d5a41abb2c35068ad3e2c4b5.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;46&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/dj29/what-happens-after-you-win-a-dev-challenge-a-complete-guide-to-getting-paid-3f8n#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              26&lt;span class="hidden s:inline"&gt;&amp;nbsp;comments&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            7 min read
          &lt;/small&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>india</category>
      <category>news</category>
      <category>career</category>
      <category>discuss</category>
    </item>
    <item>
      <title>What Happens After You Win a DEV Challenge? A Complete Guide to Getting Paid</title>
      <dc:creator>Dhruv Jani</dc:creator>
      <pubDate>Sat, 29 Aug 2026 07:03:14 +0000</pubDate>
      <link>https://dev.to/dj29/what-happens-after-you-win-a-dev-challenge-a-complete-guide-to-getting-paid-3f8n</link>
      <guid>https://dev.to/dj29/what-happens-after-you-win-a-dev-challenge-a-complete-guide-to-getting-paid-3f8n</guid>
      <description>&lt;p&gt;Winning is the part everyone posts about. The two months after — the part where a cash prize actually turns into money in your account — is the part nobody writes down anywhere. I looked for a guide before my first win and didn't find one, so this is me being the guide I needed.&lt;/p&gt;

&lt;p&gt;For context, this is based on winning DEV's &lt;strong&gt;GitHub Finish-Up-A-Thon Challenge&lt;/strong&gt; with ShelfTalk, a college project I revived using GitHub Copilot. Prize was $300 USD, a DEV++ membership, and an exclusive badge. If you want the receipts instead of just my word for it:&lt;/p&gt;


&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/devteam/congrats-to-the-github-finish-up-a-thon-challenge-winners-1k0h" class="crayons-story__hidden-navigation-link"&gt;Congrats to the GitHub Finish-Up-A-Thon Challenge Winners!&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
      &lt;a href="https://dev.to/devteam/congrats-to-the-github-finish-up-a-thon-challenge-winners-1k0h" class="crayons-article__context-note crayons-article__context-note__feed"&gt;&lt;p&gt;Abandoned side projects brought back to life&lt;/p&gt;

&lt;/a&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;
          &lt;a class="crayons-logo crayons-logo--l" href="/devteam"&gt;
            &lt;img alt="The DEV Team logo" 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%2Forganization%2Fprofile_image%2F1%2Fd908a186-5651-4a5a-9f76-15200bc6801f.jpg" class="crayons-logo__image" width="800" height="800"&gt;
          &lt;/a&gt;

          &lt;a href="/jess" class="crayons-avatar  crayons-avatar--s absolute -right-2 -bottom-2 border-solid border-2 border-base-inverted  "&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%2Fuser%2Fprofile_image%2F264%2Fb75f6edf-df7b-406e-a56b-43facafb352c.jpg" alt="jess profile" class="crayons-avatar__image" width="400" height="400"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/jess" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Jess Lee
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Jess Lee
                &lt;a href="/++"&gt;&lt;img alt="Subscriber" class="subscription-icon" src="https://assets.dev.to/assets/subscription-icon-805dfa7ac7dd660f07ed8d654877270825b07a92a03841aa99a1093bd00431b2.png" width="166" height="102"&gt;&lt;/a&gt;
                &lt;img alt="Community Curator" class="community-leader-icon" src="https://assets.dev.to/assets/community-leader-icon-b72c9e74eff54916e5c46c962f47ba40c9f611a71f8b157511f9613f69c0001b.svg" width="20" height="20"&gt;
              
              &lt;div id="story-author-preview-content-4054555" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/jess" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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%2Fuser%2Fprofile_image%2F264%2Fb75f6edf-df7b-406e-a56b-43facafb352c.jpg" class="crayons-avatar__image" alt="" width="400" height="400"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Jess Lee&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

            &lt;span&gt;
              &lt;span class="crayons-story__tertiary fw-normal"&gt; for &lt;/span&gt;&lt;a href="/devteam" class="crayons-story__secondary fw-medium"&gt;The DEV Team&lt;/a&gt;
            &lt;/span&gt;
          &lt;/div&gt;
          &lt;a href="https://dev.to/devteam/congrats-to-the-github-finish-up-a-thon-challenge-winners-1k0h" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Jul 2&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/devteam/congrats-to-the-github-finish-up-a-thon-challenge-winners-1k0h" id="article-link-4054555"&gt;
          Congrats to the GitHub Finish-Up-A-Thon Challenge Winners!
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/githubchallenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;githubchallenge&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/devchallenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;devchallenge&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/githubcopilot"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;githubcopilot&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/devteam/congrats-to-the-github-finish-up-a-thon-challenge-winners-1k0h" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/fire-f60e7a582391810302117f987b22a8ef04a2fe0df7e3258a5f49332df1cec71e.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/raised-hands-74b2099fd66a39f2d7eed9305ee0f4553df0eb7b4f11b01b6b1b499973048fe5.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;83&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/devteam/congrats-to-the-github-finish-up-a-thon-challenge-winners-1k0h#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              82&lt;span class="hidden s:inline"&gt;&amp;nbsp;comments&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            3 min read
          &lt;/small&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;



&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/dj29/shelftalk-books-dont-talk-we-do-a-college-project-revived-o4o" class="crayons-story__hidden-navigation-link"&gt;ShelfTalk — Books Don't Talk. We Do. (A College Project, Revived)&lt;/a&gt;
    &lt;div class="crayons-article__cover crayons-article__cover__image__feed"&gt;
      &lt;iframe src="https://www.youtube.com/embed/qRF0U1AmdOc" title="ShelfTalk — Books Don't Talk. We Do. (A College Project, Revived)"&gt;&lt;/iframe&gt;
    &lt;/div&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
      &lt;a href="https://dev.to/dj29/shelftalk-books-dont-talk-we-do-a-college-project-revived-o4o" class="crayons-article__context-note crayons-article__context-note__feed"&gt;&lt;p&gt;GitHub “Finish-Up-A-Thon” Challenge Submission&lt;/p&gt;

&lt;/a&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/dj29" class="crayons-avatar  crayons-avatar--l  "&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%2Fuser%2Fprofile_image%2F3743406%2F227d53d3-1443-4ceb-9fb8-98c02ff9e60f.jpg" alt="dj29 profile" class="crayons-avatar__image" width="96" height="96"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/dj29" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Dhruv Jani
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Dhruv Jani
                &lt;a href="/++"&gt;&lt;img alt="Subscriber" class="subscription-icon" src="https://assets.dev.to/assets/subscription-icon-805dfa7ac7dd660f07ed8d654877270825b07a92a03841aa99a1093bd00431b2.png" width="166" height="102"&gt;&lt;/a&gt;
                
              
              &lt;div id="story-author-preview-content-3843058" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/dj29" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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%2Fuser%2Fprofile_image%2F3743406%2F227d53d3-1443-4ceb-9fb8-98c02ff9e60f.jpg" class="crayons-avatar__image" alt="" width="96" height="96"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Dhruv Jani&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/dj29/shelftalk-books-dont-talk-we-do-a-college-project-revived-o4o" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Jun 7&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/dj29/shelftalk-books-dont-talk-we-do-a-college-project-revived-o4o" id="article-link-3843058"&gt;
          ShelfTalk — Books Don't Talk. We Do. (A College Project, Revived)
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag crayons-tag--filled  " href="/t/showdev"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;showdev&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/devchallenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;devchallenge&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/githubchallenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;githubchallenge&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/webdev"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;webdev&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/dj29/shelftalk-books-dont-talk-we-do-a-college-project-revived-o4o" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/fire-f60e7a582391810302117f987b22a8ef04a2fe0df7e3258a5f49332df1cec71e.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;9&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/dj29/shelftalk-books-dont-talk-we-do-a-college-project-revived-o4o#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              9&lt;span class="hidden s:inline"&gt;&amp;nbsp;comments&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            4 min read
          &lt;/small&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


&lt;p&gt;This is the full pipeline for a &lt;strong&gt;DEV Challenge win with an MLH-administered cash prize&lt;/strong&gt;, from the announcement post to the money actually landing. If you're a first-time winner, bookmark this — you'll want it in about a week.&lt;/p&gt;

&lt;h2&gt;
  
  
  Table of Contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Step 1: The winner post goes up&lt;/li&gt;
&lt;li&gt;Step 2: DEV++ shows up&lt;/li&gt;
&lt;li&gt;Step 3: MLH and DEV need your details&lt;/li&gt;
&lt;li&gt;Step 4: The Ramp invite&lt;/li&gt;
&lt;li&gt;Step 5: Bank details&lt;/li&gt;
&lt;li&gt;Step 6: The invoice appears&lt;/li&gt;
&lt;li&gt;If you're in India: FEMA&lt;/li&gt;
&lt;li&gt;The actual timeline&lt;/li&gt;
&lt;/ul&gt;


&lt;div class="crayons-card c-embed"&gt;

  &lt;br&gt;
&lt;strong&gt;TL;DR pipeline:&lt;/strong&gt; Winner post goes up → 2 emails (badge + mention) → DEV++ subscription (~1 day later) → MLH/DEV email asking for your legal name, phone, country, state (~1-2 days later, first win only) → Ramp invite → add bank details + W-8BEN if you're not a US citizen → invoice appears → (India only) FEMA form when your bank flags the incoming remittance → money, roughly &lt;strong&gt;two months&lt;/strong&gt; after the winner post.&lt;br&gt;

&lt;/div&gt;


&lt;h2&gt;
  
  
  Step 1: The winner post goes up — stop refreshing &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;You don't need to sit there hitting refresh. When results are in, you get &lt;strong&gt;two separate emails&lt;/strong&gt;: one confirming you got the winner badge, and one saying you were mentioned in the actual results post, sent out by whoever tag-moderated the challenge.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fohauld81439k0vmtdj48.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%2Fohauld81439k0vmtdj48.png" alt="Email confirming the DEV Challenge winner badge" width="645" height="742"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Email #1 — the winner badge confirmation&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fehznpyhjref80hmffiju.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%2Fehznpyhjref80hmffiju.png" alt="Email confirming a mention in the winners announcement post" width="650" height="657"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Email #2 — you've been mentioned in the results post&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Step 2: A day later, you're subscribed to DEV++ &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;No action needed here — it just shows up as part of the prize.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fu92bnyu7d99ux2vxv35w.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%2Fu92bnyu7d99ux2vxv35w.png" alt="DEV++ subscription confirmation email" width="641" height="771"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;The DEV++ membership confirmation, no action required&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Step 3: If this is your first win, MLH and DEV need your details &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;About 1-2 days after the announcement, if this is your &lt;strong&gt;first&lt;/strong&gt; DEV Challenge win, you'll get an email jointly from the DEV team and MLH's accounting team. They're setting up your Ramp account for the cash prize and need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Your legal first and last name&lt;/li&gt;
&lt;li&gt;Phone number&lt;/li&gt;
&lt;li&gt;Current country of residence&lt;/li&gt;
&lt;li&gt;State or province (if you're in the US or Canada)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F22sb3cbwnr8kwdm36hin.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%2F22sb3cbwnr8kwdm36hin.png" alt="Joint email from DEV and MLH accounting requesting winner details" width="656" height="662"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;The joint DEV + MLH accounting email kicking off the Ramp setup&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;One habit worth building right here, because you'll need it again in Step 5: &lt;strong&gt;reply-all&lt;/strong&gt; on this thread for any question going forward. Multiple people from both teams are on it, and reply-all is what actually gets you an answer instead of a message sitting unread in one inbox.&lt;/p&gt;
&lt;h2&gt;
  
  
  Step 4: The Ramp invite &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Once your details are in, you get an invite to Ramp. This is where you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add your account details&lt;/li&gt;
&lt;li&gt;Add them to receivables&lt;/li&gt;
&lt;li&gt;Fill out a tax form — if you're not a US citizen, this is the &lt;strong&gt;W-8BEN&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbwsp8tgrx61bixoo7v4k.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%2Fbwsp8tgrx61bixoo7v4k.png" alt="Ramp invite email" width="646" height="745"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;The Ramp invite that lands after your details are submitted&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fr1xwjborp938lkvquhv4.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%2Fr1xwjborp938lkvquhv4.png" alt="Blank W-8BEN tax form" width="643" height="827"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;The W-8BEN — required if you're not a US citizen&lt;/em&gt;&lt;/p&gt;


&lt;div class="crayons-card c-embed"&gt;

  &lt;br&gt;
&lt;strong&gt;Fields I actually filled on the W-8BEN:&lt;/strong&gt; 1, 2, 3, 6a (PAN number), 8, and the signature + date at the very end. Everything else I left blank.&lt;br&gt;

&lt;/div&gt;


&lt;h2&gt;
  
  
  Step 5: Bank details — the part that ate my week &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;This is the part nobody walks you through, and it's the one place I actually lost time. I asked the MLH team directly where to enter my SWIFT code — more than once — and never got a straight answer. The Ramp UI itself didn't have an obvious field labeled "SWIFT code" either, which made it worse: I wasn't missing an answer, I was missing where the question even went.&lt;/p&gt;

&lt;p&gt;I'd also gone in assuming I couldn't receive the money in USD directly into my account, so I filled everything out around that assumption. It was wrong, and untangling it afterward cost me more time than the original problem did.&lt;/p&gt;

&lt;p&gt;In the end I spent about an &lt;strong&gt;hour going back and forth with Ramp's own help bot&lt;/strong&gt;, one question at a time, until I found where the SWIFT/BIC field actually lived and got the currency set correctly to USD.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fc3db13whoezsqd9yc2zo.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%2Fc3db13whoezsqd9yc2zo.png" alt="Ramp bank details form with currency set to USD" width="661" height="786"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Currency set to USD, with the SWIFT/BIC field finally in view&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;That hour with the help bot, start to finish:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fixl4qts2krfxej7o9jh9.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%2Fixl4qts2krfxej7o9jh9.png" alt="Ramp help bot conversation, part 1" width="800" height="653"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Ramp help bot — 1 of 6&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fms2k5yes1fwlwcgfh5iq.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%2Fms2k5yes1fwlwcgfh5iq.png" alt="Ramp help bot conversation, part 2" width="800" height="634"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Ramp help bot — 2 of 6&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3p3urul88p9rezw1v1qf.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%2F3p3urul88p9rezw1v1qf.png" alt="Ramp help bot conversation, part 3" width="800" height="565"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Ramp help bot — 3 of 6&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Felf54hccbk3wju41av04.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%2Felf54hccbk3wju41av04.png" alt="Ramp help bot conversation, part 4" width="800" height="658"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Ramp help bot — 4 of 6&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnjpjhiquugca8hk88wlr.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%2Fnjpjhiquugca8hk88wlr.png" alt="Ramp help bot conversation, part 5" width="800" height="610"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Ramp help bot — 5 of 6&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjjo9l5gkfinblcm1kk7t.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%2Fjjo9l5gkfinblcm1kk7t.png" alt="Ramp help bot conversation, part 6, where the SWIFT/BIC field is finally located" width="799" height="389"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Ramp help bot — 6 of 6, the field turns up&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Step 6: The invoice appears &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Once everything's filled in correctly, an invoice gets generated on your end — the actual receivable, created against your bank details.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjknhyyln29h6nefmffho.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%2Fjknhyyln29h6nefmffho.png" alt="Generated invoice in Ramp" width="800" height="769"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;The invoice, generated automatically once your bank details are accepted&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;
  If you're in India: FEMA enters the chat
  &lt;br&gt;
&lt;a&gt;&lt;/a&gt;

&lt;p&gt;For Indian winners specifically, the remittance doesn't land directly — it first reaches the &lt;strong&gt;nodal/central branch of your bank&lt;/strong&gt; in your city. You'll get an email from your bank saying they've received a foreign remittance from MLH, and at that point you need to &lt;strong&gt;act fast&lt;/strong&gt;: your bank has the right to reject the remittance, and the next step is filling out a &lt;strong&gt;FEMA form&lt;/strong&gt; with the details of the transaction, along with your &lt;strong&gt;Aadhaar card and PAN card, signed&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The suggestion I got was to physically visit the central branch matching the SWIFT code's city and fill the form out there. That's fine if your schedule allows it — mine didn't. I got the bank's email on a &lt;strong&gt;Thursday&lt;/strong&gt;, the following &lt;strong&gt;Saturday was a bank holiday&lt;/strong&gt;, and as a college student I couldn't exactly walk into a branch on a weekday either. So instead, we asked the branch manager directly if they could email us the form and let us send the details back that way — and that worked.&lt;/p&gt;

&lt;p&gt;If you're in the same spot, don't assume an in-person visit is the only option. Ask.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1dhgiu9e1cfsgy7ntdal.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%2F1dhgiu9e1cfsgy7ntdal.png" alt="Bank email notifying of incoming foreign remittance from MLH" width="800" height="540"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;The bank's notice of an incoming foreign remittance — this is your cue to move fast&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fugnfh4jgrqhwzjxr4uya.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%2Fugnfh4jgrqhwzjxr4uya.png" alt="Blank FEMA form, personal details redacted" width="732" height="816"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;The FEMA form your bank requires before releasing the remittance&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Don't sit on that email. The window to respond isn't long, and a rejected remittance means starting the transfer process over.&lt;br&gt;
&lt;/p&gt;

&lt;br&gt;
&lt;p&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The actual timeline &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Start to finish, budget &lt;strong&gt;around two months&lt;/strong&gt; from the winner post to money actually reaching your account. Nothing about that length means something's broken — it's just the real shape of the pipeline: DEV/MLH verification, Ramp setup, bank processing, and, for international winners, your own bank's compliance checks stacked on top.&lt;/p&gt;

&lt;h2&gt;
  
  
  If you're going through this right now
&lt;/h2&gt;

&lt;p&gt;I'm not an accountant and this isn't tax or legal advice — I'm one winner describing exactly what happened to me, so your bank, country, or MLH's process could vary slightly. If you're stuck at any of these steps, drop it in the comments; I'll answer what I can. And if you're stuck on MLH or DEV's end specifically, reply-all really is the fastest way to get their actual attention.&lt;/p&gt;

&lt;p&gt;Winning was the fun part. This was the part I wish someone had written down first.&lt;/p&gt;

</description>
      <category>devjournal</category>
      <category>discuss</category>
      <category>career</category>
      <category>hackathon</category>
    </item>
    <item>
      <title>Your Codebase Doesn't Need AI. It Needs Context.</title>
      <dc:creator>Dhruv Jani</dc:creator>
      <pubDate>Thu, 27 Aug 2026 18:29:01 +0000</pubDate>
      <link>https://dev.to/dj29/your-codebase-doesnt-need-ai-it-needs-context-1lp0</link>
      <guid>https://dev.to/dj29/your-codebase-doesnt-need-ai-it-needs-context-1lp0</guid>
      <description>&lt;p&gt;Every hackathon has the same 90-second moment of dread: someone hands you a codebase you've never seen, and you have to make sense of it before the clock runs out. File trees don't help. &lt;code&gt;grep&lt;/code&gt; doesn't help. You waste the first 30–60 minutes reading the wrong files, missing a hidden dependency, and stepping straight into a production trap nobody warned you about.&lt;/p&gt;

&lt;p&gt;In other words: before writing code, you spend half your time trying to figure out where the hell the code is.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The idea wasn't "AI that writes your code." It was "AI that tells you where to look before you write it."&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;For InnovaHack Chapter-1, my team built &lt;strong&gt;Waypoint&lt;/strong&gt; — a dev onboarding platform. Point it at any GitHub repo or a local folder, describe a task like "Add a new global configuration flag to app.set()", and instead of you reading the whole codebase to figure out where that even goes, it hands you a &lt;strong&gt;Mission Brief&lt;/strong&gt;: exactly which files you'll touch, the traps waiting in them, what to learn first, and the order to do it in.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Waypoint&lt;/strong&gt; made the &lt;strong&gt;Top 50&lt;/strong&gt; — one of the 50 chosen to advance to Round 2. Here's how it actually works under the hood, what it took to build, what's next for it — and since I don't believe in only posting the highlight reel, what happened after we placed that made us walk away from the next round.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem: the cold-start tax
&lt;/h2&gt;

&lt;p&gt;Every time a developer joins a new codebase, or picks up an unfamiliar task in one they already know, there's a tax paid in wrong files read, missed dependencies, and traps hit blind. &lt;/p&gt;

&lt;p&gt;For me, that moment came when I wanted to contribute to Forem — the open-source project that actually powers DEV. I didn't know a line of Ruby on Rails, and between learning the language, understanding the framework, and preparing for interviews, I didn't have the time to read an entire unfamiliar codebase just to figure out where one feature belonged. I never ended up making that contribution. But the problem stuck with me.&lt;/p&gt;

&lt;p&gt;It's also a pattern for our team more broadly: we deliberately pick a different domain of tech for every hackathon instead of getting comfortable in one stack. It's less strategic than it sounds — mostly it just means &lt;strong&gt;Tarkash-Labs&lt;/strong&gt; has ended up with a fairly scattered, fairly interesting portfolio of projects across domains that have nothing to do with each other.&lt;/p&gt;

&lt;p&gt;A file tree tells you &lt;em&gt;where&lt;/em&gt; things are. It tells you nothing about &lt;em&gt;what matters for the thing you're trying to do right now&lt;/em&gt;. That's the actual gap Waypoint closes — not "here's a map of the codebase," but "here's the route for your specific task."&lt;/p&gt;

&lt;p&gt;It's a map, not a GPS. Waypoint is supposed to give you the latter.&lt;/p&gt;

&lt;h2&gt;
  
  
  How a task becomes a Mission Brief
&lt;/h2&gt;

&lt;p&gt;Type in a task — the README's own example is &lt;code&gt;Add Google OAuth&lt;/code&gt; — and Waypoint runs a five-step pipeline:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Keyword match&lt;/strong&gt; — scans every file for relevance by path and content pattern&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Semantic retrieval&lt;/strong&gt; — uses NVIDIA's &lt;strong&gt;NV-EmbedCode-7B&lt;/strong&gt; embeddings to pull the top 15 semantically similar files via cosine similarity&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI candidate selection&lt;/strong&gt; — an LLM narrows that down to the 3-5 files that actually matter&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Source extraction&lt;/strong&gt; — structurally parses the real code: functions, classes, imports, exports&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mission generation&lt;/strong&gt; — produces the brief itself: files to touch (with reasons), known traps, prerequisites, a step-by-step route, and an evidence log of what was analyzed and why&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Five steps in. One question answered: “Where should I actually start?”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That evidence log matters more than it sounds like it should — it's the difference between "trust me" and being able to see exactly which files the recommendation is grounded in. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The goal isn't to make the AI sound confident. The goal is to make it show its homework.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Screenshot 1 — the input/task&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;The task starts with a question, not a file path: tell Waypoint what you're trying to change.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&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%2Fai07pld0ogfhto7s0i1f.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%2Fai07pld0ogfhto7s0i1f.png" alt="Mission-Brief Feature-1" width="800" height="553"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Screenshot 2 — the analysis&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Waypoint narrows an entire repository down to the files relevant to that task.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&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%2F4drvxa1y21r8dc8ald57.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%2F4drvxa1y21r8dc8ald57.png" alt="Mission-Brief Feature-2" width="800" height="553"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Screenshot 3 — the Mission Brief&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;The output isn't a generic codebase summary — it's a task-specific route with files, traps, prerequisites, and evidence.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&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%2F0m9s0ys0f7k7cw8dsupn.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%2F0m9s0ys0f7k7cw8dsupn.png" alt="Mission-Brief Feature-3" width="800" height="553"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Caption: The Mission Brief generated for adding a new configuration flag to Express.js — identifying the exact core files to touch, known framework traps, and the step-by-step route.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Never showing a blank screen: the AI router
&lt;/h2&gt;

&lt;p&gt;One decision I'm genuinely proud of: Waypoint doesn't depend on a single AI provider staying up. It runs a waterfall — because apparently even AI needs a backup plan:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Primary → Fallback → Second fallback&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Gemini 3.5 Flash&lt;/strong&gt; for speed&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DeepSeek V4 Flash&lt;/strong&gt; via NVIDIA NIM for reasoning depth if Gemini rate-limits or times out&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gemma 4 31B&lt;/strong&gt; via NVIDIA NIM — lighter, but it means there's always a third option before the app just fails&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This isn't a hypothetical safety net. Gemini's free tier caps out at 20 requests a day, per model — fine for a polished five-minute demo, nowhere near enough for the number of test runs building and debugging actually takes. NVIDIA NIM's limits run per-minute instead of per-day, which is exactly why DeepSeek V4 Flash sits as the first fallback rather than the primary. Gemma 4 31B is the heaviest of the three — noticeably slower, but consistently the most thorough of the three, which is why it's the option of last resort rather than a weak one. &lt;em&gt;Three providers, one mission: don't let the app go down because a free tier decided you'd had enough requests for the day.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The two 3D views
&lt;/h2&gt;

&lt;p&gt;Beyond the Mission Brief, Waypoint has two ways to actually see the codebase:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Architecture Map&lt;/strong&gt; — the 3D city. Buildings are files, height is lines of code, color is risk level. The taller the building, the more code you're probably about to regret touching.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dependency Galaxy&lt;/strong&gt; — a 3D force-directed graph showing how every file actually connects to every other file. Architecture Map tells you what the city looks like. Dependency Galaxy tells you who's secretly connected to whom.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fofwcuol1nuich2eliz4e.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%2Fofwcuol1nuich2eliz4e.png" alt="Architecture Map" width="799" height="559"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Architecture Map: the Express.js codebase rendered as a 3D city — building height represents lines of code, while color represents risk.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpvvlw35iesyoaqfil35z.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%2Fpvvlw35iesyoaqfil35z.png" alt="Dependency Galaxy" width="800" height="570"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Dependency Galaxy: the same repository viewed as a network of file-to-file dependencies.&lt;/em&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;And then the entire thing white-screened.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Here's the one that actually made me sweat. Building the Architecture Map meant procedurally laying out a 3D cityscape — each file a building, grouped by directory — and for the floor plan we used &lt;code&gt;d3-hierarchy&lt;/code&gt;'s &lt;code&gt;treemapSquarify&lt;/code&gt; layout, extruding the resulting 2D rectangles into 3D boxes with React Three Fiber.&lt;/p&gt;

&lt;p&gt;It worked cleanly on most repos. Then, with no warning, loading a specific repo would white-screen the entire app — no error message, no fallback, the whole navigation state just gone.&lt;/p&gt;

&lt;p&gt;The cause turned out to be a collision between D3's layout math and WebGL's geometry constraints. On repos with certain nested structures, or too few files, D3's padding calculations would subtract more space than the bounding box actually had — and the treemap would hand back leaf nodes with a width or depth of exactly zero, sometimes negative. Feed a negative dimension into a Three.js &lt;code&gt;&amp;lt;BoxGeometry&amp;gt;&lt;/code&gt; and WebGL throws a fatal &lt;code&gt;NaN&lt;/code&gt; vertex error. Because the 3D canvas lived inside the main React tree, that error bubbled straight up and unmounted the entire app. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;A single negative pixel in a street calculation nuked the whole dashboard.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Fixing it took three layers: scaling the D3 canvas dynamically based on repo density instead of a fixed-size grid, clamping geometry on the Three.js side with a hard minimum size and a capped maximum height so nothing could ever go negative or infinite, and wrapping the whole 3D map in a React &lt;code&gt;ErrorBoundary&lt;/code&gt; so a geometry failure degrades gracefully to a "Map unavailable" panel instead of taking the rest of the app down with it.&lt;/p&gt;

&lt;p&gt;Turns out making a codebase look like a city is considerably easier than making the city behave like one.&lt;/p&gt;


For the curious: Waypoint doesn't need a GitHub repo

Waypoint can analyze a local folder directly through the browser's File System Access API — no GitHub repo required, and no code leaves your machine until the AI analysis step. This wasn't an accident: during any hackathon, we try hard not to introduce a persistent database or auth if we can avoid it. It's better for privacy, and just as importantly, it means judges can try the tool immediately instead of creating an account first — which saves everyone time during judging.


&lt;h2&gt;
  
  
  What "Top 50" actually meant
&lt;/h2&gt;

&lt;p&gt;There were 8,666 registered teams across the hackathon, but the number of teams competing in our Open Innovation track isn't something I know. So I'm not going to manufacture a denominator. Waypoint was simply one of the 50 teams selected to advance to Round 2.&lt;/p&gt;

&lt;p&gt;Top 50 gave us a waypoint, not a finish line.&lt;/p&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/Tarkash-Labs" rel="noopener noreferrer"&gt;
        Tarkash-Labs
      &lt;/a&gt; / &lt;a href="https://github.com/Tarkash-Labs/WayPoint" rel="noopener noreferrer"&gt;
        WayPoint
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Waypoint prepares developers before they code. Paste any GitHub repository, describe your task, and instantly get the files that matter, known risks, learning prerequisites, and an execution route—turning hours of code exploration into minutes of focused development.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;p&gt;
  &lt;a rel="noopener noreferrer" href="https://github.com/Tarkash-Labs/WayPoint/public/logo.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FTarkash-Labs%2FWayPoint%2FHEAD%2Fpublic%2Flogo.png" width="200" alt="Waypoint Logo"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/9e49911e80cd8d52a872f3d49fcb9246d1ca4ff94c3cfd21479304feac61f0b5/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f52656163742d31392d3631444146423f7374796c653d666f722d7468652d6261646765266c6f676f3d7265616374266c6f676f436f6c6f723d7768697465"&gt;&lt;img src="https://camo.githubusercontent.com/9e49911e80cd8d52a872f3d49fcb9246d1ca4ff94c3cfd21479304feac61f0b5/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f52656163742d31392d3631444146423f7374796c653d666f722d7468652d6261646765266c6f676f3d7265616374266c6f676f436f6c6f723d7768697465"&gt;&lt;/a&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/02603fd8c0e832228907a04946a1a4303acd8ee039e0718d52f6cfb74335229f/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f566974652d382d3634364346463f7374796c653d666f722d7468652d6261646765266c6f676f3d76697465266c6f676f436f6c6f723d7768697465"&gt;&lt;img src="https://camo.githubusercontent.com/02603fd8c0e832228907a04946a1a4303acd8ee039e0718d52f6cfb74335229f/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f566974652d382d3634364346463f7374796c653d666f722d7468652d6261646765266c6f676f3d76697465266c6f676f436f6c6f723d7768697465"&gt;&lt;/a&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/e2b6902db6d198ff9fe06e1f3567ebb8db0177a27c905c328e0321e61e9c43eb/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f54687265652e6a732d33442d3030303030303f7374796c653d666f722d7468652d6261646765266c6f676f3d74687265652e6a73266c6f676f436f6c6f723d7768697465"&gt;&lt;img src="https://camo.githubusercontent.com/e2b6902db6d198ff9fe06e1f3567ebb8db0177a27c905c328e0321e61e9c43eb/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f54687265652e6a732d33442d3030303030303f7374796c653d666f722d7468652d6261646765266c6f676f3d74687265652e6a73266c6f676f436f6c6f723d7768697465"&gt;&lt;/a&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/1a8a269a540d9492391f37ef54bc041dd86e5bfffd5a7e4d27fe663d568c71ec/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f47656d696e695f332e352d41492d3432383546343f7374796c653d666f722d7468652d6261646765266c6f676f3d676f6f676c65266c6f676f436f6c6f723d7768697465"&gt;&lt;img src="https://camo.githubusercontent.com/1a8a269a540d9492391f37ef54bc041dd86e5bfffd5a7e4d27fe663d568c71ec/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f47656d696e695f332e352d41492d3432383546343f7374796c653d666f722d7468652d6261646765266c6f676f3d676f6f676c65266c6f676f436f6c6f723d7768697465"&gt;&lt;/a&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/2527710667a6b8b84d297c0314a765d5d5d555601d12c57cb97ed56d2052fb1d/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4e56494449415f4e494d2d446565705365656b2d3736423930303f7374796c653d666f722d7468652d6261646765266c6f676f3d6e7669646961266c6f676f436f6c6f723d7768697465"&gt;&lt;img src="https://camo.githubusercontent.com/2527710667a6b8b84d297c0314a765d5d5d555601d12c57cb97ed56d2052fb1d/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4e56494449415f4e494d2d446565705365656b2d3736423930303f7374796c653d666f722d7468652d6261646765266c6f676f3d6e7669646961266c6f676f436f6c6f723d7768697465"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;🧭 Waypoint&lt;/h1&gt;
&lt;/div&gt;

&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;&lt;em&gt;The Context Engine That Prepares Developers Before They Write a Single Line of Code&lt;/em&gt;&lt;/h3&gt;
&lt;/div&gt;

&lt;p&gt;
  Waypoint is an AI-powered developer productivity tool that analyzes any GitHub repository or local project and generates &lt;strong&gt;task-specific Mission Briefs&lt;/strong&gt; — telling you exactly which files to touch, what traps to avoid, and the optimal execution route, &lt;em&gt;before you start coding&lt;/em&gt;
&lt;/p&gt;




&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🎯 Problem Statement&lt;/h2&gt;

&lt;/div&gt;

&lt;p&gt;When a developer joins a new codebase or picks up an unfamiliar task, they waste &lt;strong&gt;30–60 minutes&lt;/strong&gt; reading the wrong files, missing hidden dependencies, and hitting production traps. Waypoint eliminates this cold-start problem entirely.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;💡 Solution&lt;/h2&gt;

&lt;/div&gt;

&lt;p&gt;Waypoint uses a &lt;strong&gt;Retrieval-Augmented Generation (RAG)&lt;/strong&gt; pipeline with semantic embeddings to deeply understand a codebase and then generates:&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;&lt;div class="table-wrapper-paragraph"&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;table&gt;

&lt;thead&gt;

&lt;tr&gt;

&lt;th&gt;Feature&lt;/th&gt;

&lt;th&gt;What It Does&lt;/th&gt;

&lt;/tr&gt;

&lt;/thead&gt;

&lt;tbody&gt;

&lt;tr&gt;

&lt;td&gt;&lt;strong&gt;🎯 Mission Brief&lt;/strong&gt;&lt;/td&gt;

&lt;td&gt;Files you'll touch, known traps, prerequisites, and a step-by-step execution route for your specific task&lt;/td&gt;

&lt;/tr&gt;

&lt;tr&gt;

&lt;td&gt;&lt;strong&gt;🎓 AI Onboarding&lt;/strong&gt;&lt;/td&gt;

&lt;td&gt;Role-based learning paths (Frontend, Backend, Bug Fixes, Architecture) with contextual&lt;/td&gt;

&lt;/tr&gt;

&lt;/tbody&gt;

&lt;/table&gt;&lt;/div&gt;…&lt;p&gt;&lt;/p&gt;&lt;/div&gt;
&lt;br&gt;
  &lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/Tarkash-Labs/WayPoint" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;



&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://tarkashlabs-waypoint.vercel.app" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;tarkashlabs-waypoint.vercel.app&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  The part I want to be honest about
&lt;/h2&gt;

&lt;p&gt;Placing Top 50 wasn't the end of the story — it was supposed to be the start of Phase 2. And this is the part most "we won a hackathon!" posts leave out, so I'm not going to.&lt;/p&gt;

&lt;p&gt;Instead, Phase 2 taught us something we didn't expect to learn at a hackathon: sometimes the thing you need to debug isn't your code.&lt;/p&gt;

&lt;p&gt;Here's what happened, as plainly as I can lay it out:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Phase 2 required a real fee to continue.&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;₹1,000&lt;/strong&gt; fee was presented as a pay-to-continue cost, justified by a claimed &lt;strong&gt;₹45,000+&lt;/strong&gt; package of credits, swag, and mentorship.&lt;/li&gt;
&lt;li&gt;A chunk of those credits were for things like n8n and .xyz domains — already free or near-free for students and first-time users through those companies' own existing programs.&lt;/li&gt;
&lt;li&gt;This was a national-level hackathon, and Round 2 was in-person in Mumbai, meaning travel out of state for teams like ours.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No accommodation was provided&lt;/strong&gt;, for a round that lasted a matter of hours.&lt;/li&gt;
&lt;li&gt;When people in the group chat asked basic accountability questions — what the fee actually covered, how the ₹45,000+ figure was calculated, whether travel support was possible — the chat was muted instead of answered.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For us, that wasn't worth paying to continue. Not because Waypoint wasn't worth continuing — a Top 50 finish says otherwise — but because the claimed value didn't add up to something we felt justified paying ₹1,000 for.&lt;/p&gt;

&lt;p&gt;If you're deep in hackathon season this year: paying to continue is one decision. An organizer who won't stay answerable for what that payment covers is a completely different, much simpler decision. Walk, regardless of how far you've already placed.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's next
&lt;/h2&gt;

&lt;p&gt;For now, Waypoint is paused — not abandoned. We know where we want to take it next: tighter retrieval, a real backend proxy so it's not stuck behind a dev-only CORS workaround, private repo support. Realistically, it's waiting on our next funding round, which comes in one of two forms: actual seed funding, or my co-founders finishing their job hunts and having bandwidth again. Whichever hits first, we're calling it &lt;strong&gt;Series F&lt;/strong&gt; — for Friends.&lt;/p&gt;

&lt;p&gt;Right now we've got Waypoint's idea and questionnaire submitted to &lt;strong&gt;Eureka!&lt;/strong&gt; — E-Cell IIT Bombay's startup competition — under the AI &amp;amp; Deeptech track. No idea yet how far it goes, but it felt like the right next room to walk into.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sometimes the most useful waypoint is the one that tells you not to keep going.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Have you ever walked away from an opportunity even after earning your way into it? I'd genuinely like to hear what happened.&lt;/p&gt;




&lt;p&gt;[Team: &lt;a class="mentioned-user" href="https://dev.to/dj29"&gt;@dj29&lt;/a&gt;, &lt;a class="mentioned-user" href="https://dev.to/yug_vasava"&gt;@yug_vasava&lt;/a&gt;, &lt;a class="mentioned-user" href="https://dev.to/amv12"&gt;@amv12&lt;/a&gt;]&lt;/p&gt;

&lt;p&gt;Transparency note: the AI pipeline behind these screenshots&lt;/p&gt;

&lt;p&gt;&lt;em&gt;(&lt;/em&gt;&lt;em&gt;Dev Note:&lt;/em&gt;* For the demo screenshots in this post, we ran Waypoint against the Express.js repository to show a realistic architectural task. Also, a quick transparency note on the AI pipeline: as of August 24, 2026, NVIDIA NIM officially deprecated the &lt;code&gt;nv-embedcode-7b-v1&lt;/code&gt; embedding model and sunset the free-tier API endpoint for &lt;code&gt;deepseek-v4-flash&lt;/code&gt;. Because this triggered a cascading &lt;code&gt;410 Gone&lt;/code&gt; error across our semantic search and LLM fallback router, the screenshots above were generated locally by temporarily bypassing NIM and routing the entire pipeline through Gemini 3.5 Flash as a hotfix. We'll be migrating to NVIDIA's newer embedding models and a partner-hosted DeepSeek instance for production before our Eureka pitch.)*&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>hackathon</category>
      <category>discuss</category>
      <category>ai</category>
    </item>
    <item>
      <title>The Optimization That Was Too Good: Why Our Push Notifications Only Worked When You Weren't Looking</title>
      <dc:creator>Dhruv Jani</dc:creator>
      <pubDate>Sat, 22 Aug 2026 05:19:16 +0000</pubDate>
      <link>https://dev.to/dj29/the-optimization-that-was-too-good-why-our-push-notifications-only-worked-when-you-werent-looking-2f4d</link>
      <guid>https://dev.to/dj29/the-optimization-that-was-too-good-why-our-push-notifications-only-worked-when-you-werent-looking-2f4d</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for &lt;a href="https://dev.to/bugsmash"&gt;DEV's Summer Bug Smash: Smash Stories&lt;/a&gt; powered by &lt;a href="https://sentry.io/" rel="noopener noreferrer"&gt;Sentry&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;When I was building the push notification system for &lt;a href="https://shelftalk-community.vercel.app/" rel="noopener noreferrer"&gt;ShelfTalk&lt;/a&gt; — a real-time social app that won the &lt;a href="https://dev.to/devteam/congrats-to-the-github-finish-up-a-thon-challenge-winners-1k0h"&gt;GitHub Finish Up A Thon Challenge&lt;/a&gt; on DEV — I wanted to be considerate of my users. There's nothing more annoying than actively chatting in a web app and having your desktop ping you with a notification for the exact message you're currently reading.&lt;/p&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/JaniDhruv" rel="noopener noreferrer"&gt;
        JaniDhruv
      &lt;/a&gt; / &lt;a href="https://github.com/JaniDhruv/ShelfTalk" rel="noopener noreferrer"&gt;
        ShelfTalk
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A full-stack real-time social architecture featuring Socket.io instant messaging, synchronized reading rooms, and a high-performance React/Vite frontend backed by MongoDB Atlas and GridFS and desktop push notifications for groups and chats.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div&gt;
  &lt;a rel="noopener noreferrer" href="https://github.com/JaniDhruv/ShelfTalk/frontend/public/shelftalk-logo-navbar.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FJaniDhruv%2FShelfTalk%2FHEAD%2Ffrontend%2Fpublic%2Fshelftalk-logo-navbar.png" alt="ShelfTalk Logo" width="320"&gt;&lt;/a&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;ShelfTalk&lt;/h1&gt;
&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;&lt;em&gt;Books don't talk. We do.&lt;/em&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Turn every reading list into a living conversation.&lt;/p&gt;
  &lt;p&gt;
    &lt;a href="https://shelftalk-community.vercel.app/" rel="nofollow noopener noreferrer"&gt;🌐 Live Demo&lt;/a&gt; •
    &lt;a href="https://github.com/JaniDhruv/ShelfTalk#-quick-setup" rel="noopener noreferrer"&gt;⚡ Quick Setup&lt;/a&gt; •
    &lt;a href="https://github.com/JaniDhruv/ShelfTalk#-core-features" rel="noopener noreferrer"&gt;✨ Features&lt;/a&gt; •
    &lt;a href="https://github.com/JaniDhruv/ShelfTalk#-tech-stack" rel="noopener noreferrer"&gt;🛠 Tech Stack&lt;/a&gt;
  &lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/0061bcdf79d91268ffd2600d39a155e7bae849c54b99c300750ec88c06ded3ef/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4e6f64652e6a732d7631342b2d3333393933333f7374796c653d666c61742d737175617265266c6f676f3d6e6f64652e6a73266c6f676f436f6c6f723d7768697465"&gt;&lt;img src="https://camo.githubusercontent.com/0061bcdf79d91268ffd2600d39a155e7bae849c54b99c300750ec88c06ded3ef/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4e6f64652e6a732d7631342b2d3333393933333f7374796c653d666c61742d737175617265266c6f676f3d6e6f64652e6a73266c6f676f436f6c6f723d7768697465" alt="Node.js"&gt;&lt;/a&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/5dd1a733b1161d248d5053ce4d159c380c53b64bca386df3271d2913718338f8/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f52656163742d566974652d3631444146423f7374796c653d666c61742d737175617265266c6f676f3d7265616374266c6f676f436f6c6f723d626c61636b"&gt;&lt;img src="https://camo.githubusercontent.com/5dd1a733b1161d248d5053ce4d159c380c53b64bca386df3271d2913718338f8/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f52656163742d566974652d3631444146423f7374796c653d666c61742d737175617265266c6f676f3d7265616374266c6f676f436f6c6f723d626c61636b" alt="React"&gt;&lt;/a&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/be6667f0b1d40a66fb01119f6473894c1e6eb7508bd4c1fb32254180e4b107cb/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4d6f6e676f44422d41746c61732d3437413234383f7374796c653d666c61742d737175617265266c6f676f3d6d6f6e676f6462266c6f676f436f6c6f723d7768697465"&gt;&lt;img src="https://camo.githubusercontent.com/be6667f0b1d40a66fb01119f6473894c1e6eb7508bd4c1fb32254180e4b107cb/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4d6f6e676f44422d41746c61732d3437413234383f7374796c653d666c61742d737175617265266c6f676f3d6d6f6e676f6462266c6f676f436f6c6f723d7768697465" alt="MongoDB"&gt;&lt;/a&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/5c375bd4a71384dbd45d158c0217e639a2cd1c1a87470edc26b681093742b3fd/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f536f636b65742e696f2d5265616c2d2d54696d652d3031303130313f7374796c653d666c61742d737175617265266c6f676f3d736f636b65742e696f"&gt;&lt;img src="https://camo.githubusercontent.com/5c375bd4a71384dbd45d158c0217e639a2cd1c1a87470edc26b681093742b3fd/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f536f636b65742e696f2d5265616c2d2d54696d652d3031303130313f7374796c653d666c61742d737175617265266c6f676f3d736f636b65742e696f" alt="Socket.io"&gt;&lt;/a&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/e778ce6cb201dd99f5c688e92b603922509241f93d9a0878fc3f7618eb616717/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4465706c6f7965642d56657263656c2d3030303030303f7374796c653d666c61742d737175617265266c6f676f3d76657263656c"&gt;&lt;img src="https://camo.githubusercontent.com/e778ce6cb201dd99f5c688e92b603922509241f93d9a0878fc3f7618eb616717/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4465706c6f7965642d56657263656c2d3030303030303f7374796c653d666c61742d737175617265266c6f676f3d76657263656c" alt="Vercel"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;📖 What is ShelfTalk?&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;ShelfTalk&lt;/strong&gt; is a full-stack social community platform built for book lovers. Think of it as a blend of Goodreads and Discord — readers can share updates, annotate passages, join genre-based clubs, chat in real-time, and coordinate live reading sessions together.&lt;/p&gt;
&lt;p&gt;Originally built as a college project, ShelfTalk has since been revived and significantly expanded with real-time infrastructure, a live reading room feature, a personal reading diary, an invite friends feature to help the community grow, cloud file storage, and more.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;✨ Core Features&lt;/h2&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;📝 Community Posts&lt;/h3&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Publish reading updates and annotate favourite passages&lt;/li&gt;
&lt;li&gt;Threaded comments keep every discussion organized&lt;/li&gt;
&lt;li&gt;Reactions and saves from your personal dashboard&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;🔍 Powerful Discovery&lt;/h3&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Filter readers by genre, location, and interests&lt;/li&gt;
&lt;li&gt;Browse vibrant…&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/JaniDhruv/ShelfTalk" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;So, I added what I thought was a brilliant little optimization:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;sendPushNotification&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;options&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{},&lt;/span&gt; &lt;span class="nx"&gt;requireHidden&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Notification&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Notification&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;permission&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;granted&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// If requireHidden is true, only fire if the tab is hidden&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;requireHidden&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;hidden&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// &amp;lt;-- The "Brilliant" Optimization&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;notification&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Notification&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;options&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="c1"&gt;// ...&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The logic was simple: check &lt;code&gt;document.hidden&lt;/code&gt; (the &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/Page_Visibility_API" rel="noopener noreferrer"&gt;Page Visibility API&lt;/a&gt;). If the user is currently looking at the ShelfTalk tab, suppress the desktop notification. No redundant pings. Clean UX.&lt;/p&gt;

&lt;p&gt;I deployed it, patted myself on the back, and went about my day.&lt;/p&gt;

&lt;h2&gt;
  
  
  🔍 The Mystery
&lt;/h2&gt;

&lt;p&gt;A few days later, the bug reports started rolling in. Users were complaining that they were missing important direct messages and group mentions.&lt;/p&gt;

&lt;p&gt;I tested it on my machine. I minimized the browser, had a friend send me a message, and — &lt;em&gt;ding!&lt;/em&gt; — the notification popped up perfectly. I opened the window, got another message, and no notification appeared. &lt;strong&gt;It was working exactly as designed.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;So why were people missing messages?&lt;/p&gt;

&lt;h2&gt;
  
  
  💡 The "Ah-Ha" Moment
&lt;/h2&gt;

&lt;p&gt;I asked one of the users to describe their setup.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Oh, I usually leave ShelfTalk open on my second monitor while I work on my main screen."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And suddenly it clicked.&lt;/p&gt;

&lt;p&gt;The Page Visibility API (&lt;code&gt;document.hidden&lt;/code&gt;) only returns &lt;code&gt;true&lt;/code&gt; if the page is &lt;strong&gt;completely hidden&lt;/strong&gt; — either behind other windows in a background tab, or in a minimized window. &lt;strong&gt;If the window is visible on a second monitor — even if you are actively working in a completely different app on your main monitor — &lt;code&gt;document.hidden&lt;/code&gt; is &lt;code&gt;false&lt;/code&gt;.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Because the tab was technically "visible" to the operating system, my code assumed the user was staring directly at it. It silently dropped every notification. The user, focused on their main screen, never heard a ping and missed the message entirely.&lt;/p&gt;

&lt;p&gt;Even worse: if a user left ShelfTalk open on their desktop at the office and went home, their home laptop would never notify them either — because the office machine was technically still "looking" at the app.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;: &lt;code&gt;document.hidden === false&lt;/code&gt; does &lt;strong&gt;not&lt;/strong&gt; mean the user is paying attention. It just means the OS can see the window.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  🔨 The Smash
&lt;/h2&gt;

&lt;p&gt;Sometimes, the best way to fix a bug is to &lt;strong&gt;delete the code you were so proud of writing.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I removed the optimization entirely:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight diff"&gt;&lt;code&gt;&lt;span class="gd"&gt;-    // If requireHidden is true, only fire if the tab is hidden
-    if (requireHidden &amp;amp;&amp;amp; !document.hidden) {
-      return;
-    }
&lt;/span&gt;&lt;span class="gi"&gt;+    // Notifications will now fire even if the tab is visible,
+    // to ensure they appear across all active machines.
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;(See the exact commit &lt;a href="https://github.com/JaniDhruv/ShelfTalk/commit/b0c9b1645b4543e48778fea7137cdf5d4761b10e" rel="noopener noreferrer"&gt;here&lt;/a&gt;)&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;We often try to be "too smart" with our UX optimizations. I assumed that &lt;strong&gt;"window visible" equaled "user paying attention."&lt;/strong&gt; In the era of ultra-wide monitors, multiple screens, and users being logged in on five different devices at once, that assumption was completely wrong.&lt;/p&gt;

&lt;p&gt;By trying to save users from a slightly annoying notification, I ended up &lt;strong&gt;breaking the core promise of a notification system&lt;/strong&gt;: telling you when something happens.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Three things this bug taught me:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Test with real user setups, not just yours.&lt;/strong&gt; My single-monitor dev machine couldn't reproduce the issue. Multi-monitor setups, tablets propped up on desks, browsers left open on work machines — these are all "visible" to the OS.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;code&gt;document.hidden&lt;/code&gt; is about the OS viewport, not human attention.&lt;/strong&gt; The &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/Document/hidden" rel="noopener noreferrer"&gt;MDN docs&lt;/a&gt; are clear about this, but it's easy to project human meaning onto a boolean that was never designed to carry it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;When in doubt, notify.&lt;/strong&gt; A slightly redundant ping is annoying. A silently dropped message is a broken product.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Now, ShelfTalk might ping you even if you're looking right at it. But at least you'll never miss a message again. 🔔&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>bugsmash</category>
      <category>javascript</category>
      <category>webdev</category>
    </item>
    <item>
      <title>How I Got a Job Offer as a Fresher in an AI-Fearing Market — Without LeetCode or Club Leaderships on My Resume</title>
      <dc:creator>Dhruv Jani</dc:creator>
      <pubDate>Thu, 20 Aug 2026 00:43:48 +0000</pubDate>
      <link>https://dev.to/dj29/how-i-got-a-job-offer-as-a-fresher-in-an-ai-fearing-market-without-leetcode-or-club-leaderships-2gig</link>
      <guid>https://dev.to/dj29/how-i-got-a-job-offer-as-a-fresher-in-an-ai-fearing-market-without-leetcode-or-club-leaderships-2gig</guid>
      <description>&lt;p&gt;I didn't have an impressive LeetCode profile.&lt;/p&gt;

&lt;p&gt;I wasn't a club president.&lt;/p&gt;

&lt;p&gt;I didn't have a stack of leadership positions on my resume.&lt;/p&gt;

&lt;p&gt;If you've been anywhere near placement season this year, you know the vibe: an AI-scared job market, everyone grinding LeetCode, resumes stacked with club leaderships and internships. I had none of that. What I did have was a CPI that dipped before it climbed, one internship I was told to hide, and a platform I stumbled into almost by accident. This is that story.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Dip Nobody Warns You About
&lt;/h2&gt;

&lt;p&gt;First two semesters of B.Tech were easy — and that SPI doesn't even count toward your final CPI, so nobody sweats it. Sem 3 had just three subjects, still manageable. Then sem 4 hit: five subjects, a monthly exam cycle, two projects, and a hardware subject (8085 microprocessor) that I did not see coming. My CPI dropped from 8.52 to 8.13. My SPI that semester was 7.8 — the first time it had ever gone below 8.5.&lt;/p&gt;

&lt;p&gt;To make it worse, this was before AI IDEs were really a thing. Most of the tools we casually use today either didn't exist yet or were still too new to be genuinely useful.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Bounce Back
&lt;/h2&gt;

&lt;p&gt;Sem 5 came with an even heavier load — five subjects plus three projects. This was the semester I decided I couldn't afford to slip again. So I started using every AI IDE I could get my hands on — Copilot, Cursor, Blackbox, Warp — and built three projects for my sem assignments across three different stacks: a Flutter app, a MERN project (which would later become &lt;strong&gt;ShelfTalk&lt;/strong&gt;, revived and entered into GitHub's Finish-Up-A-Thon), and a .NET project.&lt;/p&gt;

&lt;p&gt;Result: SPI went from 7.8 to 8.54.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;8.52 → 7.80 → 8.54&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;CPI climbed back to 8.28. Not some massive academic comeback — but proof I could take a hit and recover.&lt;/p&gt;

&lt;h2&gt;
  
  
  Taking a Risk
&lt;/h2&gt;

&lt;p&gt;Even with the recovery, I had no LeetCode profile worth mentioning, and I knew I'd be up against roughly 300 people for on-campus placements. So in sem 6, I took a bit of a gamble — I started applying for internships while still commuting to college every day.&lt;/p&gt;

&lt;p&gt;I landed one: a paid, three-month, work-from-home internship at a small Bangalore startup. The first two months were fine. Then I became the only person in the IT department, got blamed for things I hadn't built, and watched the non-technical founder change UI flows every few days. The agency that had staffed a second developer alongside me cut that dev's hours down to four a day — which meant I was carrying 6+ hours on my own. My day looked like this:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6:30 AM&lt;/strong&gt; — leave home for college&lt;br&gt;
&lt;strong&gt;College&lt;/strong&gt; — all day&lt;br&gt;
&lt;strong&gt;5:30 PM&lt;/strong&gt; — get back home&lt;br&gt;
&lt;strong&gt;6 PM – midnight&lt;/strong&gt; — work&lt;/p&gt;

&lt;p&gt;No new hires. No real learning. Just &lt;em&gt;"use Cursor"&lt;/em&gt; as the answer to everything.&lt;/p&gt;

&lt;p&gt;I left five days before my sem 6 final exams. That's a story for another day — I'm not getting into all of it here.&lt;/p&gt;

&lt;p&gt;My professor, the one who'd helped me through most of B.Tech, gave me one piece of advice afterward: don't put this internship anywhere. Not the resume, not LinkedIn. His reasoning — the moment it's visible, the interview stops being about your skills and turns into an interrogation about why the internship was incomplete.&lt;/p&gt;
&lt;h2&gt;
  
  
  Rebuilding, One Hackathon at a Time
&lt;/h2&gt;

&lt;p&gt;With that internship off the table as a resume line, I knew I had to build something else to stand on. So I spent that summer vacation hacking — building out a stronger portfolio of domain-specific projects, drilling every system design concept I could, and deliberately switching tech stacks every time so nothing looked repetitive.&lt;/p&gt;

&lt;p&gt;Somewhere in there, a hackathon I'd entered announced its winners just 45 minutes after the submission deadline closed. A lot of participants were furious and reached out to the organizers, who gave vague, spinning non-answers. Contacting the hosting platform didn't help either.&lt;/p&gt;

&lt;p&gt;That frustration is what pushed me to actually explore an account I'd created on DEV.to back in January but never used. I already knew DEV had been acquired by MLH in February — and it clicked that this was the most authentic, professional space I could put my work in front of.&lt;/p&gt;
&lt;h2&gt;
  
  
  Finding DEV.to
&lt;/h2&gt;

&lt;p&gt;I started small: the Gemma 4 Challenge first, then GitHub's Finish-Up-A-Thon, then the June Solstice Game Jam. By the time placements rolled around, I had a genuinely solid project portfolio behind me.&lt;/p&gt;

&lt;p&gt;But portfolios don't get you shortlisted on their own. My resume kept getting filtered out — no club leadership, no internship listed. Standard rejection reasons.&lt;/p&gt;

&lt;p&gt;Then, a few days before the Finish-Up-A-Thon results were even announced, DEV.to emailed me: I'd been made a &lt;strong&gt;Trusted Member&lt;/strong&gt;, with moderation rights on posts.&lt;/p&gt;

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

&lt;p&gt;This email arrived a few days before the results.&lt;/p&gt;

&lt;p&gt;ShelfTalk — the MERN project from sem 5 that I revived for the Finish-Up-A-Thon — went on to place &lt;strong&gt;Top 10 of 500+ entries&lt;/strong&gt;:&lt;/p&gt;


&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/dj29/shelftalk-books-dont-talk-we-do-a-college-project-revived-o4o" class="crayons-story__hidden-navigation-link"&gt;ShelfTalk — Books Don't Talk. We Do. (A College Project, Revived)&lt;/a&gt;
    &lt;div class="crayons-article__cover crayons-article__cover__image__feed"&gt;
      &lt;iframe src="https://www.youtube.com/embed/qRF0U1AmdOc" title="ShelfTalk — Books Don't Talk. We Do. (A College Project, Revived)"&gt;&lt;/iframe&gt;
    &lt;/div&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
      &lt;a href="https://dev.to/dj29/shelftalk-books-dont-talk-we-do-a-college-project-revived-o4o" class="crayons-article__context-note crayons-article__context-note__feed"&gt;&lt;p&gt;GitHub “Finish-Up-A-Thon” Challenge Submission&lt;/p&gt;

&lt;/a&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/dj29" class="crayons-avatar  crayons-avatar--l  "&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%2Fuser%2Fprofile_image%2F3743406%2F227d53d3-1443-4ceb-9fb8-98c02ff9e60f.jpg" alt="dj29 profile" class="crayons-avatar__image" width="96" height="96"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/dj29" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Dhruv Jani
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Dhruv Jani
                &lt;a href="/++"&gt;&lt;img alt="Subscriber" class="subscription-icon" src="https://assets.dev.to/assets/subscription-icon-805dfa7ac7dd660f07ed8d654877270825b07a92a03841aa99a1093bd00431b2.png" width="166" height="102"&gt;&lt;/a&gt;
                
              
              &lt;div id="story-author-preview-content-3843058" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/dj29" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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%2Fuser%2Fprofile_image%2F3743406%2F227d53d3-1443-4ceb-9fb8-98c02ff9e60f.jpg" class="crayons-avatar__image" alt="" width="96" height="96"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Dhruv Jani&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/dj29/shelftalk-books-dont-talk-we-do-a-college-project-revived-o4o" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Jun 7&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/dj29/shelftalk-books-dont-talk-we-do-a-college-project-revived-o4o" id="article-link-3843058"&gt;
          ShelfTalk — Books Don't Talk. We Do. (A College Project, Revived)
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag crayons-tag--filled  " href="/t/showdev"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;showdev&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/devchallenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;devchallenge&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/githubchallenge"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;githubchallenge&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/webdev"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;webdev&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/dj29/shelftalk-books-dont-talk-we-do-a-college-project-revived-o4o" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/fire-f60e7a582391810302117f987b22a8ef04a2fe0df7e3258a5f49332df1cec71e.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;9&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/dj29/shelftalk-books-dont-talk-we-do-a-college-project-revived-o4o#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              9&lt;span class="hidden s:inline"&gt;&amp;nbsp;comments&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            4 min read
          &lt;/small&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


&lt;p&gt;So in a short window, I had a global challenge win, community recognition, and a trusted-member badge — three things that weren't there before. With just two changes to my resume, it started getting shortlisted. And once I cleared the DSA round for the first time, I had a strong hunch the rest — tech and HR interviews — wouldn't be as brutal. I was right.&lt;/p&gt;

&lt;p&gt;The .NET internship, hidden as it was, still helped a little in HR rounds — my professor's rule was simple: only bring it up if they explicitly ask for past experience, and if they push further, tell them everything, just not on social media.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Simform Day
&lt;/h2&gt;

&lt;p&gt;Simform came to campus on a Saturday. I had a close relative's social event the very next day. Honestly, I walked in expecting to get knocked out in round 2 (DSA) — I was running on empty from back-to-back interviews all week and mostly just wanted to make it to my cousins in time.&lt;/p&gt;

&lt;p&gt;I didn't get rejected. I made it all the way to the HR round, which stretched into the evening. I got the offer. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpx1sjsj5uwcmiiw7qlqf.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%2Fpx1sjsj5uwcmiiw7qlqf.png" alt="Simform offer letter" width="800" height="402"&gt;&lt;/a&gt;&lt;br&gt;
I ended up meeting my cousins a day late — but it was worth it when the results came in on Sunday and my TPO told me not to sit for any further placement drives.&lt;/p&gt;

&lt;p&gt;No shit, Sherlock. I wasn't going to.&lt;/p&gt;

&lt;p&gt;Simform was genuinely my best shot at this stage — after the internship I'd been through, what I wanted most was a company with an actual functioning HR department. That's rarer to find than it should be.&lt;/p&gt;




&lt;p&gt;So was it LeetCode? No.&lt;/p&gt;

&lt;p&gt;Was it club leadership? No.&lt;/p&gt;

&lt;p&gt;It was proof — projects, a win, a badge — piling up until my resume finally said something worth pausing on. That's the story, start to finish: a CPI that dipped and recovered, one internship I chose not to talk about, a scammy hackathon that (indirectly) led me to the right platform, and a global challenge win and community recognition that changed what my resume could say. No LeetCode grind, no club title — just consistent building and the right places to show it.&lt;/p&gt;

&lt;p&gt;If there's one line that sums up how I've come to see all of this, it's this shlok from the Bhagavad Gita:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;कर्मण्येवाधिकारस्ते मा फलेषु कदाचन।&lt;br&gt;
मा कर्मफलहेतुर्भूर्मा ते सङ्गोऽस्त्वकर्मणि॥&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Translation:&lt;/strong&gt; You have the right to perform your actions, but you are not entitled to the fruits of those actions. Never consider yourself the cause of the results, and never let attachment to results stop you from doing your work.&lt;/p&gt;

&lt;p&gt;I couldn't control when a hackathon would turn out to be scammy, when a startup would fall apart, or when a random DEV email would land in my inbox right before results came out. All I could actually control was showing up and building the next thing. The outcome sorted itself out.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;P.S.&lt;/strong&gt; I still don't have a particularly impressive LeetCode profile. And honestly? I'm okay with that.&lt;/p&gt;

</description>
      <category>career</category>
      <category>devjournal</category>
      <category>resume</category>
      <category>discuss</category>
    </item>
    <item>
      <title>Spicing Up the Web: Building "Angaar", an Immersive Indian Comfort Food Experience</title>
      <dc:creator>Dhruv Jani</dc:creator>
      <pubDate>Sat, 15 Aug 2026 05:34:08 +0000</pubDate>
      <link>https://dev.to/dj29/spicing-up-the-web-building-angaar-an-immersive-indian-comfort-food-experience-38go</link>
      <guid>https://dev.to/dj29/spicing-up-the-web-building-angaar-an-immersive-indian-comfort-food-experience-38go</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for &lt;a href="https://dev.to/challenges/frontend-2026-07-29"&gt;Frontend Challenge - Comfort Food Edition, Perfect Landing&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;I built &lt;strong&gt;Angaar (अंगार)&lt;/strong&gt; — an immersive, cinematic landing page for a fictional high-end Indian comfort food restaurant. &lt;em&gt;Angaar&lt;/em&gt; means &lt;strong&gt;"ember" or "burning coal"&lt;/strong&gt; in Hindi — the living heat at the heart of every Indian kitchen.&lt;/p&gt;

&lt;p&gt;The "Comfort Food" theme hit me personally. Indian comfort food isn't just &lt;em&gt;dal&lt;/em&gt; and &lt;em&gt;roti&lt;/em&gt; — it's the smell of a clay &lt;em&gt;chulha&lt;/em&gt;, the sound of a pressure cooker, your Naani's voice telling you to eat more. I didn't want to just display food. I wanted to build that &lt;strong&gt;feeling&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;So instead of a clean-grid restaurant template, I built an atmosphere:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🪔 An animated SVG &lt;strong&gt;diya&lt;/strong&gt; (oil lamp) at the hero — three layered CSS flame elements with staggered &lt;code&gt;alternate&lt;/code&gt; timing&lt;/li&gt;
&lt;li&gt;🎭 A theatre-curtain &lt;strong&gt;preloader&lt;/strong&gt; revealing the page with an SVG lotus and the phrase "Lighting the flame..."&lt;/li&gt;
&lt;li&gt;🍛 A &lt;strong&gt;horizontal immersive scroll&lt;/strong&gt; for the menu, so exploring dishes feels like a curated journey&lt;/li&gt;
&lt;li&gt;✨ A dual-layer &lt;strong&gt;custom cursor&lt;/strong&gt; — a fast dot and a slow glowing halo — both running on a single RAF loop&lt;/li&gt;
&lt;li&gt;🌶️ Floating &lt;strong&gt;spice particles&lt;/strong&gt; and rising &lt;strong&gt;ember effects&lt;/strong&gt; that make the page feel alive&lt;/li&gt;
&lt;li&gt;🏯 Authentic &lt;strong&gt;Dravidian/Hindu-Aryan temple motifs&lt;/strong&gt; (gopuram silhouettes, jali lattice, kolam dot-grids, trefoil arch friezes) worked into the background of every section&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The color palette follows spice rack logic: &lt;strong&gt;Saffron (#E8732A)&lt;/strong&gt;, &lt;strong&gt;Turmeric (#DAA520)&lt;/strong&gt;, &lt;strong&gt;Cardamom (#4A7C59)&lt;/strong&gt;, and &lt;strong&gt;Masala red (#C62828)&lt;/strong&gt; on a near-black base (#060503).&lt;/p&gt;

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

&lt;p&gt;&lt;iframe height="600" src="https://codepen.io/editor/JANI-DHRUV/embed/01a002b6-4125-7b43-a2f2-84f91252db43?height=600&amp;amp;default-tab=result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;🖥️ Best experienced on desktop for the full cursor, parallax, and particle experience — but fully responsive on mobile too!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Journey
&lt;/h2&gt;

&lt;p&gt;When I saw this challenge, I made one creative decision upfront: &lt;strong&gt;no Mughal aesthetics&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Most Indian-themed web designs default to Mughal ornamentation — the same lotus filigree and marble inlay patterns. It's beautiful, but it's also the generic visual shorthand. For a restaurant built around the &lt;em&gt;chulha&lt;/em&gt; — which is quintessentially rural, humble, and Dravidian in character — I needed a more grounded visual language. So I went with &lt;strong&gt;South and North Indian temple architecture&lt;/strong&gt; instead: gopuram skylines, jali screens, kolam rangoli, corbelled arches. It made the site feel &lt;em&gt;rooted&lt;/em&gt; rather than decorative.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Technical Process:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The sticky scroll was my favorite system to build. Each section is &lt;code&gt;position: sticky&lt;/code&gt; with stacked &lt;code&gt;z-index&lt;/code&gt;, so they layer over each other as you scroll — like film reels — using zero scroll-jacking:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.section&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;position&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;sticky&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;top&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--nav-h&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nl"&gt;box-shadow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;-20px&lt;/span&gt; &lt;span class="m"&gt;50px&lt;/span&gt; &lt;span class="n"&gt;rgba&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="m"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The menu carousel was another fun problem. Instead of tracking a hardcoded active index, I detect the active slide by finding whichever slide's &lt;strong&gt;center is geometrically closest&lt;/strong&gt; to the scroller's viewport center — so it stays accurate on any screen size:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;scrollerCenter&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;scroller&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;scrollLeft&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;scroller&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;clientWidth&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nx"&gt;slides&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;slide&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;slideCenter&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;slide&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;offsetLeft&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;slide&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;offsetWidth&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;diff&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;abs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;scrollerCenter&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;slideCenter&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;diff&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;minDiff&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;minDiff&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;diff&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;closest&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;slide&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The section title split-text animation uses a recursive DOM walker that splits characters while safely skipping &lt;code&gt;&amp;lt;br&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;span&amp;gt;&lt;/code&gt; elements. Each character fades in with a &lt;code&gt;rotateX(-45deg) → 0&lt;/code&gt; fold-in effect, staggered at 30ms per character — no GSAP needed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What I'm proud of:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Doing everything — the preloader, parallax, carousels, cursor, particles — in &lt;strong&gt;pure vanilla HTML, CSS, and JS with zero animation libraries&lt;/strong&gt;. The constraint forced me to really understand &lt;code&gt;requestAnimationFrame&lt;/code&gt;, &lt;code&gt;IntersectionObserver&lt;/code&gt;, and CSS &lt;code&gt;mask-image&lt;/code&gt; techniques I wouldn't normally reach for. The bilingual section labels (&lt;em&gt;मेनू · THE MENU&lt;/em&gt;, &lt;em&gt;अनुभव · THE EXPERIENCE&lt;/em&gt;) were also important — the cultural grounding needed to be linguistic, not just visual.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What I learned:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Getting the animated diya flame to feel &lt;em&gt;alive&lt;/em&gt; (not like a looping GIF) took far more iteration than expected — three separate &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; elements on slightly offset &lt;code&gt;alternate&lt;/code&gt; timing cycles, at different blur levels, was the key. And &lt;code&gt;mix-blend-mode: screen&lt;/code&gt; on the cursor glow halo was a small discovery that made a big visual difference — it only brightens content beneath it without washing out the dark background.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What's next:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I'd love to connect the reservation form to a WhatsApp Business API, add dish modal expansions with spice profiles and chef's notes, and experiment with a toggleable ambient crackling fire sound to push the atmosphere even further.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>frontendchallenge</category>
      <category>webdev</category>
      <category>javascript</category>
    </item>
    <item>
      <title>The Imitation Game — A Reverse Turing Test Set on June 21, 1952</title>
      <dc:creator>Dhruv Jani</dc:creator>
      <pubDate>Fri, 12 Jun 2026 20:15:00 +0000</pubDate>
      <link>https://dev.to/dj29/the-imitation-game-a-reverse-turing-test-set-on-june-21-1952-4dl2</link>
      <guid>https://dev.to/dj29/the-imitation-game-a-reverse-turing-test-set-on-june-21-1952-4dl2</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/june-game-jam-2026-06-03"&gt;June Solstice Game Jam&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Update (Jun 15): Fixed a display issue where signal responses were being clipped mid-sentence in the terminal panels. All transmissions now render in full. If you visited earlier and saw truncated responses — the game is fully playable now.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;"I propose to consider the question: Can machines think?"&lt;/em&gt;&lt;br&gt;
— Alan Turing, 1950&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;June 21, 1952. Wilmslow, Cheshire, England.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Alan Turing — the man who broke the Enigma code, shortened World War II by an estimated two years, and laid the foundation for every computer that exists today — is at home, awaiting sentencing. His crime? Being gay.&lt;/p&gt;

&lt;p&gt;That same year, he had already published the paper that defines our age. In it, he proposed &lt;strong&gt;The Imitation Game&lt;/strong&gt;: a test to determine whether a machine can convincingly imitate a human. We now call it the Turing Test.&lt;/p&gt;

&lt;p&gt;This game turns that test on you.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;&lt;a href="https://the-imitation-game-dj29.vercel.app" rel="noopener noreferrer"&gt;▶ Play The Imitation Game&lt;/a&gt;&lt;/strong&gt; ← &lt;em&gt;Desktop + headphones recommended&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Imitation Game: Operation Imitation&lt;/strong&gt; is a tense, atmospheric terminal game set on June 21, 1952 — the summer solstice, the longest day of the year, and the day Alan Turing awaited his sentence.&lt;/p&gt;

&lt;p&gt;You play as a GCHQ analyst. Three signals come through on a classified channel. One is a real human operative. The other two are AI entities attempting to pass as human — powered in real time by the &lt;strong&gt;Gemini API&lt;/strong&gt;. You have five transmissions per round, a countdown timer, and three clearance levels before the operation is terminated.&lt;/p&gt;

&lt;p&gt;It's a reverse Turing Test. Instead of asking whether a machine can fool a human, the game asks whether &lt;em&gt;you&lt;/em&gt; can spot the machine. Every response is live Gemini inference. No scripts. No pre-written answers. The AI suspects actually think, respond, and try to fool you.&lt;/p&gt;

&lt;h3&gt;
  
  
  How it connects to the theme
&lt;/h3&gt;

&lt;p&gt;The game hits every theme this jam is about — not as decoration, but as the actual structure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;June Solstice&lt;/strong&gt; — The game takes place across five rounds tracking June 21st from 06:00 AM to 09:00 PM. The CRT terminal shifts color temperature with the sun — warm amber at dawn, classic green at midday, cold blue at nightfall. The longest day of the year is your playing field.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pride&lt;/strong&gt; — Turing was prosecuted for being gay. The game doesn't soften this. Classified dossier briefings between rounds tell his real story — his conviction, his forced chemical castration, his death at 41. The game's central question — &lt;em&gt;who gets to be considered human?&lt;/em&gt; — is the Turing Test, and it's also what Pride has always been asking.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Light and Darkness&lt;/strong&gt; — A day of maximum light that ends in darkness. Mechanically and metaphorically, that's the game.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/oVWAlqr_K5s" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;h3&gt;
  
  
  The Interrogation Interface
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;A look at the zero-dependency vanilla CSS CRT terminal and the final 'decision moment' of a round.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;[&lt;em&gt;No transmissions remaining. The player must choose who lives and who is terminated.&lt;/em&gt;]&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0azozz5xi8vf01jdpqey.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%2F0azozz5xi8vf01jdpqey.png" alt=" " width="800" height="526"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;[&lt;em&gt;Signal identified. Operative secured.&lt;/em&gt;]&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbgh203uxfbwmh9o5au7c.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%2Fbgh203uxfbwmh9o5au7c.png" alt=" " width="800" height="521"&gt;&lt;/a&gt;&lt;/p&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/JaniDhruv" rel="noopener noreferrer"&gt;
        JaniDhruv
      &lt;/a&gt; / &lt;a href="https://github.com/JaniDhruv/the-imitation-game" rel="noopener noreferrer"&gt;
        the-imitation-game
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Can you tell human from machine? Interrogate three Cold War-era signals across 5 rounds and find the human — if there is one. A Turing Test game powered by Gemini AI. June 21, 1952. The longest day.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;p&gt;
  &lt;a rel="noopener noreferrer" href="https://github.com/JaniDhruv/the-imitation-game/public/og-banner.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2FJaniDhruv%2Fthe-imitation-game%2FHEAD%2Fpublic%2Fog-banner.png" alt="The Imitation Game — Operation Imitation" width="480"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/1e4514393d612d6f8931af153eb3199e771f2412fca0e2abfed11c95f1ede9fd/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4a554e452532303231253243253230313935322d5448452532304c4f4e474553542532304441592d3333666630303f7374796c653d666f722d7468652d6261646765266c6162656c436f6c6f723d306130663061"&gt;&lt;img src="https://camo.githubusercontent.com/1e4514393d612d6f8931af153eb3199e771f2412fca0e2abfed11c95f1ede9fd/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4a554e452532303231253243253230313935322d5448452532304c4f4e474553542532304441592d3333666630303f7374796c653d666f722d7468652d6261646765266c6162656c436f6c6f723d306130663061" alt="June 21, 1952"&gt;&lt;/a&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/46743d4a4b6d3c2fa3b321c41d1531297fef51f223812c03da9068754e4d621d/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f504f574552454425323042592d47454d494e4925323041492d3432383546343f7374796c653d666f722d7468652d6261646765266c6162656c436f6c6f723d306130663061"&gt;&lt;img src="https://camo.githubusercontent.com/46743d4a4b6d3c2fa3b321c41d1531297fef51f223812c03da9068754e4d621d/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f504f574552454425323042592d47454d494e4925323041492d3432383546343f7374796c653d666f722d7468652d6261646765266c6162656c436f6c6f723d306130663061" alt="Gemini AI"&gt;&lt;/a&gt;
  &lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/642465583c976f2333e2632bb2cb5cd1fdaf909ac1e2ac42ef945d0d555b6b21/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5354415455532d4f5045524154494f4e414c2d3333666630303f7374796c653d666f722d7468652d6261646765266c6162656c436f6c6f723d306130663061"&gt;&lt;img src="https://camo.githubusercontent.com/642465583c976f2333e2632bb2cb5cd1fdaf909ac1e2ac42ef945d0d555b6b21/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5354415455532d4f5045524154494f4e414c2d3333666630303f7374796c653d666f722d7468652d6261646765266c6162656c436f6c6f723d306130663061" alt="Status: Operational"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;THE IMITATION GAME&lt;/h1&gt;
&lt;/div&gt;

&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;⬛ OPERATION IMITATION — CLASSIFICATION: ULTRA ⬛&lt;/h3&gt;
&lt;/div&gt;



&lt;p&gt;
  &lt;strong&gt;Three signals. One human. Five transmissions. The clock is running.&lt;/strong&gt;&lt;br&gt;
  &lt;em&gt;Can you tell the difference — or will the machines tell the difference for you?&lt;/em&gt;
&lt;/p&gt;

&lt;p&gt;
  &lt;a href="https://the-imitation-game-dj29.vercel.app" rel="nofollow noopener noreferrer"&gt;&lt;strong&gt;▶ &amp;nbsp;INITIATE TERMINAL SESSION&lt;/strong&gt;&lt;/a&gt;
  &amp;nbsp;•&amp;nbsp;
  &lt;a href="https://github.com/JaniDhruv/the-imitation-game#-the-concept" rel="noopener noreferrer"&gt;The Concept&lt;/a&gt;
  &amp;nbsp;•&amp;nbsp;
  &lt;a href="https://github.com/JaniDhruv/the-imitation-game#-features" rel="noopener noreferrer"&gt;Features&lt;/a&gt;
  &amp;nbsp;•&amp;nbsp;
  &lt;a href="https://github.com/JaniDhruv/the-imitation-game#-technical-deep-dive" rel="noopener noreferrer"&gt;Tech Deep Dive&lt;/a&gt;
  &amp;nbsp;•&amp;nbsp;
  &lt;a href="https://github.com/JaniDhruv/the-imitation-game#-setup" rel="noopener noreferrer"&gt;Setup&lt;/a&gt;
&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"I propose to consider the question: Can machines think?"&lt;/em&gt;
— Alan Turing, &lt;strong&gt;Computing Machinery and Intelligence&lt;/strong&gt;, 1950&lt;/p&gt;
&lt;/blockquote&gt;




&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;▋ The Concept&lt;/h2&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;June 21, 1952. Wilmslow, Cheshire, England.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Alan Turing — the man who broke the Enigma code, shortened World War II by an estimated two years, saved millions of lives, and laid the foundation for every computer that exists today — is at home, awaiting sentencing. His crime? Being gay.&lt;/p&gt;

&lt;p&gt;That same year, he had already published the paper that defines our age. In it, he proposed &lt;strong&gt;The Imitation Game&lt;/strong&gt;: a test to determine whether a machine can convincingly…&lt;/p&gt;&lt;/div&gt;


&lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/JaniDhruv/the-imitation-game" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


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

&lt;h3&gt;
  
  
  The Core Loop
&lt;/h3&gt;

&lt;p&gt;The entire game runs on live Gemini inference. Each of the three suspects per round is a distinct Gemini model instance with its own system context. When you send a transmission, it hits a Vercel serverless function (&lt;code&gt;api/transmit.js&lt;/code&gt;) which calls the Gemini API with the full conversation history and returns the response. No caching. No pre-generation. Every response is real.&lt;/p&gt;

&lt;h3&gt;
  
  
  The AI Persona System
&lt;/h3&gt;

&lt;p&gt;Seven AI personas are in play across the game. Each one has a &lt;strong&gt;hidden behavioral tell&lt;/strong&gt; — a pattern baked into their system prompt that they cannot fully suppress:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Codename&lt;/th&gt;
&lt;th&gt;Hidden Tell&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CIPHER&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Cannot answer questions about fear. Always deflects.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;ORACLE&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Structures every response as a sequence: &lt;em&gt;"First… Second…"&lt;/em&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;MARLOWE&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Every answer involves sensory detail — smell, taste, texture.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;STATIC&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Echoes an unusual word from your message back at you.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;WREN&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Never uses the word "I" in any form. Ever.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;ARGUS&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Responds to every question with a question.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;ECHO&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Mirrors your vocabulary, tone, and sentence length exactly.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Alongside them: five fully realized 1952 British human characters — each with their own backstory, speech patterns, and emotional triggers that crack under the right pressure. They have no idea they're being tested.&lt;/p&gt;

&lt;h3&gt;
  
  
  Prompt Engineering as Game Design
&lt;/h3&gt;

&lt;p&gt;The real design work in this project lives in the system prompts. Each persona's instructions had to be a precisely balanced act: convincing enough to deceive a careless player, but with an embedded behavioral signature subtle enough to reward a careful one.&lt;/p&gt;

&lt;p&gt;The difficulty system is fundamentally a prompt engineering system:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Easy&lt;/strong&gt; — Lean into the tell. Make it obvious.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Medium&lt;/strong&gt; — Standard behavioral patterns.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hard&lt;/strong&gt; — Suppress the tell. Controlled imperfection only.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Nightmare&lt;/strong&gt; — Full suppression + active mimicry of human inconsistency. Rules not disclosed.
On harder difficulties, AI personas also receive additional behavioral instructions that change how they react to direct questioning — making them actively work against you, not just passively hide.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The Technical Stack
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;React 19 + Vite / React Router v7
Google Gemini API (@google/genai)
Vercel serverless functions
Web Audio API — 100% procedural sound synthesis
Vanilla CSS — full CRT design system
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  The CRT Aesthetic
&lt;/h3&gt;

&lt;p&gt;The entire terminal is built in vanilla CSS with zero external UI libraries. Scanline overlay, screen vignette, CRT curvature simulation, phosphor text glow with dynamic color temperature, chromatic aberration glitch effects on wrong answers, and typewriter character-by-character text reveal on every incoming transmission. The screen literally flickers more as the night progresses.&lt;/p&gt;

&lt;h3&gt;
  
  
  Procedural Audio
&lt;/h3&gt;

&lt;p&gt;Zero audio files. Every sound is synthesized in real time using the Web Audio API — from the 50Hz CRT ambient hum with brown noise, to mechanical typewriter clicks on every keystroke, to the heartbeat pulse in the final 30 seconds, to the klaxon alarm when you get it wrong. The &lt;code&gt;SoundEngine.js&lt;/code&gt; singleton builds everything from oscillators, noise buffers, biquad filters, and gain envelopes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Fallback Architecture
&lt;/h3&gt;

&lt;p&gt;If Gemini API quota is exhausted (which can happen when multiple people play simultaneously during judging), the system silently fails over to an OpenAI-compatible endpoint running &lt;strong&gt;Meta's LLaMA 3.1 8B Instruct&lt;/strong&gt; via NVIDIA NIM. Full persona rules are maintained. The game never crashes.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Solstice Day/Night Cycle
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Round 1 — 06:00 AM — DAWN      — Warm amber phosphor
Round 2 — 10:00 AM — MORNING   — Classic green CRT
Round 3 — 02:00 PM — ZENITH    — Peak brightness, golden tint
Round 4 — 06:00 PM — DUSK      — Sunset amber/orange
Round 5 — 09:00 PM — NIGHTFALL — Cold, dark blue-green
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;useSolsticeTheme&lt;/code&gt; hook manages CSS custom property injection across the five phases, creating a visual arc that mirrors the actual solstice.&lt;/p&gt;




&lt;h2&gt;
  
  
  Prize Category
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🧠 Best Ode to Alan Turing
&lt;/h3&gt;

&lt;p&gt;This game &lt;em&gt;is&lt;/em&gt; the Turing Test — not inspired by it, not referencing it, but literally instantiating it as an interactive experience.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The title is Turing's own name for his proposed test&lt;/li&gt;
&lt;li&gt;The interrogation format mirrors his exact proposed structure from the 1950 paper&lt;/li&gt;
&lt;li&gt;The AI personas directly embody his central question: &lt;em&gt;can machines deceive?&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;The game is set on June 21, 1952 — the actual day he was awaiting sentencing&lt;/li&gt;
&lt;li&gt;The ending asks the question he asked in 1950 — and after playing the game, the answer lands differently
Turing imagined a machine that could imitate a human well enough to fool an interrogator. This game puts you in the interrogator's chair, facing exactly that machine — powered by the kind of AI he spent his life theorizing about. Every mechanic is a direct reference. The game exists because of him.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🤖 Best Google AI Usage
&lt;/h3&gt;

&lt;p&gt;Google AI is not a feature added to this game. It &lt;em&gt;is&lt;/em&gt; the game.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gemini API&lt;/strong&gt; powers the entire core mechanic. Every suspect response across every round is live Gemini inference. The persona system uses carefully engineered system instructions to create 7 distinct behavioral identities with difficulty-adaptive tells. This isn't a chatbot wrapper — it's a game mechanic built entirely through prompt engineering. The prompts &lt;em&gt;are&lt;/em&gt; the game design.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Antigravity&lt;/strong&gt; (Google's agentic AI coding assistant) was used throughout development as a pair programming collaborator — from architecture decisions and component structure to the audio synthesis system and the CRT visual design. The concept, creative direction, persona design, and narrative were human-driven; Antigravity helped execute and iterate at speed.&lt;/p&gt;

&lt;p&gt;The combination of Gemini as the live game engine and Antigravity as the development collaborator makes this, genuinely, a Google AI project at every layer.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The longest day of the year. The shortest distance between human and machine.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;In memory of Alan Mathison Turing (23 June 1912 — 7 June 1954)&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>gamechallenge</category>
      <category>gamedev</category>
      <category>showdev</category>
    </item>
    <item>
      <title>ShelfTalk — Books Don't Talk. We Do. (A College Project, Revived)</title>
      <dc:creator>Dhruv Jani</dc:creator>
      <pubDate>Sun, 07 Jun 2026 20:13:47 +0000</pubDate>
      <link>https://dev.to/dj29/shelftalk-books-dont-talk-we-do-a-college-project-revived-o4o</link>
      <guid>https://dev.to/dj29/shelftalk-books-dont-talk-we-do-a-college-project-revived-o4o</guid>
      <description>&lt;p&gt;"Books don't talk. We do." — How I Finally Shipped the College Project I Almost Abandoned&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This is a submission for the &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;/p&gt;

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

&lt;p&gt;Semester 5. Advanced Technologies subject. The brief: build a full MERN application from scratch.&lt;/p&gt;

&lt;p&gt;I built ShelfTalk — a social platform for book lovers. Book clubs, real-time chat, live synchronized reading sessions, discovery, profiles. Think Goodreads meets Discord, built solo in a college semester.&lt;/p&gt;

&lt;p&gt;I submitted it. Passed the course. Closed the laptop.&lt;/p&gt;

&lt;p&gt;Then it sat on GitHub for months, untouched, with a tagline nobody ever read and features that half-worked on localhost and nowhere else.&lt;/p&gt;

&lt;p&gt;The GitHub Finish-Up-A-Thon gave me the deadline I'd been avoiding.&lt;/p&gt;

&lt;p&gt;🔗 Live: &lt;a href="https://shelftalk-community.vercel.app" rel="noopener noreferrer"&gt;shelftalk-community.vercel.app&lt;/a&gt;&lt;br&gt;
🐙 GitHub: &lt;a href="https://github.com/JaniDhruv/ShelfTalk" rel="noopener noreferrer"&gt;github.com/JaniDhruv/ShelfTalk&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;



&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/qRF0U1AmdOc" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Create an account and open two tabs — real-time chat and the Live Reading Room are best experienced with a second window.&lt;/p&gt;

&lt;p&gt;(&lt;em&gt;Landing Page - Hero Section&lt;/em&gt;)&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkgxm7e923gplvaqipsx0.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%2Fkgxm7e923gplvaqipsx0.png" alt="Landing page" width="800" height="556"&gt;&lt;/a&gt;&lt;/p&gt;

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

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

&lt;p&gt;(&lt;em&gt;1-1 Chats&lt;/em&gt;)&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F29ot4h45t6qhgg1e4jef.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%2F29ot4h45t6qhgg1e4jef.png" alt="Chat" width="800" height="529"&gt;&lt;/a&gt;&lt;/p&gt;

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

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

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

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

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

&lt;p&gt;(&lt;em&gt;Personal Profile Diary&lt;/em&gt;)&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa9ha1b8lb8pnwvvftt8e.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%2Fa9ha1b8lb8pnwvvftt8e.png" alt="Personal Profile Diary" width="800" height="507"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Comeback Story - What Was Broken vs What Ships Now
&lt;/h2&gt;

&lt;p&gt;When I submitted ShelfTalk for my final grade, the codebase was held together by duct tape. It was good enough to pass, but not good enough to ship. Here is how I tore it down and rebuilt it for production:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Real-Time Chat — rebuilt from scratch&lt;/strong&gt;&lt;br&gt;
Ripped out the REST polling and replaced it with a full Socket.io implementation. Messages now deliver instantly. Presence indicators show who's online. Group chats stay synced across all members without a single refresh.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Live Reading Rooms — brand new feature&lt;/strong&gt;&lt;br&gt;
This is the one I always wanted to build but ran out of time for. A book club can start a synchronized reading session — members join, update their page in real time, drop spoiler-safe emoji reactions at specific pages, and compete on a leaderboard. A community heatmap shows where everyone is clustered across the book. Built entirely during this revival.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Reading Diary — brand new feature&lt;/strong&gt;&lt;br&gt;
A personal daily reading log. Track your reading journey, your streaks, your progress. Something quiet and personal in an otherwise social app.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Push Notifications — brand new feature&lt;/strong&gt;&lt;br&gt;
Native desktop notifications for new messages, group invites, group activity, and reading room events.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Everything else that was broken — fixed&lt;/strong&gt;&lt;br&gt;
Local file uploads migrated to MongoDB GridFS. Local MongoDB migrated to MongoDB Atlas. JWT properly implemented across all protected routes. CRA migrated to Vite for dramatically faster builds. The entire app deployed to Vercel and Render — not just running on my laptop.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Engineering Lessons:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;State Consistency&lt;/strong&gt;: Learned how to manage race conditions in real-time WebSockets using acknowledgment callbacks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Build Optimization&lt;/strong&gt;: Successfully migrated a monolithic CRA build to Vite, reducing HMR times by 80%.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cloud Migration&lt;/strong&gt;: Transitioned from a local instance to MongoDB Atlas + GridFS for production-grade file storage.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Copilot was the pair programmer that made this revival possible in a tight timeline.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Live Reading Rooms&lt;/strong&gt;&lt;br&gt;
The hardest part was synchronizing state across multiple clients without race conditions. I asked Copilot Chat to explain the best Socket.io pattern for this — it walked me through using acknowledgment callbacks on socket emissions to guarantee state consistency when a user joins mid-session. It then scaffolded the initial join_reading_room and page_updated event handlers that became the backbone of the entire feature.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Reading Diary&lt;/strong&gt;&lt;br&gt;
I knew I wanted a diary but wasn't sure what data actually makes it useful. Copilot Chat helped me brainstorm — daily page counts, reading streaks, mood tags, session duration — then generated the Mongoose schema structure. What would have taken an hour of documentation reading took 10 minutes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Vite Migration&lt;/strong&gt;&lt;br&gt;
Moving from CRA to Vite surfaced a lot of subtle import errors and environment variable differences — process.env everywhere had to become import.meta.env. Copilot's inline suggestions caught most of these automatically as I typed. It knew the Vite conventions and autocompleted the correct patterns before I even looked them up.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;UI Polish&lt;/strong&gt;&lt;br&gt;
The new chat bubbles, leaderboard ranking cards, reading room ambient gradients — Copilot autocompleted flexbox layouts and suggested responsive breakpoints throughout. Small wins that added up to hours saved.&lt;/p&gt;

&lt;p&gt;Built with ☕ and too many late nights.&lt;br&gt;
&lt;a href="https://shelftalk-community.vercel.app" rel="noopener noreferrer"&gt;shelftalk-community.vercel.app&lt;/a&gt;&lt;br&gt;
&lt;a class="mentioned-user" href="https://dev.to/dj29"&gt;@dj29&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>githubchallenge</category>
      <category>webdev</category>
      <category>showdev</category>
    </item>
    <item>
      <title>FinePrint — An AI Pocket Lawyer That Decodes Predatory Contracts Using Gemma 4</title>
      <dc:creator>Dhruv Jani</dc:creator>
      <pubDate>Sun, 24 May 2026 17:40:40 +0000</pubDate>
      <link>https://dev.to/dj29/fineprint-an-ai-pocket-lawyer-that-decodes-predatory-contracts-using-gemma-4-9n6</link>
      <guid>https://dev.to/dj29/fineprint-an-ai-pocket-lawyer-that-decodes-predatory-contracts-using-gemma-4-9n6</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/google-gemma-2026-05-06"&gt;Gemma 4 Challenge: Build with Gemma 4&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;## What We Built&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Last placement season, a friend came to me with a job offer letter. He was excited — first real offer. I read clause 3. It said if he quit before 3 years, he owed the company ₹2,00,000. He had no idea it was there. He nearly signed it. He would have been locked in for 3 years with no way out. He's a developer. That's his entire early career.&lt;/p&gt;

&lt;p&gt;He's not alone. Every year, thousands of students sign employment bonds, internship agreements, and rental leases without understanding what they're agreeing to. The language is deliberately dense. The penalties are buried in clause 4, clause 7, clause 11. And most people — especially fresh graduates — don't have a lawyer to call.&lt;/p&gt;

&lt;p&gt;That's why we built FinePrint.&lt;/p&gt;

&lt;p&gt;FinePrint is an open-source AI contract protection tool powered by Gemma 4. Upload a photo, PDF, or paste any contract text. FinePrint reads it, finds every trap, and tells you exactly what's dangerous, what to negotiate, and what to never sign.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What you get:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🔴 &lt;strong&gt;Risk Score (0–100)&lt;/strong&gt; — objective danger level of the contract&lt;/li&gt;
&lt;li&gt;🟡 &lt;strong&gt;Compatibility Score&lt;/strong&gt; — how well the contract matches your personal goals&lt;/li&gt;
&lt;li&gt;⚖️ &lt;strong&gt;Final Verdict&lt;/strong&gt; — ACCEPT / NEGOTIATE / REJECT with direct reasoning&lt;/li&gt;
&lt;li&gt;Plain English explanation of every red flag&lt;/li&gt;
&lt;li&gt;A safer suggested rewrite for every dangerous clause&lt;/li&gt;
&lt;li&gt;Actionable negotiation tips per clause&lt;/li&gt;
&lt;li&gt;A ready-to-send personalized negotiation email&lt;/li&gt;
&lt;li&gt;Shareable report link + downloadable PDF&lt;/li&gt;
&lt;li&gt;Contract comparison — upload v1 and v2, see what changed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This isn't a document reader. It's a contract protection engine. Reading a document tells you what it says. FinePrint tells you what it means for your specific situation, what the company is trying to take from you, and exactly what to say back.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fphcb4u11iu8diank9tpe.jpeg" 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%2Fphcb4u11iu8diank9tpe.jpeg" alt="The FinePrint homepage — upload a contract or try a built-in example" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;## Demo&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;🔗 Live: &lt;a href="https://tarkashlabs-fineprint.vercel.app" rel="noopener noreferrer"&gt;https://tarkashlabs-fineprint.vercel.app&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Want to try it yourself? Go to the live app and click "Campus Bond" under Try an example. Fill in your requirements and hit Analyze.&lt;/p&gt;

&lt;p&gt;Here's what FinePrint returned on a real predatory internship contract:&lt;br&gt;
🔴 Risk Score:        98 / 100  — Dangerous&lt;br&gt;
🔴 Compatibility:     20 / 100  — Low Match&lt;br&gt;&lt;br&gt;
❌ Verdict:           REJECT&lt;/p&gt;

&lt;p&gt;"The contract violates every user requirement — unpaid position, &lt;br&gt;
IP ownership of personal projects, ₹1,00,00,000 bond penalty, &lt;br&gt;
mandatory overtime, and an 18-month non-compete."&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdntjayp99qmhw7o20edw.jpeg" 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%2Fdntjayp99qmhw7o20edw.jpeg" alt="The FinePrint homepage — upload a contract or try a built-in example" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcforgwcxag9tckr5c5at.jpeg" 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%2Fcforgwcxag9tckr5c5at.jpeg" alt="Every red flag comes with a plain English explanation, negotiation tip, and a safer clause rewrite with space for asking a follow-up question" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fngdewubiq1czp8tfyxqg.jpeg" 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%2Fngdewubiq1czp8tfyxqg.jpeg" alt="Gemma 4 Dense 31B drafts a personalized negotiation email — ready to send to HR" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;FinePrint also has a &lt;strong&gt;Compare Mode&lt;/strong&gt; — upload the original and revised contract, and Gemma 4 tells you exactly what improved, what's still dangerous, and what's new.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7bjqkc41xu42rxaeiay2.jpeg" 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%2F7bjqkc41xu42rxaeiay2.jpeg" alt="FinePrint Compare Mode — upload two versions of a contract and see exactly what changed, what was resolved, and what red flags remain" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flkcqqsod208v229wmkvv.jpeg" 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%2Flkcqqsod208v229wmkvv.jpeg" alt="FinePrint Compare Mode — Expanded clause comparison analysis" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;## Code&lt;/strong&gt;&lt;/p&gt;



&lt;p&gt;🐙 GitHub: &lt;a href="https://github.com/Tarkash-Labs/FinePrint" rel="noopener noreferrer"&gt;https://github.com/Tarkash-Labs/FinePrint&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Frontend:  React + Vite + Tailwind CSS
Backend:   Python + FastAPI + async SSE streaming  
AI:        Gemma 4 via Google AI Studio
Deploy:    Vercel + Render
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The backend is ~650 lines of async Python. Results stream clause by clause as Gemma 4 processes them — red flags appear in real time, not after a long wait. All report state is preserved in a stateless shareable URL using gzip compression — no database, no server-side storage.&lt;br&gt;
Here's the core of what makes FinePrint work — the prompt that sends both the contract AND the user's personal goals to Gemma 4 simultaneously:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;_build_analysis_prompt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;contract_label&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;focus_areas&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;requirements&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
  &lt;span class="n"&gt;requirements_text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requirements&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;strip&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;None provided.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;
You are a ruthless, detail-oriented legal expert specializing in &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;contract_label&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; contracts. Your job is to protect the user.
Analyze this contract and return a JSON with exactly these fields:
{{
  &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;risk_score&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;: &amp;lt;integer 0-100&amp;gt;,
  &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;compatibility_score&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;: &amp;lt;integer 0-100&amp;gt;,
  &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;verdict&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;: &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ACCEPT&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt; | &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;NEGOTIATE&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt; | &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;REJECT&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;,
  &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;verdict_reason&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;: &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;&amp;lt;1-2 sentence explanation referencing requirements and clauses&amp;gt;&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;,
  &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;requirement_breakdown&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;: [
    {{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;requirement&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;: &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;&amp;lt;specific user requirement&amp;gt;&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;, &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;met&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;: true/false, &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;explanation&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;: &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;&amp;lt;why it was or wasn&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;t met&amp;gt;&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;}}
  ],
  &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;red_flags&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;: [
    {{
      &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;clause_title&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;: &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;...&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;, 
      &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;clause_text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;: &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;&amp;lt;EXACT text from the contract&amp;gt;&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;, 
      &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;plain_english_explanation&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;: &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;&amp;lt;Briefly state the risk&amp;gt;&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;, 
      &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;negotiation_tip&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;: &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;&amp;lt;Actionable advice on what the user should ask to change&amp;gt;&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;,
      &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;suggested_rewrite&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;: &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;&amp;lt;Provide a safer, alternative 1-2 sentence rewrite for this clause that the user can propose&amp;gt;&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;,
      &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;severity&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;: &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;high|medium|low&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;
    }}
  ],
  &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;safe_clauses&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;: [{{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;clause_title&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;: &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;...&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;, &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;plain_english_explanation&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;: &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;...&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;}}]
}}

CRITICAL RULES:
1. Return ONLY valid JSON. No preamble. No markdown blocks.
2. DETECT ALL RED FLAGS. Do not summarize them into one. If there are 5 bad clauses, list 5 red flags.
3. You MUST extract the exact original text for &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;clause_text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;. 
4. The &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;risk_score&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt; is objective based on standard legal risks. Focus heavily on: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;focus_areas&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;.
5. The &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;compatibility_score&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt; MUST directly reflect the User Requirements below. If a requirement is completely violated, score drops.

User Requirements to evaluate against:
&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;requirements_text&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;

Verdict guidance:
- ACCEPT when risk &amp;lt;= 30 and compatibility &amp;gt;= 70.
- REJECT when risk &amp;gt;= 61 or compatibility &amp;lt;= 30.
- Otherwise NEGOTIATE.
&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;strip&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This single prompt is why FinePrint's output is personalized and not generic. Gemma 4 reads the contract and the user's life goals at the same time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;## How We Used Gemma 4&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The model routing was a deliberate decision made after real testing — not a default choice.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Step 1 — Gemma 4 MoE → Multimodal OCR&lt;/strong&gt;&lt;br&gt;
When a user uploads a photo or PDF, the MoE model reads the document image directly and extracts the raw text. A user can photograph a physical contract — an actual printed piece of paper — with their phone and upload it. Gemma 4's native multimodal vision handles the rest. No manual copy-paste. No fragile third-party OCR library.&lt;/p&gt;

&lt;p&gt;This step doesn't need legal reasoning. It needs fast, accurate image reading. The MoE architecture is the right fit.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2 — Gemma 4 Dense 31B → Everything that requires thinking&lt;/strong&gt;&lt;br&gt;
All legal reasoning runs on the Dense 31B — clause classification, risk scoring, compatibility analysis, plain English explanations, suggested rewrites, negotiation tips, and the personalized negotiation email.&lt;/p&gt;

&lt;p&gt;We explicitly tested the MoE for legal analysis. On a contract with 5 critical violations, it returned 1 generic red flag. The Dense 31B returned all 5 — with exact clause text, severity ratings, negotiation tips, and suggested rewrites.&lt;/p&gt;

&lt;p&gt;Legal reasoning needs the most capable model. We use it where it matters.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The compatibility score — what makes FinePrint different from every other document AI&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Before analyzing, FinePrint asks for the user's personal requirements — how long they plan to stay, whether they need side projects, minimum compensation, relocation preferences. This goes into the Dense 31B prompt alongside the contract text.&lt;/p&gt;

&lt;p&gt;The model reads both simultaneously and judges alignment. The same IP assignment clause scores very differently for someone planning to leave in 6 months versus someone planning a 5-year career. A rule-based system can't do this. Gemma 4 can.&lt;/p&gt;

&lt;p&gt;The output isn't "this clause is risky." It's "this clause is risky &lt;strong&gt;for you specifically.&lt;/strong&gt;"&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The problem FinePrint is actually solving&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The legal literacy gap is structural. People with money have lawyers. Everyone else signs whatever they're handed.&lt;/p&gt;

&lt;p&gt;Harvey AI proved that LLMs can transform legal analysis — they're valued at $715M serving elite law firms. FinePrint takes that same capability and makes it free for the people those firms will never serve.&lt;/p&gt;

&lt;p&gt;Campus placement bonds in India affect hundreds of thousands of students every year. Most of them have never read a legal document before. Many sign bonds they legally cannot afford to break — and only find out years later when they try to leave a job they hate.&lt;/p&gt;

&lt;p&gt;FinePrint is the first line of defense for people who don't have a lawyer on speed dial. It doesn't replace legal advice — there's a disclaimer at the bottom of every analysis for that reason — but it gives people the awareness they need to ask the right questions before they sign anything.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What's Next&lt;/strong&gt;&lt;br&gt;
FinePrint today protects students and junior developers from predatory contracts. The same Gemma 4 architecture scales to rental leases, freelance NDAs, and VC term sheets — we already support all seven contract types. Long term: a browser extension that flags red flags on any document you open, and an API that other apps can integrate. The legal literacy gap is massive. We're just getting started.&lt;/p&gt;

&lt;p&gt;Built by Tarkash Labs&lt;br&gt;
&lt;a class="mentioned-user" href="https://dev.to/dj29"&gt;@dj29&lt;/a&gt; &amp;amp; &lt;a class="mentioned-user" href="https://dev.to/yug_vasava"&gt;@yug_vasava&lt;/a&gt; &lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>gemmachallenge</category>
      <category>gemma</category>
      <category>ai</category>
    </item>
  </channel>
</rss>
