DEV Community

Anirudh
Anirudh

Posted on

Study Helper: A Local, AI-Powered Study Planner Built using Ollama

Hacktoberfest Weekend Challenge: Build for a Friend Submission 🤝

This is a submission for the Hacktoberfest Weekend Challenge: Build for a Friend

What I Built

I built Study Helper — a local-first, AI-powered study planner — for a friend who gave me the idea. He always struggled with one specific problem: staring at a wall of syllabus text the week before exams and having no idea how to break it into a manageable study plan.

Study Helper solves exactly that. You paste your raw syllabus, lecture notes, or a topic list, and a local LLM automatically extracts every distinct topic, assigns it a difficulty rating (1–5) and an estimated study time, then generates a weighted day-by-day schedule that gives harder topics more days. If you fall behind, you hit Re-plan and it redistributes. If you need to know what to actually study for a topic, you click Guide and the AI generates key concepts and study tips on the spot.

Everything runs entirely on your machine — no accounts, no cloud, no data sent anywhere.

Key features:

-- AI syllabus import — paste any text, get structured topics with difficulty + hour estimates
-- Weighted scheduling — harder topics get proportionally more days; automatic revision day before the exam
-- Progress tracking — check off topics, see completion % per exam and overall
-- Study guide — per-topic AI breakdown of key concepts and study tips
-- Re-plan — fallen behind? Redistribute remaining topics across remaining days
-- Export — copy your schedule as formatted plain text
-- Light/dark mode — minimal black-and-white design with a toggle

Demo

Note: This app runs fully locally — there's no always-on hosted version (that's the point — your data never leaves your machine). To try it yourself, follow the setup steps below. The GitHub repo is linked in the Code section.

Here's what the app looks like in action:

Step 1 — Paste your syllabus and let AI extract topics:

The AI reads your raw notes and outputs each topic with a difficulty rating and hour estimate.

Step 2 — Confirm and generate the schedule:

Topics are distributed proportionally across your available days, with a revision day automatically blocked before the exam.

Step 3 — Click Guide on any topic:

The LLM explains the key concepts and gives you practical study tips so you know exactly what to focus on.

To run it yourself:

bash

git clone https://github.com/Anirudh0465/Study-helper.git
cd Study-helper
python -m venv .venv && .venv/bin/pip install -r requirements.txt
ollama pull qwen3:4b
.venv/bin/python server.py

Open http://localhost:8000

Code

Study Helper

A local-first, AI-powered study planner. Paste your syllabus, let a local LLM extract topics, and get a weighted day-by-day study schedule — all running on your machine with zero cloud dependencies.

Built for Hacktoberfest 2026 — "Pick one real person and build something for them."

Features

  • AI Syllabus Import — Paste raw syllabus text and the LLM extracts structured topics with difficulty ratings and hour estimates
  • Manual Topic Entry — Add topics by hand with optional hour estimates (Topic Name — 2h)
  • Weighted Scheduling — Automatically distributes topics across available days proportional to their estimated hours, with a revision day before the exam
  • Progress Tracking — Check off topics as you complete them, see completion percentage per exam and overall
  • Study Guide — Click "Guide" on any topic and the LLM generates key concepts and study tips so you know exactly what to focus on
  • Re-plan…

How I Built It

The core stack is:

Layer Tech
AI Ollama + Qwen3:4b (local GPU inference)
Backend Python, FastAPI, Uvicorn
Frontend Vanilla HTML/CSS/JS — single file, zero build tooling
Storage Browser localStorage — no database
The AI layer is the heart of it. I use Ollama's /api/chat endpoint with structured JSON output (format: ) to force the model to return well-typed data every time — no regex parsing, no hallucinated fields. Two separate prompts drive two separate features:

EXTRACT_SYSTEM — instructs Qwen3:4b to read syllabus text and output [{title, difficulty, hours}, ...]
GUIDE_SYSTEM — instructs it to break a topic into 3–6 key concepts with explanations and practical study tips
I also disabled extended thinking ("think": false) and kept temperature low (0.3) since these are extraction tasks, not creative ones — we want accuracy and consistency, not creativity.

