<?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: suraj srivastav</title>
    <description>The latest articles on DEV Community by suraj srivastav (@suraj_srivastav).</description>
    <link>https://dev.to/suraj_srivastav</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%2F4155968%2Fa6de8e03-8afe-4623-98b5-94bc9010d8a4.jpg</url>
      <title>DEV Community: suraj srivastav</title>
      <link>https://dev.to/suraj_srivastav</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/suraj_srivastav"/>
    <language>en</language>
    <item>
      <title>LinguaPal: a tiny offline language tutor I built for one friend</title>
      <dc:creator>suraj srivastav</dc:creator>
      <pubDate>Mon, 05 Oct 2026 05:55:34 +0000</pubDate>
      <link>https://dev.to/suraj_srivastav/linguapal-a-tiny-offline-language-tutor-i-built-for-one-friend-2p69</link>
      <guid>https://dev.to/suraj_srivastav/linguapal-a-tiny-offline-language-tutor-i-built-for-one-friend-2p69</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;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fraw.githubusercontent.com%2Fsurajns0033-collab%2Flinguapal%2Fmain%2Fdocs%2Fbanner.svg" 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%2Fraw.githubusercontent.com%2Fsurajns0033-collab%2Flinguapal%2Fmain%2Fdocs%2Fbanner.svg" alt="LinguaPal — a small, patient language tutor you can run yourself" width="1200" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;My friend is learning Spanish. She's not afraid of grammar drills — she's&lt;br&gt;
afraid of &lt;em&gt;speaking&lt;/em&gt;. Every app she tried sent her halting, half-wrong sentences&lt;br&gt;
to some company's server, and every time she got something wrong she felt like&lt;br&gt;
she was being graded. She told me: &lt;em&gt;"I want to practice without feeling watched."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;So I built &lt;strong&gt;LinguaPal&lt;/strong&gt; for her. It's a tiny practice partner that runs on her&lt;br&gt;
own laptop. It:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;holds a conversation in Spanish at her level, and never gets tired or impatient;&lt;/li&gt;
&lt;li&gt;corrects her gently, right inside the reply — &lt;em&gt;"you wrote &lt;code&gt;yo soy cansado&lt;/code&gt;; for a
state like this, &lt;code&gt;estoy cansado&lt;/code&gt;"&lt;/em&gt; — with a one-line reason, never a red mark;&lt;/li&gt;
&lt;li&gt;turns every new word it introduces into a flashcard automatically;&lt;/li&gt;
&lt;li&gt;brings those words back later with a small spaced-repetition scheduler, so they
actually stick;&lt;/li&gt;
&lt;li&gt;remembers the words she keeps forgetting and quietly weaves them into the next
conversation;&lt;/li&gt;
&lt;li&gt;reacts as she practises: a little companion &lt;strong&gt;orb&lt;/strong&gt; shows the tutor's mood
(thinking, happy, gently-correcting) with a sprinkling of emoji, so it feels like
a pal rather than a grader — a small thing that turned out to matter most.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The whole thing is one FastAPI app and a page of plain JavaScript. No account, no&lt;br&gt;
signup, no analytics.&lt;/p&gt;
&lt;h3&gt;
  
  
  Her Reaction
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"I can finally practice without feeling watched or graded. The gentle corrections and the little orb make it feel like a patient friend is right there with me instead of an app testing me."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;



&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/wC207lo80bU" width="710" height="399"&gt;
  &lt;/iframe&gt;
