<?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: Shreya C H</title>
    <description>The latest articles on DEV Community by Shreya C H (@shreyach52).</description>
    <link>https://dev.to/shreyach52</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%2F4156284%2F98f7904b-dd9f-4780-851d-a4a8f7c52826.png</url>
      <title>DEV Community: Shreya C H</title>
      <link>https://dev.to/shreyach52</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/shreyach52"/>
    <language>en</language>
    <item>
      <title>WILDLOG</title>
      <dc:creator>Shreya C H</dc:creator>
      <pubDate>Sat, 10 Oct 2026 16:59:01 +0000</pubDate>
      <link>https://dev.to/shreyach52/wildlog-21k</link>
      <guid>https://dev.to/shreyach52/wildlog-21k</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week1-2026-10-05"&gt;Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;WildLog is a pocket field journal for walks. You photograph a plant, tree, bird or insect, and a local Gemma model tells you what it is and gives you one short fact. It can read the answer aloud so you can look up instead of down. You add a note about where you were, and it saves to a journal on your device. There's also a daily "find three things" quest, to give a walk a reason.&lt;/p&gt;

&lt;p&gt;The idea came from going outside to test it. What grabbed me wasn't the app, it was the ferns.&lt;/p&gt;

&lt;p&gt;That's what the app is for: take one photo, learn one thing, put the phone away. It's for anyone who walks past plants every day without knowing what they are, like me.&lt;/p&gt;

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

&lt;p&gt;Live demo: &lt;a href="https://wildlog.onrender.com" rel="noopener noreferrer"&gt;https://wildlog.onrender.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The hosted version is a &lt;strong&gt;demo mode&lt;/strong&gt;. It shows photos and answers recorded during my tests, because the real identification runs on my laptop (more on that below). &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%2Fyjwbcjbep74the3ooodo.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%2Fyjwbcjbep74the3ooodo.png" alt="SCREENSHOT 1" width="800" height="656"&gt;&lt;/a&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%2Fg3b0vyv62x41fhrm9bk6.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%2Fg3b0vyv62x41fhrm9bk6.png" alt="SCREENSHOT 2" width="800" height="688"&gt;&lt;/a&gt;&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/shreyach52" rel="noopener noreferrer"&gt;
        shreyach52
      &lt;/a&gt; / &lt;a href="https://github.com/shreyach52/wildlog" rel="noopener noreferrer"&gt;
        wildlog
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;


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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Model:&lt;/strong&gt; &lt;code&gt;gemma3:4b&lt;/code&gt;, an open-weight model, running locally through Ollama on a laptop with &lt;strong&gt;no GPU&lt;/strong&gt;. I use its image understanding to identify what's in the photo.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend:&lt;/strong&gt; Express, which takes the photo and sends it to Ollama. It asks for a JSON answer with a name, one fact and a confidence level.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Frontend:&lt;/strong&gt; React with Vite. The browser shrinks each photo to about 800px and converts it to JPEG before upload, which keeps identification at about 3 to 4 seconds on CPU.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Journal:&lt;/strong&gt; entries are stored in the browser's local storage, so there's no account and no database.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Read-aloud:&lt;/strong&gt; the browser's built-in speech voice.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hosting:&lt;/strong&gt; the demo is a static site on Render.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  What I tested, including where it failed
&lt;/h3&gt;

&lt;p&gt;I took it outside and photographed real things:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;What it was&lt;/th&gt;
&lt;th&gt;What Gemma said&lt;/th&gt;
&lt;th&gt;Confidence&lt;/th&gt;
&lt;th&gt;Time&lt;/th&gt;
&lt;th&gt;Result&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Mango tree&lt;/td&gt;
&lt;td&gt;Mango tree&lt;/td&gt;
&lt;td&gt;high&lt;/td&gt;
&lt;td&gt;3.2s&lt;/td&gt;
&lt;td&gt;Correct&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Holy basil&lt;/td&gt;
&lt;td&gt;Holy basil (Tulsi)&lt;/td&gt;
&lt;td&gt;high&lt;/td&gt;
&lt;td&gt;2.8s&lt;/td&gt;
&lt;td&gt;Correct&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fern&lt;/td&gt;
&lt;td&gt;Boston fern&lt;/td&gt;
&lt;td&gt;medium&lt;/td&gt;
&lt;td&gt;4.1s&lt;/td&gt;
&lt;td&gt;[Correct / partly right / wrong: check the species first]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Concrete wall (first prompt)&lt;/td&gt;
&lt;td&gt;Grey rock&lt;/td&gt;
&lt;td&gt;high&lt;/td&gt;
&lt;td&gt;20.1s&lt;/td&gt;
&lt;td&gt;Wrong&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Same wall (fixed prompt)&lt;/td&gt;
&lt;td&gt;Stone wall&lt;/td&gt;
&lt;td&gt;[confidence]&lt;/td&gt;
&lt;td&gt;[time]&lt;/td&gt;
&lt;td&gt;Correct&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The wall is my favourite result. My first prompt told the model to identify a plant, tree or bird, and gave it no way to say "this is none of those", so it named a rock with high confidence. I changed the prompt so it could say when a photo wasn't a plant or animal, and to name the broader group when it wasn't sure of the species. After that it answered "stone wall", which was right.&lt;/p&gt;

