<?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: Bhavya Kumar</title>
    <description>The latest articles on DEV Community by Bhavya Kumar (@bhavyaku11).</description>
    <link>https://dev.to/bhavyaku11</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%2F4153529%2F12a2e4b0-b226-4e65-85a8-9793e6c5c9a7.jpg</url>
      <title>DEV Community: Bhavya Kumar</title>
      <link>https://dev.to/bhavyaku11</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/bhavyaku11"/>
    <language>en</language>
    <item>
      <title>My Friend Had a Lab Viva Tomorrow. So I Built PracPrep. 🧪</title>
      <dc:creator>Bhavya Kumar</dc:creator>
      <pubDate>Mon, 05 Oct 2026 04:56:59 +0000</pubDate>
      <link>https://dev.to/bhavyaku11/my-friend-had-a-lab-viva-tomorrow-so-i-built-pracprep-d4c</link>
      <guid>https://dev.to/bhavyaku11/my-friend-had-a-lab-viva-tomorrow-so-i-built-pracprep-d4c</guid>
      <description>&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;My friend is an engineering student, and like many engineering students, lab preparation often starts at the worst possible time — the night before the practical or viva.&lt;/p&gt;

&lt;p&gt;The problem isn't always understanding the experiment itself. The real problem is dealing with a &lt;strong&gt;long, messy lab manual&lt;/strong&gt; and figuring out what actually needs to be prepared: the theory, apparatus, procedure, observations, precautions, and the questions an examiner might ask.&lt;/p&gt;

&lt;p&gt;So I built &lt;strong&gt;PracPrep — From Lab Manual to Lab-Ready&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;PracPrep is an AI-powered lab preparation companion that helps engineering students turn their lab manuals into a structured preparation workflow.&lt;/p&gt;

&lt;p&gt;Instead of repeatedly searching through a PDF before a viva, a student can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create and organize their experiments.&lt;/li&gt;
&lt;li&gt;Upload their lab manual.&lt;/li&gt;
&lt;li&gt;Extract the important sections from the document.&lt;/li&gt;
&lt;li&gt;Review and edit AI-generated experiment sections before accepting them.&lt;/li&gt;
&lt;li&gt;Track preparation using checklists.&lt;/li&gt;
&lt;li&gt;Practice viva questions and receive feedback on their answers.&lt;/li&gt;
&lt;li&gt;Review previous viva sessions and identify areas that need more preparation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal is simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Don't just read the lab manual. Become lab-ready.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I built PracPrep because I wanted the preparation process to feel less like &lt;strong&gt;"find the important parts before tomorrow's viva"&lt;/strong&gt; and more like a structured study workflow.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;PracPrep is designed around one idea: turn a lab manual into a preparation workflow.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F85e0uvgg2nzma7pfwris.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%2F85e0uvgg2nzma7pfwris.png" alt=" " width="800" height="455"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;A lab manual can easily become 20, 30, or even more pages of information.&lt;/p&gt;

&lt;p&gt;But before a practical or viva, students usually don't need all of it at once.&lt;/p&gt;

&lt;p&gt;They need to know:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What is this experiment actually about?&lt;/li&gt;
&lt;li&gt;Which theory do I need to understand?&lt;/li&gt;
&lt;li&gt;What apparatus should I remember?&lt;/li&gt;
&lt;li&gt;What is the correct procedure?&lt;/li&gt;
&lt;li&gt;What observations should I expect?&lt;/li&gt;
&lt;li&gt;Which precautions are important?&lt;/li&gt;
&lt;li&gt;What questions could the examiner ask?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The problem is not a lack of information.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The problem is finding the right information at the right time.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;And that is where I wanted PracPrep to help.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌──────────────────────────────────────┐
│             LAB MANUAL               │
└──────────────────┬───────────────────┘
                   │
          ┌────────┼────────┐
          ↓        ↓        ↓
       Theory  Procedure  Apparatus
          │        │        │
          └────────┼────────┘
                   ↓
        ┌─────────────────────┐
        │    Observations     │
        │    Precautions      │
        │   Viva Questions    │
        └──────────┬──────────┘
                   ↓
          "What do I study?"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;You can try the live version of PracPrep here:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Live Demo:&lt;/strong&gt; &lt;a href="https://prac-prep.vercel.app/" rel="noopener noreferrer"&gt;https://prac-prep.vercel.app/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The application is designed around a simple workflow:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Create an experiment → Upload a lab manual → Extract and review experiment sections → Prepare using the checklist → Practice viva questions → Review your performance&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For the best experience, try creating an experiment and exploring the experiment workspace.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Start with an experiment