The scheduling algorithm is pure JS: it computes each topic's proportion of total study hours, allocates a proportional number of days, and always reserves the day before the exam as a revision day. It runs entirely client-side and re-runs on every render.

The frontend is intentionally a single index.html with no framework and no build step — my friend shouldn't need Node.js or a bundler to use this. It persists everything in localStorage so data survives page refreshes.

Why Does Open Innovation Matter?

Closed AI APIs would fundamentally break what this app is.

A student pasting their syllabus into a cloud API is sending potentially sensitive academic information — exam structure, course content, institution-specific notes — to a third-party server. That's a privacy concern, especially for students at institutions with strict academic integrity policies.

With Ollama and Qwen3:4b, the model runs on the student's own GPU. The data never leaves their machine. There's no API key to manage, no rate limits to hit, no subscription to pay for. The only infrastructure requirement is a mid-range GPU and an internet connection to pull the model once.

Open-weight models also made the structured output feature feasible. Ollama exposes a format parameter that accepts a JSON schema and constrains the model's output to match it exactly. This meant I could build reliable data pipelines (syllabus text → structured topics) without brittle prompt engineering or post-processing hacks — something that's only possible because the inference stack is open enough to expose that level of control.

That's the core argument: open AI makes privacy-first, reliable, zero-cost tooling possible in a way closed APIs simply can't.

My Agent Session

Building Study Helper (Hacktoberfest Weekend)
You

the commits are not proper if u see u made 3 commits for phase 1 and only 1 commit for phase 2-4 make atleast 3 commits for each phase

Agent

Let me first check the current git history and understand what we're working with.

Agent

Now let me see what files are in each commit and understand the full project structure.

Agent

Let me also see what was in the first commit and understand the full file contents.

Agent

Now let me see the full content of the key files to understand how to split them logically.

Agent
Agent

Now I have a clear picture. The current commit history is:

Commit Message
1547142 Phase 1: Project scaffold
20af84a Phase 1: FastAPI backend with Ollama integration
03cee79 Phase 2-4: Full frontend with scheduling, study guide, and polish
3badc64 Add README with setup, usage, and ngrok sharing instructions

Phase 1 has 2 commits (need at least 3), and Phases 2-4 are all lumped into 1 commit (need at least 3 each). Let me also check if there's already been a push to origin.

Agent

Now I have a clear plan. I need to use git filter-branch or an interactive rebase to restructure the history. Since this requires rewriting history completely, the cleanest approach is to:

  1. Save all the final file contents
  2. Create a fresh orphan branch
  3. Make commits incrementally in the right order with at least 3 per phase
  4. Force-push

Let me create a plan and share it with you first.

Agent

Here's the plan to restructure your commits from 4 total → 15 commits with at least 3 per phase. The final code will remain identical — only the history changes.

Key points:
- Phase 1: 4 commits (scaffold → prompts → server core → guide endpoint)

- Phase 2: 3 commits (HTML/CSS skeleton → schedule CSS/HTML → JS state & extraction)

- Phase 3: 3 commits (exam management → scheduling algorithm → rendering)

- Phase 4: 5 commits (study guide → re-plan → utilities → init → README)

This requires a git push --force since the repo is already pushed. Review the plan and hit Proceed when ready!

You
Agent

Let me execute the plan. I'll write and run a script that rebuilds the entire git history with 15 properly split commits.

Agent

Now let me write and run the restructuring script:

Agent
Agent

All 15 commits created and all files verified identical. Now let me force-push to origin:

Agent

Let me clean up the backup branch:

Agent

Done! The git history has been restructured and force-pushed to GitHub. Here's the final breakdown:

Phase Commits Details
Phase 1 4 commits scaffold → extract prompts → server + API → guide endpoint
Phase 2 3 commits CSS design system → HTML components → JS state/extraction
Phase 3 3 commits exam CRUD → scheduling algorithm → rendering
Phase 4 5 commits study guide → re-plan → utilities → init → README

15 total commits, at least 3 per phase, all files verified byte-identical to the originals. ✅

You

This is a submission for the Hacktoberfest Weekend Challenge: Build for a Friend

What I Built

<!-- What does it do, and who is the friend or loved one you built it for? What problem does it solve for them? -->

Demo

<!-- Share a deployed link or a video demo. -->

Code