&lt;p&gt;Two things I learned:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;The model's confidence isn't a measure of whether it's right.&lt;/strong&gt; It said "high" for a wrong answer and only "medium" for the fern.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Exact species is hard.&lt;/strong&gt; A 4B model can often tell you the group from one photo, but not always the species. Ferns are a good example.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Where Render fits, honestly
&lt;/h3&gt;

&lt;p&gt;I wrote a Docker setup to run Gemma on a Render private service, but I didn't deploy it. A service big enough for the model needs a payment card on file, and I chose not to add one. So the Render site is a front-end demo, and I'm not claiming live inference there.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;It runs offline on a CPU-only laptop.&lt;/strong&gt; For something you use on a trail with no signal, that's the whole point.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;My photos stay on my own network.&lt;/strong&gt; The phone is just the camera, and the laptop does the thinking. Nothing goes to someone else's server.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It costs nothing to run.&lt;/strong&gt; No API key and no per-photo fee.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;I could change its behaviour myself.&lt;/strong&gt; When the model confidently called a wall a rock, I fixed it by rewriting the prompt that controls it, and I could swap the model or tune it further if I wanted.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A closed API could have identified more species more accurately, but it would have needed internet, an account and a bill, which is the opposite of what a "touch grass" tool should require.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Gemma:&lt;/strong&gt; the app is built around &lt;code&gt;gemma3:4b&lt;/code&gt; running locally through Ollama, including its image understanding.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Render:&lt;/strong&gt; the demo is hosted as a static site on Render, and the repo includes a Docker setup for running Ollama on a Render private service (written but not deployed).&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>TenMin: study cards for a friend who can't sit through 100 slides</title>
      <dc:creator>Shreya C H</dc:creator>
      <pubDate>Sun, 04 Oct 2026 05:31:57 +0000</pubDate>
      <link>https://dev.to/shreyach52/tenmin-study-cards-for-a-friend-who-cant-sit-through-100-slides-4b57</link>
      <guid>https://dev.to/shreyach52/tenmin-study-cards-for-a-friend-who-cant-sit-through-100-slides-4b57</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;My friend loses focus about every ten minutes when she studies. In exam season that's a real problem: her DBMS and DSA courses come as 100-slide decks, and just opening one feels exhausting. She also tends to drop her daily DSA practice during exams and regret it later.&lt;/p&gt;

&lt;p&gt;So I built &lt;strong&gt;TenMin&lt;/strong&gt;. You upload a slide deck as a PDF, and a local AI model turns it into short study cards: one concept, a few bullets, and one recall question. Because she scrolls when she gets distracted, I made the studying itself a scrollable feed. Cards come in sprints of five, with a short break screen after each one.&lt;/p&gt;

&lt;p&gt;There's also a small &lt;strong&gt;streak guard&lt;/strong&gt;: a daily LeetCode problem (DSA or SQL), a tick for "I solved one today", and a hint button that nudges her toward the approach without writing the code.&lt;/p&gt;

