<?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: Harshit Sharma</title>
    <description>The latest articles on DEV Community by Harshit Sharma (@harshit_sharma_eca870abd0).</description>
    <link>https://dev.to/harshit_sharma_eca870abd0</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%2F3079837%2F5f10d6a7-9685-4525-9956-12f497f77ad6.png</url>
      <title>DEV Community: Harshit Sharma</title>
      <link>https://dev.to/harshit_sharma_eca870abd0</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/harshit_sharma_eca870abd0"/>
    <language>en</language>
    <item>
      <title>Language-Tutor</title>
      <dc:creator>Harshit Sharma</dc:creator>
      <pubDate>Sun, 04 Oct 2026 10:46:57 +0000</pubDate>
      <link>https://dev.to/harshit_sharma_eca870abd0/language-tutor-77b</link>
      <guid>https://dev.to/harshit_sharma_eca870abd0/language-tutor-77b</guid>
      <description>&lt;h1&gt;
  
  
  Hacktoberfest 2026: Build for a Friend — Submission
&lt;/h1&gt;

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

&lt;p&gt;&lt;strong&gt;Language Tutor&lt;/strong&gt; — A local-first AI language tutor that runs entirely in your terminal. Practice 15+ languages with complete privacy — all conversations, vocabulary, and progress data stays on your machine in SQLite. Only API calls leave your device for AI inference.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Built for:&lt;/strong&gt; My friend who wants to learn Spanish privately without subscriptions, data tracking, or cloud sync. They needed something that works offline for review, respects privacy, and costs $0.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Problems solved:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ No monthly fees — uses NVIDIA's generous free API tier (14,400 req/day)&lt;/li&gt;
&lt;li&gt;✅ Works offline — review vocab, view progress, export data without internet&lt;/li&gt;
&lt;li&gt;✅ Zero data leaves your machine except API prompts — SQLite stored locally&lt;/li&gt;
&lt;li&gt;✅ Customizable — 4 tutor personalities, 6 CEFR levels, 8 AI models&lt;/li&gt;
&lt;li&gt;✅ Portable — single binary, JSON export/import for backup or sharing&lt;/li&gt;
&lt;/ul&gt;




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

&lt;h3&gt;
  
  
  Terminal Demo (ASCII Recording)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌─────────────────────────────────────────────────────────────────┐