&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%2Fraw.githubusercontent.com%2Fsurajns0033-collab%2Flinguapal%2Fmain%2Fdocs%2Fdemo.svg" 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%2Fraw.githubusercontent.com%2Fsurajns0033-collab%2Flinguapal%2Fmain%2Fdocs%2Fdemo.svg" alt="Demo storyboard — the 6 scenes of the walkthrough" width="1200" height="700"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Deployed app: &lt;strong&gt;&lt;a href="https://linguapal.onrender.com" rel="noopener noreferrer"&gt;https://linguapal.onrender.com&lt;/a&gt;&lt;/strong&gt; — live on &lt;strong&gt;Render&lt;/strong&gt;. You don't need a local&lt;br&gt;
GPU to try it: the hosted app points &lt;code&gt;LLM_BASE_URL&lt;/code&gt; at &lt;strong&gt;Google AI Studio's&lt;br&gt;
OpenAI-compatible endpoint, serving Gemma open weights&lt;/strong&gt; — so the live demo runs on&lt;br&gt;
Gemma with no credit card and no local GPU. The &lt;em&gt;same&lt;/em&gt; app runs fully offline on&lt;br&gt;
my friend's laptop with LM Studio or Ollama. One variable, two deployments.&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/surajns0033-collab" rel="noopener noreferrer"&gt;
        surajns0033-collab
      &lt;/a&gt; / &lt;a href="https://github.com/surajns0033-collab/linguapal" rel="noopener noreferrer"&gt;
        linguapal
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A tiny offline language tutor built for one friend. Open-weight Gemma runs locally; her practice never leaves her laptop.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;LinguaPal&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;A small, patient language tutor that runs on your own machine — built for one friend.&lt;/strong&gt;&lt;/p&gt;
&lt;a rel="noopener noreferrer" href="https://github.com/surajns0033-collab/linguapal/docs/banner.svg"&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%2Fsurajns0033-collab%2Flinguapal%2FHEAD%2Fdocs%2Fbanner.svg" alt="LinguaPal — a small, patient language tutor you can run yourself" width="100%"&gt;&lt;/a&gt;
&lt;p&gt;&lt;a href="https://github.com/surajns0033-collab/linguapal/LICENSE" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/784362b26e4b3546254f1893e778ba64616e362bd6ac791991d2c9e880a3a64e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d677265656e2e737667" alt="License: MIT"&gt;&lt;/a&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/ac095efffec6ac483a78a54200d72e16c1eeeb3c29542653715e7dd2eb56ef00/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f507974686f6e2d332e31302532422d626c7565"&gt;&lt;img src="https://camo.githubusercontent.com/ac095efffec6ac483a78a54200d72e16c1eeeb3c29542653715e7dd2eb56ef00/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f507974686f6e2d332e31302532422d626c7565" alt="Python"&gt;&lt;/a&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/85005c72705e71f7290f1ad6cf41fa8320498ac82da65f889ec658244bc83f48/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6d6f64656c2d47656d6d61253230342d6f72616e6765"&gt;&lt;img src="https://camo.githubusercontent.com/85005c72705e71f7290f1ad6cf41fa8320498ac82da65f889ec658244bc83f48/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6d6f64656c2d47656d6d61253230342d6f72616e6765" alt="Model"&gt;&lt;/a&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/b15652df0052d1e3391e6d47328bf4d1e3cdf4f0e0cdb2c20dbe8f750393a738/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f72756e732d6f66666c696e652d73756363657373"&gt;&lt;img src="https://camo.githubusercontent.com/b15652df0052d1e3391e6d47328bf4d1e3cdf4f0e0cdb2c20dbe8f750393a738/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f72756e732d6f66666c696e652d73756363657373" alt="Runs offline"&gt;&lt;/a&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/d35cd52b7d78011bbf8a42f3242daa9604e75d91764376fff1b681f8edeaec9c/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6261636b656e642d466173744150492d303039363838"&gt;&lt;img src="https://camo.githubusercontent.com/d35cd52b7d78011bbf8a42f3242daa9604e75d91764376fff1b681f8edeaec9c/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6261636b656e642d466173744150492d303039363838" alt="FastAPI"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Built for the &lt;strong&gt;Hacktoberfest Weekend Challenge: Build for a Friend&lt;/strong&gt; (Oct 2–5, 2026).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Live Demo:&lt;/strong&gt; &lt;a href="https://linguapal.onrender.com" rel="nofollow noopener noreferrer"&gt;https://linguapal.onrender.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://render.com/deploy?repo=https://github.com/surajns0033-collab/linguapal" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/c3053e93bc9f0a2cd84050a5ff9f07cc5e639621a72e50dce48781f4a38f10e2/68747470733a2f2f72656e6465722e636f6d2f696d616765732f6465706c6f792d746f2d72656e6465722d627574746f6e2e737667" alt="Deploy to Render"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;LinguaPal is a language-practice partner for &lt;strong&gt;one real person&lt;/strong&gt; — my friend, who is
learning a new language and gets nervous about making mistakes. It chats with her at
her level, corrects her gently with a short explanation, turns new words into
flashcards automatically, and schedules those cards for review. Everything runs on a
&lt;strong&gt;local open-weight model&lt;/strong&gt;, and her practice never leaves her machine.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Contents&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/surajns0033-collab/linguapal#the-idea" rel="noopener noreferrer"&gt;The idea&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/surajns0033-collab/linguapal#features" rel="noopener noreferrer"&gt;Features&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/surajns0033-collab/linguapal#how-it-works" rel="noopener noreferrer"&gt;How it works&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/surajns0033-collab/linguapal#tech-stack" rel="noopener noreferrer"&gt;Tech stack&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/surajns0033-collab/linguapal#getting-started" rel="noopener noreferrer"&gt;Getting started&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/surajns0033-collab/linguapal#configuration" rel="noopener noreferrer"&gt;Configuration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/surajns0033-collab/linguapal#project-structure" rel="noopener noreferrer"&gt;Project structure&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/surajns0033-collab/linguapal#http-api" rel="noopener noreferrer"&gt;HTTP API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/surajns0033-collab/linguapal#deployment" rel="noopener noreferrer"&gt;Deployment&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/surajns0033-collab/linguapal#why-open-weights" rel="noopener noreferrer"&gt;Why open weights&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/surajns0033-collab/linguapal#license" rel="noopener noreferrer"&gt;License&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;The idea&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Most practice apps send every half-wrong sentence to a company's server, and grade it
For a shy learner that is the worst possible design: the fear of being watched…&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/surajns0033-collab/linguapal" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;&lt;a href="https://github.com/surajns0033-collab/linguapal" rel="noopener noreferrer"&gt;github.com/surajns0033-collab/linguapal&lt;/a&gt; — MIT licensed.&lt;/p&gt;