&lt;p&gt;Everything runs on my laptop. No account, no API key, and her course material is never uploaded anywhere.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&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%2Fk5vi45z9yv8ywyro11oq.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%2Fk5vi45z9yv8ywyro11oq.png" alt="Dark-themed TenMin app. At the top, a streak box shows a 1-day streak, DSA and DBMS/SQL tabs, today's problem " width="800" height="412"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Sprint 2 of 3, card 6 of 13. Each card shows the slides it came from, with a recall question to answer before revealing. The streak box at the top has the daily problem, a hint button, and the streak counter.&lt;/em&gt;&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/shreyach52" rel="noopener noreferrer"&gt;
        shreyach52
      &lt;/a&gt; / &lt;a href="https://github.com/shreyach52/tenmin" rel="noopener noreferrer"&gt;
        tenmin
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &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;TenMin&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Study in 10-minute sprints, with a local AI that never sends your slides anywhere.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;TenMin turns long lecture slide decks into short, scrollable study cards, and helps keep a daily coding-practice streak alive during exam season. It was built for one real person: a friend who loses focus about every 10 minutes while studying, dreads 100-slide decks, and struggles to keep up her DSA practice during exams.&lt;/p&gt;
&lt;p&gt;Everything runs on your own laptop using an open-weight model through &lt;a href="https://ollama.com" rel="nofollow noopener noreferrer"&gt;Ollama&lt;/a&gt;. No account, no API key, no internet needed after setup.&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://github.com/shreyach52/tenmin/image-1.png"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fshreyach52%2Ftenmin%2FHEAD%2Fimage-1.png" alt="screenshot"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;What it does&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Slides to cards:&lt;/strong&gt; upload a PDF of your slides. A local model turns it into short cards (concept, a few bullets, one recall question).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Starts studying early:&lt;/strong&gt; cards stream in as each part of the deck is processed, so you can begin the first sprint while the rest is still being read.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sprints:&lt;/strong&gt; cards come in…&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/shreyach52/tenmin" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Model:&lt;/strong&gt; &lt;code&gt;gemma3:4b&lt;/code&gt;, an open-weight model, run locally through Ollama.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend:&lt;/strong&gt; Node and Express. &lt;code&gt;unpdf&lt;/code&gt; reads the PDF page by page, so every card can point back to its source slides. The model returns the cards as strict JSON, and the server cleans and validates each one.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Frontend:&lt;/strong&gt; React with Vite. The feed, sprints, and keyboard controls (arrow keys to move, Space to reveal an answer) are plain React.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Streaming:&lt;/strong&gt; the server sends cards batch by batch, so the first sprint appears while the rest of the deck is still being read.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Streak guard:&lt;/strong&gt; the daily problem and streak live in the browser. A hint route asks the same local model for three levels of hint (technique, key idea, outline), with a rule never to write code.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What I learned along the way:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Small models need small batches.&lt;/strong&gt; My first run sent eight slides at a time. It produced a card with garbled text and another whose answer didn't match its own bullets. Dropping to four slides per batch and tightening the prompt cleaned up most of it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ollama's default context window was too small.&lt;/strong&gt; I had to raise &lt;code&gt;num_ctx&lt;/code&gt; explicitly, or long batches would be silently cut off.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Never trust the model's JSON.&lt;/strong&gt; Some bullets came back squashed into one string with stray quote marks, so the server now repairs them and skips a batch that comes back broken instead of crashing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Source page numbers matter.&lt;/strong&gt; Because the model can be wrong, every card says which slides it came from, so checking takes seconds.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What my friend said
&lt;/h2&gt;

&lt;p&gt;I handed it to her to try on her real study material. In her own words:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Honestly, I actually liked using TenMin, especially during exams when looking at a 100-slide PPT itself feels exhausting 😭. The idea of breaking everything into small cards makes studying feel a little less overwhelming, and I like that I can just go through a few cards at a time instead of forcing myself to sit and read everything at once.&lt;/p&gt;

&lt;p&gt;The recall questions are a nice touch too, because sometimes I feel like I've understood something while reading, but I can't actually remember it when I try to answer on my own. The source slide numbers are also helpful when I want to go back and check something.&lt;/p&gt;

&lt;p&gt;I also liked the daily coding streak idea because I tend to completely ignore DSA during exams and then regret it later 💀. The hints are useful when I'm stuck, especially when they give me an idea of how to approach a problem instead of just giving away the answer.&lt;/p&gt;

&lt;p&gt;But yeah, it's not perfect. Sometimes the AI-generated cards miss a few important points or don't explain things properly, so I still have to refer to the original PPT. And processing takes quite a while, especially for bigger PDFs, which can get a little annoying when I'm already short on time.&lt;/p&gt;

&lt;p&gt;Overall, I genuinely think it's a useful idea, especially for someone like me who gets overwhelmed by huge portions during exams. It's not like it magically makes studying easy, but it makes getting started a lot less stressful.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Her biggest complaint was the wait, so I changed the app because of it: cards now stream in as each part of the deck is finished, and she can start the first sprint while the rest is still being read.&lt;/p&gt;

&lt;p&gt;The other complaint I haven't solved: sometimes the cards miss important points, so she still checks the original slides. A 4B model on a laptop isn't a careful human summarizer. I kept that honest in the app with source pages on every card and a warning next to AI hints.&lt;/p&gt;

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

&lt;p&gt;I could have built this on a closed API, but it would have been a worse tool for her.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Her slides stay on her machine.&lt;/strong&gt; Course material, notes, and practice habits never touch a server she doesn't control.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It works without internet.&lt;/strong&gt; That matters on a hostel connection that keeps dropping during exams.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It costs nothing and has no limits.&lt;/strong&gt; No rate limits and no bill the night before an exam.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;I could change how it behaves.&lt;/strong&gt; I tuned the prompt, batch size, and context window for her subjects, and swapping the model is a one-line change.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The trade-off is real: a small local model is slower and less accurate than a large hosted one. For a tool she needs to trust with her notes and run at 1 AM, I thought the trade was worth it, and her feedback suggests she agrees.&lt;/p&gt;

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

&lt;p&gt;By Antigravity as IDE&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Best Use of Gemma:&lt;/strong&gt; TenMin runs Gemma 3 (4B), Google's open-weight model, locally through Ollama. It generates the study cards from a student's lecture slides and the three-level hints for the daily coding problem. I tuned the batch size, context window, and prompts around Gemma's limits on a laptop, and the whole thing works offline, so a student's course material never leaves her machine.&lt;/p&gt;

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