│ 🗣️  Language Tutor                    v0.1.0                  │
│ Step 1/3: Setup                                                   │
├─────────────────────────────────────────────────────────────────┤
│ 1. Add API Key                                                    │
│ 2. Pick Language                                                  │
│ 3. Start Chatting                                                 │
│                                                                   │
│ 🗣️  Language Tutor                                                │
│ Practice any language with AI — 100% private, runs in terminal   │
│                                                                   │
│ Step 1 of 2: Get your free API key                                │
│ 1. Open https://build.nvidia.com in your browser                 │
│ 2. Sign in (Google/GitHub/Email) — it's free                     │
│ 3. Click "Get API Key" and copy it                               │
│ 4. Paste it below and press Enter                                 │
│                                                                   │
│ ❯ nvapi-xxxxxxxxxxxx█                                             │
│                                                                   │
│ ✓ Connected! Press Enter to continue.                             │
│ Your key is saved locally. Only used for AI responses.           │
└─────────────────────────────────────────────────────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌─────────────────────────────────────────────────────────────────┐
│ 🗣️  Language Tutor                    v0.1.0                  │
│ Step 2/3: Chat                                                    │
├─────────────────────────────────────────────────────────────────┤
│ 💬 Chat                                          Spanish │ encouraging │ A1 │
├─────────────────────────────────────────────────────────────────┤
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ You                                                         │ │
│ │ Hola, ¿cómo estás?                                          │ │
│ └─────────────────────────────────────────────────────────────┘ │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ 🤖 Tutor                                                    │ │
│ │ ¡Hola! Estoy muy bien, gracias por preguntar. ¿Y tú?        │ │
│ │ (Hello! I'm very well, thanks for asking. And you?)         │ │
│ └─────────────────────────────────────────────────────────────┘ │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ You                                                         │ │
│ │ Estoy bien. Quiero aprender español para viajar.            │ │
│ └─────────────────────────────────────────────────────────────┘ │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ 🤖 Tutor                                                    │ │
│ │ ¡Excelente! (Excellent!) Viajar es una gran razón.          │ │
│ │ ¿Qué países hispanohablantes quieres visitar?               │ │
│ └─────────────────────────────────────────────────────────────┘ │
│ ❯ Estoy bien. Quiero aprender español para viajar.█             │
├─────────────────────────────────────────────────────────────────┤
│ Ctrl+Shift+H for shortcuts  |  Ctrl+1-5 to navigate  |  Esc for chat │
└─────────────────────────────────────────────────────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Key Features in Action
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Demo&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Vocabulary Review (SM-2)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;Ctrl+2&lt;/code&gt; → Grade words with 0/1/3/5 (Again/Hard/Good/Easy)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Scenarios&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;Ctrl+3&lt;/code&gt; → Restaurant, Travel, Interview, Doctor, Emergency + Custom&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Progress Dashboard&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;Ctrl+4&lt;/code&gt; → Streaks, heatmap, stats, &lt;code&gt;Ctrl+E&lt;/code&gt; export, &lt;code&gt;Ctrl+I&lt;/code&gt; import&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Settings&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;Ctrl+5&lt;/code&gt; → Model, Personality, Difficulty, API Key, Simple Mode&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Help&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;Ctrl+Shift+H&lt;/code&gt; → All keyboard shortcuts&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Repository:&lt;/strong&gt; &lt;a href="https://github.com/H-sharma63/language-tutor" rel="noopener noreferrer"&gt;https://github.com/H-sharma63/language-tutor&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Project Structure
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;language-tutor/
├── src/
│   ├── index.ts              # CLI entry (Commander.js + TTY check)
│   ├── app.tsx               # Main Ink app with screen routing
│   ├── screens/
│   │   ├── Welcome.tsx       # 3-step onboarding (API → Language → Chat)
│   │   ├── Chat.tsx          # Streaming chat with message bubbles
│   │   ├── VocabReview.tsx   # SM-2 spaced repetition UI
│   │   ├── Scenarios.tsx     # 8 roleplay scenarios + custom
│   │   ├── Progress.tsx      # Streaks, stats, heatmap, export/import
│   │   └── Settings.tsx      # 4 tabs: Chat, Learning, Account, Advanced
│   ├── components/
│   │   ├── Header.tsx        # Step indicator (like berwapp)
│   │   └── MessageBubble.tsx # User/assistant message rendering
│   ├── services/
│   │   ├── llm.ts            # NVIDIA API client (streaming + non-stream)
│   │   ├── conversation.ts   # Chat persistence &amp;amp; history
│   │   ├── vocabulary.ts     # Vocab CRUD + SM-2 SRS algorithm
│   │   ├── progress.ts       # Analytics + JSON export/import
│   │   └── prompts.ts        # System prompt builder (personalities + CEFR)
│   └── utils/
│       ├── db.ts             # SQLite + schema (7 tables, WAL mode)
│       └── paths.ts          # Cross-platform data directories
├── templates/prompts/        # 15 language-specific system prompts
├── dist/                     # Built output (single ESM file)
├── package.json
├── tsconfig.json
├── tsup.config.ts
├── README.md
├── ARCHITECTURE.md
├── PLAN.md
└── TRACKER.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Installation &amp;amp; Run
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Clone&lt;/span&gt;
git clone &amp;lt;your-repo-url&amp;gt;
&lt;span class="nb"&gt;cd &lt;/span&gt;language-tutor

&lt;span class="c"&gt;# Install &amp;amp; build&lt;/span&gt;
npm &lt;span class="nb"&gt;install
&lt;/span&gt;npm run build

&lt;span class="c"&gt;# Run&lt;/span&gt;
node dist/index.js
&lt;span class="c"&gt;# or after npm publish:&lt;/span&gt;
npx language-tutor
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Tech Stack
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;Technology&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;TUI Framework&lt;/td&gt;
&lt;td&gt;Ink 5.x (React for CLI)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CLI Parser&lt;/td&gt;
&lt;td&gt;Commander.js 12.x&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Database&lt;/td&gt;
&lt;td&gt;better-sqlite3 11.x (WAL mode)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AI API&lt;/td&gt;
&lt;td&gt;NVIDIA (Nemotron, Llama 3.1, Mistral, Gemma, Phi)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Streaming&lt;/td&gt;
&lt;td&gt;Native fetch + SSE&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Build&lt;/td&gt;
&lt;td&gt;tsup 8.x (ESM, Node 18+)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Language&lt;/td&gt;
&lt;td&gt;TypeScript 5.x (strict)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




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

&lt;h3&gt;
  
  
  Open-Source AI Used
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;NVIDIA's Free API Tier&lt;/strong&gt; — 8 open-weight models hosted free:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;nvidia/nemotron-3.5-lightning-30b-a3b&lt;/code&gt; (default, fast)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;meta/llama-3.1-8b-instruct&lt;/code&gt; / &lt;code&gt;70b&lt;/code&gt; / &lt;code&gt;405b-instruct&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;mistralai/mistral-large-2-instruct&lt;/code&gt; / &lt;code&gt;mistral-nemo-12b-instruct&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;google/gemma-2-9b-it&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;microsoft/phi-3.5-mini-instruct&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;No local inference needed&lt;/strong&gt; — runs on any machine with Node.js 18+ and internet for chat.&lt;/p&gt;

&lt;h3&gt;
  
  
  Architecture Highlights
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Local-First by Default&lt;/strong&gt; — SQLite with WAL mode stores everything: conversations, messages, vocabulary, SRS state, daily progress, settings. Zero cloud sync.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Streaming TUI&lt;/strong&gt; — Ink (React for terminals) renders tokens in real-time via async generators consuming NVIDIA's SSE stream.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;SM-2 Spaced Repetition&lt;/strong&gt; — Implemented from scratch in &lt;code&gt;vocabulary.ts&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;   &lt;span class="c1"&gt;// Ease factor update: EF' = EF + (0.1 - (5-q)*(0.08 + (5-q)*0.02))&lt;/span&gt;
   &lt;span class="c1"&gt;// Interval: 1, 6, then EF * previous_interval&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Language-Specific Prompts&lt;/strong&gt; — 15 &lt;code&gt;.md&lt;/code&gt; templates in &lt;code&gt;templates/prompts/&lt;/code&gt; with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Strict language enforcement ("IMPORTANT: Always respond in Spanish")&lt;/li&gt;
&lt;li&gt;Common learner mistakes per language&lt;/li&gt;
&lt;li&gt;Cultural context (formal/informal address, regional variations)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Privacy-First Data Export&lt;/strong&gt; — Full JSON round-trip for backup, machine transfer, or sharing with a friend.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




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

&lt;p&gt;&lt;strong&gt;Open-weight models + free hosting = Democratized AI access.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Without NVIDIA's free tier (and similar offerings from Groq, OpenRouter, Together AI):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;This project would need a $2,000+ GPU for local inference&lt;/li&gt;
&lt;li&gt;Or $20+/month for commercial APIs (OpenAI, Anthropic)&lt;/li&gt;
&lt;li&gt;My friend couldn't afford either&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;What open innovation made possible:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ &lt;strong&gt;Zero cost to run&lt;/strong&gt; — 14,400 free requests/day covers heavy daily use&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Model choice&lt;/strong&gt; — Switch between 8 models for speed vs quality&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;No vendor lock-in&lt;/strong&gt; — Swap API endpoint in one file&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Community-driven&lt;/strong&gt; — Prompt templates are plain Markdown, anyone can contribute a language&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Transparency&lt;/strong&gt; — You know exactly what data leaves your machine (just the chat context)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Closed APIs would have meant:&lt;/strong&gt; Usage limits, billing surprises, data retention policies, and no offline capability.&lt;/p&gt;




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

&lt;p&gt;This project was built with &lt;strong&gt;Claude Code&lt;/strong&gt; (Anthropic's CLI agent). The development session included:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Project planning &amp;amp; architecture (PLAN.md, ARCHITECTURE.md)&lt;/li&gt;
&lt;li&gt;Daily progress tracking (TRACKER.md)&lt;/li&gt;
&lt;li&gt;Full implementation across 4 days&lt;/li&gt;
&lt;li&gt;TypeScript strict-mode fixes&lt;/li&gt;
&lt;li&gt;15 language prompt templates&lt;/li&gt;
&lt;li&gt;Build verification&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Agent session available via DevRelay if needed for judging.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Submission Checklist
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;✅ &lt;strong&gt;Working demo&lt;/strong&gt; — &lt;code&gt;node dist/index.js&lt;/code&gt; launches TUI immediately&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Privacy-first&lt;/strong&gt; — All data in local SQLite (&lt;code&gt;%APPDATA%/language-tutor/&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Free to run&lt;/strong&gt; — NVIDIA free tier, no subscriptions&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Offline-capable&lt;/strong&gt; — Vocab review, progress, export work without internet&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;15 languages&lt;/strong&gt; — ES, FR, DE, IT, PT, JA, KO, ZH, RU, AR, HI, TR, NL, PL, SV&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;8 AI models&lt;/strong&gt; — Llama, Mistral, Gemma, Phi, Nemotron via NVIDIA&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;SM-2 SRS&lt;/strong&gt; — Proven spaced repetition algorithm&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Export/Import&lt;/strong&gt; — Full JSON portability&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Keyboard-driven&lt;/strong&gt; — Ctrl+1-5, Esc, Ctrl+Shift+H, no mouse needed&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Simple Mode&lt;/strong&gt; — Beginner-friendly (Chat + Vocab only)&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Builds clean&lt;/strong&gt; — &lt;code&gt;npm run build&lt;/code&gt; → single ESM file, no TypeScript errors&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;MIT License&lt;/strong&gt; — In package.json&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;README + Docs&lt;/strong&gt; — Complete usage guide&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;Built with ❤️ for language learners everywhere — especially the friend who inspired this.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Hacktoberfest 2026 • Build for a Friend • Local-First AI&lt;/em&gt;&lt;/p&gt;

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