&lt;/h3&gt;

&lt;p&gt;A student creates an experiment and enters the basic information needed for preparation.&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%2Fh4c1ph4iid8t5os3s0gd.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%2Fh4c1ph4iid8t5os3s0gd.png" alt=" " width="800" height="455"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Upload the lab manual
&lt;/h3&gt;

&lt;p&gt;The manual becomes the source material for the preparation workflow.&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%2Fd4jt0som98h8ujn2d32s.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%2Fd4jt0som98h8ujn2d32s.png" alt=" " width="800" height="456"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Let AI structure the manual
&lt;/h3&gt;

&lt;p&gt;Instead of blindly trusting the generated output, PracPrep presents the extracted sections for review.&lt;/p&gt;

&lt;p&gt;The student can edit the result before accepting it.&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%2Fbvhm6jhd6ktdifxekm76.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%2Fbvhm6jhd6ktdifxekm76.png" alt=" " width="800" height="454"&gt;&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;                ┌─────────────────┐
                │   Lab Manual    │
                │    PDF / DOCX   │
                └────────┬────────┘
                         ↓
                ┌─────────────────┐
                │ Text Extraction │
                │   + OCR if      │
                │     needed      │
                └────────┬────────┘
                         ↓
                ┌─────────────────┐
                │   AI Section    │
                │     Parser      │
                └────────┬────────┘
                         ↓
                ┌─────────────────┐
                │ Human Review &amp;amp;  │
                │     Editing     │
                └────────┬────────┘
                         ↓
                ┌─────────────────┐
                │ Structured      │
                │ Experiment      │
                └────────┬────────┘
                         ↓
          ┌──────────────┴──────────────┐
          ↓                             ↓
   Preparation Checklist          Viva Practice
          ↓                             ↓
          └──────────────┬──────────────┘
                         ↓
                  Lab-Ready Student

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

&lt;/div&gt;



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

&lt;p&gt;The complete source code for PracPrep is open source and available on GitHub:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub Repository:&lt;/strong&gt; &lt;a href="https://github.com/bhavyaku11/PracPrep" rel="noopener noreferrer"&gt;https://github.com/bhavyaku11/PracPrep&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The repository contains the frontend, FastAPI backend, database models, AI provider abstraction, document processing pipeline, authentication, viva system, tests, and deployment configuration.&lt;/p&gt;

&lt;p&gt;You can explore the implementation, run PracPrep locally, and see how the different components work together.&lt;/p&gt;

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

&lt;p&gt;PracPrep is built as a modular full-stack application, with the AI layer separated from the rest of the system through a provider abstraction.&lt;/p&gt;

&lt;p&gt;The architecture allows different AI providers to be plugged into the same workflows without changing the application logic.&lt;/p&gt;

&lt;p&gt;The current implementation includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;AI provider abstraction&lt;/strong&gt; — a common interface for question generation, answer evaluation, and document section parsing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gemini provider&lt;/strong&gt; — used for remote AI-powered generation and evaluation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deterministic demonstration provider&lt;/strong&gt; — provides predictable results for development, testing, and fallback scenarios.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Circuit breaker and fallback architecture&lt;/strong&gt; — prevents repeated provider failures from breaking the application.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Document processing pipeline&lt;/strong&gt; — extracts text from PDF/DOCX files, uses OCR when required, and then converts the extracted content into structured experiment sections.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Human-in-the-loop review&lt;/strong&gt; — AI-generated sections are presented to the student for review and editing before being accepted.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The important architectural decision was to keep the AI layer provider-independent. This means PracPrep can integrate an open-weight model or local inference engine without rebuilding the rest of the application.&lt;/p&gt;

&lt;p&gt;For this project, I wanted the AI to be a component of a real preparation workflow rather than simply putting a chatbot on top of a lab manual.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                    ┌─────────────────────┐
                    │    React Frontend   │
                    │   Vite + TypeScript │
                    └──────────┬──────────┘
                               │
                         REST API / JWT
                               │
                    ┌──────────▼──────────┐
                    │     FastAPI API     │
                    └──────────┬──────────┘
                               │
          ┌────────────────────┼───────────────────┐
          ↓                    ↓                   ↓
   Document Pipeline      Viva Module        Experiment Module
          │                    │                   │
     PDF / DOCX             AI Provider         PostgreSQL
     Extraction             Abstraction
          │                    │
          ↓              ┌─────┴─────┐
        OCR              ↓           ↓
                    Gemini      Demo Provider
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I deliberately separated the AI provider from the application logic so that the rest of PracPrep does not depend on a single model provider.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Was Actually Hard
&lt;/h2&gt;

