<?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: Nischay Shukla</title>
    <description>The latest articles on DEV Community by Nischay Shukla (@introvert).</description>
    <link>https://dev.to/introvert</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%2F1836684%2Fbb80c8ba-41b2-42cc-a651-a56eef4caa7a.jpg</url>
      <title>DEV Community: Nischay Shukla</title>
      <link>https://dev.to/introvert</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/introvert"/>
    <language>en</language>
    <item>
      <title>Weekend 1 Launch Project</title>
      <dc:creator>Nischay Shukla</dc:creator>
      <pubDate>Sun, 04 Oct 2026 19:50:15 +0000</pubDate>
      <link>https://dev.to/introvert/weekend-1-launch-project-4d82</link>
      <guid>https://dev.to/introvert/weekend-1-launch-project-4d82</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 PDF → Quiz, a small web app that turns lecture PDFs into multiple-choice practice quizzes. I made it for my college friend. They upload a lecture PDF, pick how many questions they want, and the app writes a quiz from the material. Each question comes with four options, a correct answer, and a short explanation. At the end it shows a score. He had piles of lecture slides and no good way to check whether any of it had stuck. Rereading feels productive but doesn't show what you actually know. Practice questions do, but writing them by hand takes as long as studying. This tool automates that step.&lt;/p&gt;

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

&lt;p&gt;The core of the project is Ollama, which serves an open-weight language model ([confirm: Llama 3.2 3B locally, Llama 3.2 1B on Render]). The app sends text to the model's local HTTP API and gets quiz questions back. Nothing in the pipeline depends on a closed API.&lt;/p&gt;

&lt;p&gt;Extract text. The backend reads the uploaded PDF with pypdf and collapses it into clean text.&lt;br&gt;
Chunk and spread. The text is split into roughly 2,500-character chunks. The app picks chunks evenly across the whole lecture, so the questions cover the entire document, not just the first few pages.&lt;br&gt;
Generate one question per chunk. Each chunk goes to Ollama's /api/chat endpoint with a system prompt asking for exactly one question that tests understanding rather than trivia. I used Ollama's JSON output mode, so the reply is structured as a question, four options, an answer index and an explanation.&lt;br&gt;
Validate. The backend checks that there are exactly four options and a valid answer index. Questions that fail are skipped instead of showing broken output.&lt;br&gt;
Stream to the browser. The page requests questions one at a time, so they appear as they are written. This also keeps every request short, which matters on hosted platforms with request time limits.&lt;/p&gt;

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

&lt;p&gt;Lecture material, personal notes and study habits are things a student may not want to send to someone else's server. Because the model runs through Ollama on my own machine, the PDFs never leave my friend's computer. There is no account, no upload and no third party holding their coursework.&lt;/p&gt;

&lt;p&gt;Using an open-weight model also made these things possible:&lt;/p&gt;

&lt;p&gt;It costs nothing to run. There are no per-token charges, which matters to a college student generating quizzes from dozens of PDFs. With a paid API, every extra lecture would add to the bill.&lt;br&gt;
It works with no internet. After the one-time model download, it runs in a library, on a commute or on bad campus Wi-Fi [confirm this matches your testing].&lt;br&gt;
I can swap and tune the model. If a different open model writes better questions for a subject, I change one environment variable (MODEL) instead of rewriting the app around a new vendor's API. I can also change the prompt and behavior freely, because nothing sits behind a closed endpoint.&lt;br&gt;
I could choose where it runs. The same code runs privately on a laptop or as a public demo on Render. A closed API would have forced a third-party server in both cases.&lt;/p&gt;

&lt;p&gt;An honest trade-off: the Render deployment is a public demo, so on that version the PDFs are processed on a cloud server. It also uses a smaller model ([1B]) than my laptop does ([3B]), so question quality is lower. The private, free, offline experience is the local one.&lt;/p&gt;

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

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

&lt;p&gt;Render: I deployed the project on Render using a single render.yaml Blueprint. It defines a private service that runs Ollama from a Dockerfile with a persistent disk, so the model downloads once and survives restarts. It also defines a public web service that reaches Ollama over Render's private network. Both services deploy from one GitHub repo with one click.&lt;/p&gt;

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