<!-- Show us the code! You can embed a GitHub repo directly into your post. -->

How I Built It

<!-- Which open-source AI did you use (open-weight models, agent harnesses, frameworks, local inference), and how is your project built around it? -->

Why Does Open Innovation Matter?

<!-- Why does open innovation matter for what you built? What did it make possible that a closed API wouldn't? -->

My Agent Session

<!-- Optional, but judges love it. Save your session with DevRelay and embed it with the agent_session tag (see the challenge page), or link to it. -->

Prize Categories

<!-- Which partner categories are you entering? List every one that applies, or remove this section. -->

<!-- Team Submissions: Please pick one member to publish the submission and credit teammates by listing their DEV usernames directly in the body of the post. -->

<!-- Thanks for participating! -->

this is the submission format for the hackathon help me fill this out

Agent
Agent
Agent

Now I have everything I need. Let me write the full submission:

Agent

Here's your complete submission! A few things to customize before posting on dev.to:

  1. Demo screenshots — the judges will appreciate visuals. Take 2-3 screenshots of the app (the extract form, the generated schedule, and the guide modal) and embed them with ![caption](image_url) in the Demo section.

  2. GitHub embed — the {% github Anirudh0465/Study-helper %} liquid tag will render as a rich repo card on dev.to automatically.

  3. Prize categories — check the challenge page to confirm the exact Ollama category name as it appears there, so your entry is correctly counted.

  4. Agent Session — the submission template has an optional "My Agent Session" section. If you want to fill it in, you'd need to save/export this conversation using DevRelay (mentioned on the challenge page).

The "Why Does Open Innovation Matter?" section is the strongest part — it makes a concrete, specific argument about privacy + structured output that goes beyond the generic "open source is good" answer most submissions give.

You

prize categories

Agent

Let me read the full challenge page to see all categories.

Agent
Agent
Agent
You

these are the proze categories refer to Hacktoberfest Submission

Agent
Agent
Agent

Thanks for sharing the exact prize categories!

You are completely right — there is no "Ollama" or "General" prize category. The challenge prompt says:

Which partner categories are you entering? List every one that applies, or remove this section.

Looking at the list (Render, TabPFN, Tinker, Arduino, DigitalOcean, Gemma, Backboard, ElevenLabs, Entire, GitHub Copilot, Mastra, MongoDB Atlas, Sentry, SerpApi, Temporal, Tiger Data), our project doesn't use any of these specific partner tools since we built everything locally with Qwen/Ollama and raw HTML/JS/Python.

Therefore, the correct action is to remove the Prize Categories section entirely, which I just did in your submission file!

(Note: If you do want to submit for one of the $100 partner prizes, the easiest addition would be **Best Use of Entire. The rules for that category say: "Share the agent sessions behind your project in the write-up". Since we are using an agent right now, you could export this session using DevRelay, embed the agent link in your post under the "My Agent Session" header, and then add "Best Use of Entire" as a prize category.)

Let me know if you want to add the agent session, or if the submission is good to go as-is!

You

okay so theres the myagent section there

My Agent Session

<!-- Optional, but judges love it. Save your session with DevRelay and embed it with the agent_session tag (see the challenge page), or link to it. -->

Agent
Agent

I've added the My Agent Session section back in!

I also added back the Prize Categories section, but this time with exactly one valid entry: Best Use of Entire.

To finish the submission, you'll just need to:
1. Export this chat session using DevRelay.
2. Grab the URL it gives you.
3. Replace the YOUR_DEVRELAY_URL_HERE placeholder in the markdown file with that URL.

Once you add your screenshots and that URL, your submission will be 100% ready to copy-paste into dev.to! Is there anything else you need help tuning for the submission?

You

i added devrelay do ur thinf

Agent
Agent
Agent
Agent

I've started the DevRelay login process for you! A browser window should have popped up asking you to authorize with MLH.

(If it didn't open automatically, you can click here to open it manually.)

Once you've finished the sign-in and the terminal says you're connected, just tell me "done", and I'll use DevRelay to save our agent session and give you the agent_session tag to paste into your Hacktoberfest submission!

Agent
Agent
Agent
Agent
Agent
Agent
Agent
Agent
Agent
Agent

Top comments (0)