&lt;p&gt;Building PracPrep was not just about connecting an AI model to a frontend. Some of the hardest parts were making the system reliable when real-world inputs and failures happen.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Messy Lab Manuals
&lt;/h3&gt;

&lt;p&gt;PDFs and DOCX files are not always clean. Some contain structured text, while others are scanned documents or have unusual formatting.&lt;/p&gt;

&lt;p&gt;PracPrep therefore uses a document-processing pipeline that can extract digital text and fall back to OCR when necessary.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. AI Can Fail
&lt;/h3&gt;

&lt;p&gt;AI providers can timeout, return errors, or become temporarily unavailable.&lt;/p&gt;

&lt;p&gt;Instead of assuming the AI will always work, I added a provider abstraction, retries, and a circuit-breaker/fallback architecture.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. AI Output Needs Review
&lt;/h3&gt;

&lt;p&gt;I didn't want AI-generated experiment sections to silently become the student's final content.&lt;/p&gt;

&lt;p&gt;PracPrep lets the student review and edit the generated sections before accepting them.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Keeping User Data Isolated
&lt;/h3&gt;

&lt;p&gt;Experiments, documents, viva sessions, and study data belong to individual users.&lt;/p&gt;

&lt;p&gt;The backend therefore enforces authenticated ownership checks so one user cannot access another user's study data.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Testing the Real Database
&lt;/h3&gt;

&lt;p&gt;I also added PostgreSQL integration tests instead of relying only on mocked database behavior.&lt;/p&gt;

&lt;p&gt;This helped verify relationships, cascading deletes, transactions, constraints, and guest-data migration against a real PostgreSQL database.&lt;/p&gt;

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

&lt;p&gt;Building PracPrep taught me that the hardest part of an AI product isn't calling an AI model.&lt;/p&gt;

&lt;p&gt;It's designing everything around the model.&lt;/p&gt;

&lt;p&gt;I learned that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;AI output needs validation.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Real documents are much messier than expected.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Human review is important when AI modifies structured information.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AI failures need to be treated as normal engineering cases.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A useful AI product is a workflow, not just a chatbot.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

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

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The AI is only one part of the product. The workflow around it is what makes it useful.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;p&gt;PracPrep is still evolving.&lt;/p&gt;

&lt;p&gt;The next improvements I want to work on include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;More capable local and open-weight AI models.&lt;/li&gt;
&lt;li&gt;Better handling of complex and scanned lab manuals.&lt;/li&gt;
&lt;li&gt;More realistic viva simulations.&lt;/li&gt;
&lt;li&gt;Smarter identification of weak topics.&lt;/li&gt;
&lt;li&gt;More personalized revision recommendations.&lt;/li&gt;
&lt;li&gt;Better offline and privacy-focused AI workflows.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The long-term goal is to make PracPrep useful across different engineering branches and different types of practical examinations.&lt;/p&gt;

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

&lt;p&gt;For PracPrep, open innovation matters because the AI layer should not be locked to a single provider.&lt;/p&gt;

&lt;p&gt;A lab-preparation tool deals with personal study material, including lab manuals, experiment notes, and preparation history. Having a provider-independent architecture makes it possible to choose where and how AI inference happens.&lt;/p&gt;

&lt;p&gt;PracPrep therefore separates the AI layer from the rest of the application through an &lt;strong&gt;AI provider abstraction&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This makes the system flexible enough to support:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Remote AI providers&lt;/strong&gt; when students need convenient cloud-based inference.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open-weight models and local inference&lt;/strong&gt; when privacy, cost, or offline usage becomes more important.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Different AI models&lt;/strong&gt; without rewriting the experiment, document-processing, or viva systems.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The key idea is that the student-facing workflow should not depend on one AI provider.&lt;/p&gt;

&lt;p&gt;Instead of building a chatbot tightly coupled to a single API, I built PracPrep so that the intelligence layer can evolve independently.&lt;/p&gt;

&lt;p&gt;That gives the project a path toward more &lt;strong&gt;private, accessible, and customizable AI-assisted learning&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  From Lab Manual to Lab-Ready
&lt;/h2&gt;

&lt;p&gt;PracPrep started with a simple question:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What if preparing for a lab viva didn't mean scrolling through a long PDF the night before?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The result is a system that takes the lab manual, structures the experiment, lets the student review it, turns preparation into a checklist, and provides viva practice.&lt;/p&gt;

&lt;p&gt;The goal isn't to replace studying.&lt;/p&gt;

&lt;p&gt;It's to make studying more focused.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Don't just read the lab manual. Become lab-ready. 🧪&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

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