<?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: Shivang Singh</title>
    <description>The latest articles on DEV Community by Shivang Singh (@singhshivangsrds007).</description>
    <link>https://dev.to/singhshivangsrds007</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F99mvlsfu5tfj9m7ku25d.png</url>
      <title>DEV Community: Shivang Singh</title>
      <link>https://dev.to/singhshivangsrds007</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/singhshivangsrds007"/>
    <language>en</language>
    <item>
      <title>FocusDesk: a private study timer and quiz maker I built for my friend Dev, powered by a local open model</title>
      <dc:creator>Shivang Singh</dc:creator>
      <pubDate>Mon, 05 Oct 2026 06:39:08 +0000</pubDate>
      <link>https://dev.to/singhshivangsrds007/focusdesk-a-private-study-timer-and-quiz-maker-i-built-for-my-friend-dev-powered-by-a-local-open-55kk</link>
      <guid>https://dev.to/singhshivangsrds007/focusdesk-a-private-study-timer-and-quiz-maker-i-built-for-my-friend-dev-powered-by-a-local-open-55kk</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;FocusDesk is a study planner, Pomodoro timer and notes-to-quiz tool, and I built it for my friend &lt;strong&gt;Dev&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Dev has three problems when he studies: he has no good way to quiz himself, he struggles to manage his time, and he doesn't keep track of what he's actually done. The result is that he wastes a lot of his own study time without noticing.&lt;/p&gt;

&lt;p&gt;FocusDesk tackles each one:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Time management:&lt;/strong&gt; a Pomodoro timer with focus sessions, short breaks and long breaks, so studying comes in clear blocks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tracking:&lt;/strong&gt; a task list with estimated pomodoros per task, plus sessions per day, total focus minutes and a day streak, so he can see what he really did.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Quizzing:&lt;/strong&gt; he pastes his notes and a local AI model writes a multiple-choice quiz from them. Missed questions come back on a spaced-repetition schedule (1, 3, 7, 14, 30 days).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Weak-spot memory:&lt;/strong&gt; the app tracks which topics he misses and tells the model to ask more about those in the next quiz.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;[&lt;a href="https://drive.google.com/file/d/1rOFtYl4n40zQJUg0XBQRRXAOr7iMpgIQ/view?usp=sharing" rel="noopener noreferrer"&gt;https://drive.google.com/file/d/1rOFtYl4n40zQJUg0XBQRRXAOr7iMpgIQ/view?usp=sharing&lt;/a&gt;]&lt;/p&gt;

&lt;p&gt;The demo shows pasting notes, generating a quiz, answering questions, the weak-spot tracking and the focus timer.&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/Cipher-Von-shivang-3787" rel="noopener noreferrer"&gt;
        Cipher-Von-shivang-3787
      &lt;/a&gt; / &lt;a href="https://github.com/Cipher-Von-shivang-3787/focusDesk" rel="noopener noreferrer"&gt;
        focusDesk
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Study timer and notes-to-quiz app powered by a local open model (DeepSeek-R1 via Ollama). Private and offline.
    &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;FocusDesk&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;Study planner + Pomodoro timer + &lt;strong&gt;notes-to-quiz&lt;/strong&gt; powered by &lt;strong&gt;DeepSeek-R1&lt;/strong&gt; (open weights, MIT license) running locally with Ollama. Claude (Anthropic API) is an optional extra provider. Installable as a PWA. No backend, no API keys, no accounts.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Choose your AI&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Open &lt;strong&gt;Settings&lt;/strong&gt;. The default is DeepSeek via Ollama, which keeps everything on your machine. You can switch to Claude by pasting an API key (stored only in your browser).&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Run it&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;&lt;pre class="notranslate"&gt;&lt;code&gt;ollama pull deepseek-r1:8b
OLLAMA_ORIGINS="*" ollama serve
python3 -m http.server 8000   # then open http://localhost:8000
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;How the quiz works&lt;/h2&gt;

&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;Paste notes (or load a .txt/.md file) and press &lt;strong&gt;Make quiz&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;The local model writes multiple-choice questions as JSON.&lt;/li&gt;
&lt;li&gt;Every card goes into a spaced-repetition deck (Leitner boxes: 0, 1, 3, 7, 14, 30 days). Missed cards drop back to box 0.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Review due cards&lt;/strong&gt; replays whatever is due today.&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Using it on a phone&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;Host the folder…&lt;/p&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/Cipher-Von-shivang-3787/focusDesk" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;The README has the setup steps for Windows. It needs Ollama and one downloaded model, then you open &lt;code&gt;index.html&lt;/code&gt;.&lt;/p&gt;

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

&lt;p&gt;The app is plain HTML, CSS and JavaScript in a single file, with no backend and no accounts. Tasks, stats and the quiz deck are saved in the browser, and there is a backup and restore file in Settings.&lt;/p&gt;

&lt;p&gt;The AI runs locally through &lt;strong&gt;Ollama&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Model:&lt;/strong&gt; the default is &lt;strong&gt;DeepSeek-R1 (8B, distilled)&lt;/strong&gt;, running on my own laptop.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Quiz generation:&lt;/strong&gt; the app sends the pasted notes to the local model and asks for multiple-choice questions as JSON, with a short topic name and a one-line explanation for each question.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Handling the model's output:&lt;/strong&gt; DeepSeek-R1 writes out its reasoning before it answers, so the app strips that text before parsing the JSON. It retries once if the reply isn't valid JSON, and it shuffles the answer choices because small models tend to put the right answer first.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Spaced repetition:&lt;/strong&gt; each question goes into a Leitner-style deck that decides when it should come back.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Weak-spot memory:&lt;/strong&gt; the model has no memory between requests, so the app keeps a score for each topic and sends the weakest topics along with the next quiz request.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Swappable model:&lt;/strong&gt; the model name is a text field in Settings, so any Ollama model can be used. Claude through an API key is also available as an optional provider, but the project is built around the local open model.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I built this with the help of an AI coding assistant, and I tested it and set it up myself on a Windows 11 laptop.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Privacy:&lt;/strong&gt; Dev's study notes stay on his own computer. Nothing is uploaded to a server.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It works offline:&lt;/strong&gt; after the one-time model download, the whole app runs with no internet. I tested this with the connection switched off and the quizzes still worked.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No cost and no accounts:&lt;/strong&gt; there are no API fees or keys to manage, which matters for a student.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Control:&lt;/strong&gt; DeepSeek can be swapped for another open model by changing one setting. With a closed API, I couldn't choose where the data goes or what model runs.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What Dev Said
&lt;/h2&gt;

&lt;p&gt;I showed it to Dev and he said it was very helpful. He also noticed it kept working with the internet disconnected, and that this helped him stay focused, because there was nothing else on the screen pulling his attention.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;A small local model is slower than a cloud API. DeepSeek-R1 thinks before it answers, so a quiz can take a minute or more on a laptop.&lt;/li&gt;
&lt;li&gt;Small models sometimes write weak questions or badly formatted answers, so a retry is occasionally needed.&lt;/li&gt;
&lt;li&gt;Quizzes come from pasted text only. PDF upload is the next thing I'd add.&lt;/li&gt;
&lt;li&gt;Data is stored per browser, so moving to another device means using the backup file.&lt;/li&gt;
&lt;/ul&gt;

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