&lt;p&gt;The interesting bits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;app/llm.py&lt;/code&gt; — talks to a &lt;strong&gt;local, OpenAI-compatible open-weight server&lt;/strong&gt; (LM Studio or Ollama).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;app/prompts.py&lt;/code&gt; — a strict &lt;code&gt;REPLY / CORRECTIONS / VOCAB&lt;/code&gt; contract so one local call yields the reply &lt;em&gt;and&lt;/em&gt; the feedback.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;app/srs.py&lt;/code&gt; — a dependency-free small spaced-repetition scheduler.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;app/store.py&lt;/code&gt; — everything (learner, history, cards) in a single local SQLite file.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How I Built It
&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%2Fraw.githubusercontent.com%2Fsurajns0033-collab%2Flinguapal%2Fmain%2Fdocs%2Farchitecture.svg" 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%2Fraw.githubusercontent.com%2Fsurajns0033-collab%2Flinguapal%2Fmain%2Fdocs%2Farchitecture.svg" alt="How LinguaPal works — one FastAPI app, an open-weight model behind a single env-var seam" width="1200" height="560"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The core of LinguaPal is &lt;strong&gt;an open-weight model&lt;/strong&gt; — during the challenge the tutor&lt;br&gt;
ran on &lt;strong&gt;Gemma 3n E2B&lt;/strong&gt; (2.79 GB, quantised), loaded in LM Studio on my own laptop.&lt;br&gt;
&lt;code&gt;app/llm.py&lt;/code&gt; speaks the OpenAI-compatible chat API, so the model is a swappable&lt;br&gt;
part of the stack — not a hard dependency on anyone's cloud. Pinning it to Gemma,&lt;br&gt;
or moving it from a laptop to a hosted endpoint, is one line in &lt;code&gt;.env&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;That last point matters for the deployed demo: an open-weight model is normally&lt;br&gt;
served the same way everywhere, so the &lt;em&gt;identical&lt;/em&gt; app talks to a laptop LM Studio&lt;br&gt;
server &lt;strong&gt;or&lt;/strong&gt; to a remote OpenAI-compatible open-weight endpoint (&lt;code&gt;LLM_BASE_URL&lt;/code&gt; +&lt;br&gt;
optional &lt;code&gt;LLM_API_KEY&lt;/code&gt;). The hosted link and the offline laptop build are the same&lt;br&gt;
code — only the endpoint differs. There is no closed API anywhere in the loop.&lt;/p&gt;

&lt;p&gt;The one design constraint that shaped everything: &lt;strong&gt;a small local model is slower&lt;br&gt;
and less chatty than a frontier API.&lt;/strong&gt; So I stopped treating the model as an&lt;br&gt;
oracle and treated it as a component. The prompt asks for a strict three-part&lt;br&gt;
reply — the conversation, a list of corrections, and any new vocabulary — and&lt;br&gt;
&lt;code&gt;app/llm.py&lt;/code&gt; parses that into structured data. One local inference gives me the&lt;br&gt;
reply &lt;em&gt;and&lt;/em&gt; the feedback &lt;em&gt;and&lt;/em&gt; the flashcards. The spaced-repetition scheduler&lt;br&gt;
lives in plain Python (&lt;code&gt;app/srs.py&lt;/code&gt;), not in the model, so the learner's progress&lt;br&gt;
is deterministic and instant. The result feels responsive even on a 4B model&lt;br&gt;
running on a laptop.&lt;/p&gt;

&lt;p&gt;Open-source AI is the point, not a garnish: the model &lt;em&gt;is&lt;/em&gt; the tutor. Everything&lt;br&gt;
around it just makes a small local model feel like a patient friend.&lt;/p&gt;

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

