<?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: Harshavardhan Bajoria</title>
    <description>The latest articles on DEV Community by Harshavardhan Bajoria (@hvbajoria).</description>
    <link>https://dev.to/hvbajoria</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%2F735713%2Fac43771d-a3cd-4696-8767-50712420212e.jpg</url>
      <title>DEV Community: Harshavardhan Bajoria</title>
      <link>https://dev.to/hvbajoria</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/hvbajoria"/>
    <language>en</language>
    <item>
      <title>Udaan CAT: Turning 45 Days of CAT Anxiety into a Clear Study Plan</title>
      <dc:creator>Harshavardhan Bajoria</dc:creator>
      <pubDate>Sun, 04 Oct 2026 19:39:56 +0000</pubDate>
      <link>https://dev.to/hvbajoria/udaan-cat-turning-45-days-of-cat-anxiety-into-a-clear-study-plan-57mp</link>
      <guid>https://dev.to/hvbajoria/udaan-cat-turning-45-days-of-cat-anxiety-into-a-clear-study-plan-57mp</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-weekend-2026-10-01"&gt;Hacktoberfest Weekend Challenge: Build for a Friend&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;I built &lt;strong&gt;Udaan CAT&lt;/strong&gt;, a local-first CAT preparation companion for a close friend who has her CAT examination in approximately 45 days.&lt;/p&gt;

&lt;p&gt;She was worried—not because she was not willing to work hard, but because the remaining time made every study decision feel urgent. With a large syllabus across VARC, DILR, and QA, she was facing the same questions many aspirants face near the exam:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What should I study today?&lt;/li&gt;
&lt;li&gt;Which topics are actually weak?&lt;/li&gt;
&lt;li&gt;Am I making progress, or just spending time?&lt;/li&gt;
&lt;li&gt;How do I turn a bad mock or repeated mistake into a better plan?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I wanted to build something more useful than another generic checklist. Udaan CAT turns preparation into a loop:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Assess → Plan → Practice → Measure → Review → Repeat&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The application includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;An 18-question diagnostic assessment across VARC, DILR, and QA.&lt;/li&gt;
&lt;li&gt;A rules-based 45-day roadmap that prioritizes weak topics.&lt;/li&gt;
&lt;li&gt;Daily six-question drills and section-specific practice sprints.&lt;/li&gt;
&lt;li&gt;Topic-level mastery, accuracy, and skill-delta tracking.&lt;/li&gt;
&lt;li&gt;Automatic error-notebook entries for attempted wrong answers.&lt;/li&gt;
&lt;li&gt;A syllabus tracker and visual mastery heatmap.&lt;/li&gt;
&lt;li&gt;A manual mock-score tracker for external mocks.&lt;/li&gt;
&lt;li&gt;Pomodoro focus sessions linked to daily study segments.&lt;/li&gt;
&lt;li&gt;Formula Vault, CAT calculator, daily briefing, and consistency tracking.&lt;/li&gt;
&lt;li&gt;Optional Firebase authentication and cloud synchronization.&lt;/li&gt;
&lt;li&gt;An optional local AI coach for alternate explanations.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The roadmap is designed as a 45-day preparation system, but for my friend’s situation it works as a compressed 40-day emergency plan. The goal is not to pretend that software can guarantee a percentile. The goal is to make the next useful action obvious and make progress visible.&lt;/p&gt;

&lt;p&gt;The most meaningful part happened after I shared it with her. She started using it, became emotional, and told me that her stress had reduced a little because she finally had a plan and could track her progress. The exam did not become easy overnight, but the uncertainty became smaller. For this challenge, that is the outcome I cared about most.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  Source repository
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/HVbajoria/Udaan-CAT" rel="noopener noreferrer"&gt;View Udaan CAT on GitHub&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Live demo
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Live demo:&lt;/strong&gt; &lt;code&gt;https://drive.google.com/file/d/1LaBvOwWS3hh1-z9Sig61dmMCB7dtxP0e/view?usp=sharing&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The project can also be run locally. The core application works without the optional local AI service:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--legacy-peer-deps&lt;/span&gt;
npm run dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then open &lt;code&gt;http://localhost:3000&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;To try the local coach as well:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ollama pull qwen2.5:7b
ollama serve
npm run dev:ai
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In another terminal, run &lt;code&gt;npm run dev&lt;/code&gt; and use &lt;strong&gt;Ask local coach&lt;/strong&gt; on a completed daily-test question.&lt;/p&gt;

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