&lt;p&gt;For this project, running on an open-weight model locally isn't a nice-to-have — it&lt;br&gt;
is the feature. My friend's exact fear was being watched while practicing, and the&lt;br&gt;
open approach removes that fear at the root:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Her practice never leaves her laptop.&lt;/strong&gt; Not "we don't log it" — it simply
&lt;em&gt;can't&lt;/em&gt; leave, because there's no remote API in the loop. That's the difference
between a privacy &lt;em&gt;policy&lt;/em&gt; and a privacy &lt;em&gt;guarantee&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It works with no internet.&lt;/strong&gt; She practices Spanish on the metro, offline.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It costs nothing to run&lt;/strong&gt;, so she never feels she's "using up" someone's tokens
and can't afford to make a hundred mistakes. For a shy learner, that changes
everything.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The model is swappable — and so is &lt;em&gt;where&lt;/em&gt; it runs.&lt;/strong&gt; Gemma today, Llama or
Qwen tomorrow; on her laptop tonight, on a small hosted open-weight endpoint when
she wants a public link. One env var, same app. A closed endpoint would lock her
progress behind one vendor's pricing and one vendor's model.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No GPU required to try it.&lt;/strong&gt; The deployed demo uses an open-weight endpoint, so
anyone can open a link and practise — then run the exact same code fully offline.
Open weights make the offline build and the hosted build the &lt;em&gt;same&lt;/em&gt; program.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;She can own it.&lt;/strong&gt; It's MIT-licensed. If she wants to change the tone, the
corrections, the scheduler, she just edits it. A gift you can open the hood on.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A closed API would have made this an app about a subscription. Open weights made it&lt;br&gt;
a gift.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Deployment (Best Use of Render):&lt;/strong&gt; the FastAPI app and front end are deployed on&lt;br&gt;
&lt;strong&gt;Render&lt;/strong&gt; on the free plan, with no credit card and no GPU. The always-on part —&lt;br&gt;
the web app, the spaced-repetition scheduler, the SQLite store — lives on Render,&lt;br&gt;
while the model stays swappable behind one env var: Google AI Studio's&lt;br&gt;
OpenAI-compatible endpoint serves &lt;strong&gt;Gemma&lt;/strong&gt; for the public demo, and the same build&lt;br&gt;
points at LM Studio / Ollama for a fully offline setup on my friend's laptop. That split&lt;br&gt;
is deliberate: the always-on, low-sensitivity part lives in the cloud; the private&lt;br&gt;
part — her conversations — can stay entirely local.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Agent Session
&lt;/h2&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; — Gemma is the tutor's core. Two of the three allowed paths
need &lt;em&gt;no code change&lt;/em&gt; and both are wired in:
&lt;strong&gt;(a) run it locally&lt;/strong&gt; — during the challenge the tutor ran on &lt;strong&gt;Gemma 3n E2B&lt;/strong&gt; in
LM Studio on my laptop; &lt;strong&gt;(b) serve it through a provider&lt;/strong&gt; — the live demo points
&lt;code&gt;LLM_BASE_URL&lt;/code&gt; at &lt;strong&gt;Google AI Studio's OpenAI-compatible endpoint serving Gemma 4&lt;/strong&gt;
(&lt;code&gt;LLM_MODEL=gemma-4-26b-a4b-it&lt;/code&gt;), the &lt;em&gt;same&lt;/em&gt; app with one env var. &lt;strong&gt;(c) fine-tune it&lt;/strong&gt; —
because the model sits behind the single &lt;code&gt;app/llm.py&lt;/code&gt; seam, a Gemma fine-tuned to
my friend's level drops in as just another &lt;code&gt;LLM_MODEL&lt;/code&gt;, with nothing else touched.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Render&lt;/strong&gt; — the app/front end is deployed on Render and Gemma is served
remotely, so the whole thing runs with no credit card and no GPU.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Built solo during the Hacktoberfest Weekend Challenge window, Oct 2–5, 2026.&lt;br&gt;
Open-source AI at the core; MIT licensed; no data leaves the learner's machine.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>not able to claim render code, anyone help</title>
      <dc:creator>suraj srivastav</dc:creator>
      <pubDate>Mon, 05 Oct 2026 01:57:49 +0000</pubDate>
      <link>https://dev.to/suraj_srivastav/not-able-to-claim-render-code-anyone-help-180m</link>
      <guid>https://dev.to/suraj_srivastav/not-able-to-claim-render-code-anyone-help-180m</guid>
      <description></description>
    </item>
  </channel>
</rss>