&lt;p&gt;The complete source code is available here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/HVbajoria/Udaan-CAT" rel="noopener noreferrer"&gt;https://github.com/HVbajoria/Udaan-CAT&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The main implementation areas are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/HVbajoria/Udaan-CAT/blob/main/src/App.tsx" rel="noopener noreferrer"&gt;&lt;code&gt;src/App.tsx&lt;/code&gt;&lt;/a&gt; — Application shell and main screens.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/HVbajoria/Udaan-CAT/blob/main/src/context/AppContext.tsx" rel="noopener noreferrer"&gt;&lt;code&gt;src/context/AppContext.tsx&lt;/code&gt;&lt;/a&gt; — Central application state, scoring actions, local persistence, and Firebase synchronization.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/HVbajoria/Udaan-CAT/blob/main/src/components/DailyTestView.tsx" rel="noopener noreferrer"&gt;&lt;code&gt;src/components/DailyTestView.tsx&lt;/code&gt;&lt;/a&gt; — Daily drill selection, question flow, results, skill deltas, and local-coach action.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/HVbajoria/Udaan-CAT/blob/main/src/utils/catScoring.ts" rel="noopener noreferrer"&gt;&lt;code&gt;src/utils/catScoring.ts&lt;/code&gt;&lt;/a&gt; — Percentile estimates, mastery thresholds, roadmap generation, daily briefings, and study segments.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/HVbajoria/Udaan-CAT/blob/main/src/services/localCoachService.ts" rel="noopener noreferrer"&gt;&lt;code&gt;src/services/localCoachService.ts&lt;/code&gt;&lt;/a&gt; — Typed browser contract for local model explanations.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/HVbajoria/Udaan-CAT/blob/main/server/local-ai-server.mjs" rel="noopener noreferrer"&gt;&lt;code&gt;server/local-ai-server.mjs&lt;/code&gt;&lt;/a&gt; — Local Express adapter that validates requests and calls Ollama.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/HVbajoria/Udaan-CAT/tree/main/src/data" rel="noopener noreferrer"&gt;&lt;code&gt;src/data/&lt;/code&gt;&lt;/a&gt; — Static syllabus, diagnostic questions, daily questions, and formulas.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;h3&gt;
  
  
  Product architecture
&lt;/h3&gt;

&lt;p&gt;Udaan CAT is a React and TypeScript single-page application built with Vite. &lt;code&gt;AppContext&lt;/code&gt; acts as the central state layer for the learner profile, syllabus, diagnostic result, roadmap, daily submissions, mock scores, error log, study sessions, and modal state.&lt;/p&gt;

&lt;p&gt;The main user journey is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Profile setup
    ↓
18-question diagnostic
    ↓
Topic and section analysis
    ↓
45-day roadmap
    ↓
Daily study segments
    ↓
Six-question practice drill
    ↓
Score + mastery update + error logging
    ↓
Mock analysis and next-day prioritization
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The scoring and answer-key path is deterministic. Correct answers come from repository data, and the application calculates scores using CAT-style &lt;code&gt;+3&lt;/code&gt; for correct answers, &lt;code&gt;-1&lt;/code&gt; for attempted wrong answers, and &lt;code&gt;0&lt;/code&gt; for skipped questions. The local model is never allowed to change scores, answer keys, mastery, or roadmap state.&lt;/p&gt;

&lt;h3&gt;
  
  
  Open-source AI and local inference
&lt;/h3&gt;

&lt;p&gt;For the optional coach, I used:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Ollama&lt;/strong&gt; for local model serving.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;qwen2.5:7b&lt;/code&gt;&lt;/strong&gt; as the default open-weight instruct model.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Express&lt;/strong&gt; as a small localhost adapter.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vite proxying&lt;/strong&gt; so the browser calls a same-origin &lt;code&gt;/api/coach/explain&lt;/code&gt; endpoint.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The browser sends the current question, answer choices, selected answer, verified answer, official explanation, and topic name to the local adapter. The adapter validates the request, builds a constrained prompt, and sends it to Ollama’s &lt;code&gt;/api/chat&lt;/code&gt; endpoint.&lt;br&gt;
&lt;/p&gt;

&lt;pre data-lang="mermaid"&gt;&lt;code&gt;sequenceDiagram
    actor Student
    participant UI as DailyTestView
    participant Client as localCoachService
    participant Adapter as Express localhost adapter
    participant Model as Ollama + qwen2.5:7b

    Student-&amp;gt;&amp;gt;UI: Click Ask local coach
    UI-&amp;gt;&amp;gt;Client: Send question context and verified solution
    Client-&amp;gt;&amp;gt;Adapter: POST /api/coach/explain
    Adapter-&amp;gt;&amp;gt;Adapter: Validate bounded request
    Adapter-&amp;gt;&amp;gt;Model: POST /api/chat
    Model--&amp;gt;&amp;gt;Adapter: Supplemental explanation
    Adapter--&amp;gt;&amp;gt;Client: Explanation or graceful error
    Client--&amp;gt;&amp;gt;UI: Render local coach note&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;The coach is deliberately narrow. It has:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No cloud API key.&lt;/li&gt;
&lt;li&gt;No database access.&lt;/li&gt;
&lt;li&gt;No tools.&lt;/li&gt;
&lt;li&gt;No ability to mutate scores or learner state.&lt;/li&gt;
&lt;li&gt;No autonomous agent loop.&lt;/li&gt;
&lt;li&gt;A 45-second timeout.&lt;/li&gt;
&lt;li&gt;Bounded request and response sizes.&lt;/li&gt;
&lt;li&gt;Graceful &lt;code&gt;400&lt;/code&gt;, &lt;code&gt;502&lt;/code&gt;, and &lt;code&gt;503&lt;/code&gt; error handling.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The verified explanation shown by the application remains the source of truth. The model is there to explain the same reasoning in another way when the learner asks for help.&lt;/p&gt;

&lt;h3&gt;
  
  
  Persistence
&lt;/h3&gt;

&lt;p&gt;The app is local-first:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Browser progress is saved in &lt;code&gt;localStorage&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Google-authenticated users can optionally sync profiles, study state, daily submissions, mock scores, session logs, and error logs to Firebase Firestore.&lt;/li&gt;
&lt;li&gt;If Firebase or Ollama is unavailable, the core study workflow can still continue locally.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why Does Open Innovation Matter?
&lt;/h2&gt;

&lt;p&gt;Open innovation made this project possible in three important ways.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Local AI lowered the barrier to building responsibly
&lt;/h3&gt;

&lt;p&gt;I did not need to send my friend’s study questions, selected answers, or preparation context to a hosted AI API. With Ollama, the model can run on the same machine as the application. That gives the learner a more private and inspectable coaching experience.&lt;/p&gt;

&lt;p&gt;This also makes the project easier to understand. The inference boundary is visible in the repository, the prompt is auditable, and the model can be changed without rewriting the entire application.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Open models make experimentation accessible
&lt;/h3&gt;

&lt;p&gt;A friend-focused project should not require a paid API account, a production cloud deployment, or a complicated infrastructure setup just to try one helpful feature. An open-weight model lets me experiment with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Alternate explanation styles.&lt;/li&gt;
&lt;li&gt;Smaller local models for lower-end hardware.&lt;/li&gt;
&lt;li&gt;Different model sizes for speed versus quality.&lt;/li&gt;
&lt;li&gt;Ollama now, with the option to support llama.cpp or another local server later.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Open source keeps the important logic deterministic
&lt;/h3&gt;

&lt;p&gt;The project is intentionally not “AI everywhere.” Open innovation helped me add AI where it is useful while keeping the critical educational logic inspectable:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The repository owns the answer keys.&lt;/li&gt;
&lt;li&gt;The application owns the score calculation.&lt;/li&gt;
&lt;li&gt;The roadmap is rules-based.&lt;/li&gt;
&lt;li&gt;The learner decides whether to ask the coach.&lt;/li&gt;
&lt;li&gt;The model cannot silently rewrite progress.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That balance is important in education. A fluent answer is not automatically a correct answer, and a generated percentile is not an official result.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Agent Session
&lt;/h2&gt;

&lt;p&gt;I used an agentic coding workflow to inspect the existing application, trace its state and scoring paths, remove the unused hosted-model dependency, introduce a local Ollama adapter, add the Udaan CAT brand identity, and validate the resulting build.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;DevRelay session:&lt;/strong&gt; &lt;code&gt;[Add DevRelay agent session URL or embed here]&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Prize Categories
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Open Innovation / Local AI:&lt;/strong&gt; Udaan CAT uses an open-weight model through local Ollama inference instead of requiring a hosted AI API.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Build for a Friend:&lt;/strong&gt; The product was built for a friend who had approximately 40 days left before CAT and needed a calmer, more structured way to prepare.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;The biggest lesson was that “helpful” did not mean “add more features.” My friend did not need a complicated AI agent to begin. She needed a clear starting point, a plan that reflected her weak areas, small daily actions, and visible evidence that she was moving forward.&lt;/p&gt;

&lt;p&gt;I also learned that emotional impact can be a real product signal. When she became emotional after using the app, it was a reminder that reducing uncertainty can be as valuable as adding functionality. A progress dashboard is not just a collection of cards when it helps someone feel less alone with a difficult goal.&lt;/p&gt;

&lt;p&gt;Udaan CAT is still evolving, but it has already done the thing I built it for: it helped my friend replace some of her exam stress with a plan she can actually follow.&lt;/p&gt;

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