<?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: kannananil</title>
    <description>The latest articles on DEV Community by kannananil (@kannananil).</description>
    <link>https://dev.to/kannananil</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%2F581502%2F10ee53d8-d5c3-45fa-b8a2-f6af18b94613.jpeg</url>
      <title>DEV Community: kannananil</title>
      <link>https://dev.to/kannananil</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kannananil"/>
    <language>en</language>
    <item>
      <title>Recall: A Local-First AI Reading Assistant That Organizes Your Bookmarks So You Don't Have To</title>
      <dc:creator>kannananil</dc:creator>
      <pubDate>Mon, 26 Oct 2026 06:53:41 +0000</pubDate>
      <link>https://dev.to/kannananil/recall-a-local-first-ai-reading-assistant-that-organizes-your-bookmarks-so-you-dont-have-to-o37</link>
      <guid>https://dev.to/kannananil/recall-a-local-first-ai-reading-assistant-that-organizes-your-bookmarks-so-you-dont-have-to-o37</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week3-2026-10-19"&gt;Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;The Problem:&lt;/strong&gt; We all bookmark interesting articles with the best intentions. Two weeks later, we need that article about FastAPI (or was it Flask?) and face a graveyard of 200+ unsorted links. We click through five before giving up and just Googling it again.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The real problem isn't that we save too much—it's that we never organize what we save.&lt;/strong&gt; Manual tagging is tedious. Creating folder hierarchies is a chore we never get around to. So our bookmarks pile up, unread and unsearchable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Solution: Recall&lt;/strong&gt; - A local-first reading assistant that automatically organizes your saved articles using open-source AI. One click saves an article, and while you move on with your life, a local LLM:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ Generates a concise summary&lt;/li&gt;
&lt;li&gt;✅ Extracts key takeaways&lt;/li&gt;
&lt;li&gt;✅ Categorizes it automatically&lt;/li&gt;
&lt;li&gt;✅ Adds relevant tags&lt;/li&gt;
&lt;li&gt;✅ Estimates reading time&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Everything happens locally on your machine. No cloud service, no API fees, complete privacy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Who gets to be lazier?&lt;/strong&gt; Anyone who reads technical articles, documentation, tutorials, or blog posts. Instead of spending 5 minutes per article organizing bookmarks (that you never do anyway), you spend 5 seconds. The AI handles the rest in 30-40 seconds while you keep browsing.&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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkmyhi7a5lcn98cscxjks.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%2Fkmyhi7a5lcn98cscxjks.png" alt="Dashboard view" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




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

&lt;h3&gt;
  
  
  Saving an Article
&lt;/h3&gt;

&lt;p&gt;I'm reading a React tutorial. One click on the Recall extension:&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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ftjkxsgjhdx22gvs5q651.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%2Ftjkxsgjhdx22gvs5q651.png" alt="Save article" width="800" height="428"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The extension extracts the article content and sends it to my local API. No cloud involved—my reading habits stay on my machine.&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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwqe7zh3gsfftmuvec1a9.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%2Fwqe7zh3gsfftmuvec1a9.png" alt="Saved successfully" width="800" height="428"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Processing in the Background
&lt;/h3&gt;

&lt;p&gt;My local worker picks up the job and sends it to Ollama running Gemma 2B. The terminal shows the processing:&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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8ctkt408wi5xsud7v6io.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%2F8ctkt408wi5xsud7v6io.png" alt="Processing bookmark" width="800" height="132"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Finding It Later
&lt;/h3&gt;

&lt;p&gt;Two weeks later, I need that React tutorial. I open my Recall dashboard and type "react":&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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flou9e8abi44guu3law31.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%2Flou9e8abi44guu3law31.png" alt="Search result" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Instant results with summaries visible. Click for full details:&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%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgq389mvce6heeawfuvnp.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%2Fgq389mvce6heeawfuvnp.png" alt="Bookmark Summary" width="799" height="685"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Live Demo:&lt;/strong&gt; (Local-only - no public deployment)&lt;br&gt;
&lt;strong&gt;Repository:&lt;/strong&gt; &lt;a href="https://github.com/kannananil/recall" rel="noopener noreferrer"&gt;https://github.com/kannananil/recall&lt;/a&gt;&lt;/p&gt;


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

&lt;p&gt;&lt;a href="https://github.com/kannananil/recall" rel="noopener noreferrer"&gt;https://github.com/kannananil/recall&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Tech Stack
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Backend:&lt;/strong&gt; FastAPI, SQLAlchemy, SQLite&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Worker:&lt;/strong&gt; Ollama, Gemma 2B (open-weight model)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Extension:&lt;/strong&gt; TypeScript, Chrome Manifest V3&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dashboard:&lt;/strong&gt; React 18, TypeScript, Vite&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Quick Start
&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;# 1. Install Ollama and pull Gemma 2B&lt;/span&gt;
ollama pull gemma:2b

&lt;span class="c"&gt;# 2. Backend&lt;/span&gt;
&lt;span class="nb"&gt;cd &lt;/span&gt;backend
python &lt;span class="nt"&gt;-m&lt;/span&gt; venv venv
&lt;span class="nb"&gt;source &lt;/span&gt;venv/bin/activate
pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; requirements.txt
python &lt;span class="nt"&gt;-m&lt;/span&gt; uvicorn main:app &lt;span class="nt"&gt;--reload&lt;/span&gt;

&lt;span class="c"&gt;# 3. Worker (separate terminal)&lt;/span&gt;
&lt;span class="nb"&gt;cd &lt;/span&gt;backend
&lt;span class="nb"&gt;source &lt;/span&gt;venv/bin/activate
python worker.py

&lt;span class="c"&gt;# 4. Dashboard (separate terminal)&lt;/span&gt;
&lt;span class="nb"&gt;cd &lt;/span&gt;dashboard
npm &lt;span class="nb"&gt;install
&lt;/span&gt;npm run dev

&lt;span class="c"&gt;# 5. Load extension in Chrome&lt;/span&gt;
&lt;span class="c"&gt;# chrome://extensions/ → Load unpacked → select extension folder&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Full setup instructions in the README.&lt;/p&gt;


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

&lt;p&gt;Recall is built entirely around &lt;strong&gt;Ollama + Gemma 2B&lt;/strong&gt;, an open-weight model from Google running completely locally.&lt;/p&gt;
&lt;h3&gt;
  
  
  Architecture
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌─────────────────┐
│  Browser Ext    │──┐
│  (Chrome)       │  │
└─────────────────┘  │
                     ├──► ┌──────────────────┐
┌─────────────────┐  │    │   FastAPI        │
│  Dashboard      │──┤    │   Backend        │
│  (React+Vite)   │  │    └────────┬─────────┘
└─────────────────┘  │             │
                     │     ┌───────▼──────┐
                     │     │   SQLite DB  │
                     │     └───────▲──────┘
                     │             │
                     └────►  ┌─────┴─────────┐
                            │  Worker        │
                            │  (Ollama+Gemma)│
                            └────────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3&gt;
  
  
  The Open-Source AI Stack
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;1. Ollama&lt;/strong&gt; - Local model runtime that makes running LLMs as easy as &lt;code&gt;ollama run gemma:2b&lt;/code&gt;. No Python version conflicts, no manual model downloads, no configuration headaches. It just works.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Gemma 2B&lt;/strong&gt; - Google's open-weight model. I chose it because:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Small enough to run on modest hardware (8GB RAM)&lt;/li&gt;
&lt;li&gt;Fast inference (~30-40s per article)&lt;/li&gt;
&lt;li&gt;Good at instruction following&lt;/li&gt;
&lt;li&gt;Free forever&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3. Structured Output&lt;/strong&gt; - I prompt the model to return JSON:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;summary&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2-3 sentence summary&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;key_points&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;point 1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;point 2&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;point 3&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;category&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Technology&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;tags&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;python&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;fastapi&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;api&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;estimated_read_minutes&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The model generates this from article text, I validate it with Pydantic, and save it to SQLite.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Design: Async Processing
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;The critical decision:&lt;/strong&gt; Decouple saving from processing.&lt;/p&gt;

&lt;p&gt;When you save a bookmark:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Extension sends article → API (200ms)&lt;/li&gt;
&lt;li&gt;API saves with &lt;code&gt;status=pending&lt;/code&gt; → Returns immediately&lt;/li&gt;
&lt;li&gt;You're done! Move on to the next article&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Meanwhile, in the background:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Worker polls for pending jobs&lt;/li&gt;
&lt;li&gt;Sends to Ollama when available&lt;/li&gt;
&lt;li&gt;Saves generated metadata&lt;/li&gt;
&lt;li&gt;Updates status to &lt;code&gt;completed&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This means &lt;strong&gt;you never wait for AI&lt;/strong&gt;. The bookmark is saved instantly. Processing happens while you're reading something else.&lt;/p&gt;

&lt;h3&gt;
  
  
  Challenges Solved
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;1. Content Extraction:&lt;/strong&gt; Websites are chaos. I use common article selectors (&lt;code&gt;&amp;lt;article&amp;gt;&lt;/code&gt;, &lt;code&gt;[role="main"]&lt;/code&gt;, etc.) with graceful fallbacks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. LLM Validation:&lt;/strong&gt; Even with explicit prompts, models sometimes return invalid JSON. Solution: Strict Pydantic validation + retry logic (max 2 attempts).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Local-First Security:&lt;/strong&gt; API binds to &lt;code&gt;127.0.0.1&lt;/code&gt; only. Extension has minimal permissions (&lt;code&gt;activeTab&lt;/code&gt;, &lt;code&gt;scripting&lt;/code&gt;). No broad host permissions, no tracking.&lt;/p&gt;




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

&lt;p&gt;&lt;strong&gt;Open-source AI isn't just a feature for Recall—it's the entire foundation.&lt;/strong&gt; A closed, cloud-based version would be a fundamentally different (and worse) product. Here's why:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Privacy: Your Reading Habits Stay Private
&lt;/h3&gt;

&lt;p&gt;When you use a cloud-based bookmark manager with AI, every article you save goes through their servers. They see what you read, when, and what interests you.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;With Recall:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Your bookmarks never leave your machine&lt;/li&gt;
&lt;li&gt;Your reading patterns aren't tracked&lt;/li&gt;
&lt;li&gt;No company profiles you based on interests&lt;/li&gt;
&lt;li&gt;Work docs, competitive research, personal content stays local&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Open-source AI running locally isn't just a feature—it's a prerequisite for privacy.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Cost: No API Fees, Ever
&lt;/h3&gt;

&lt;p&gt;Cloud AI services charge per request. At $0.002 per call, processing 50 articles/week = $5/month. Not huge, but it adds up. And prices can change.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;With Recall:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ollama is free and open-source&lt;/li&gt;
&lt;li&gt;Gemma 2B is an open-weight model&lt;/li&gt;
&lt;li&gt;Process unlimited articles forever&lt;/li&gt;
&lt;li&gt;Zero subscription, zero usage limits&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Open models mean this tool costs nothing to run, forever.&lt;/strong&gt; That's not economical—it's sustainable.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Control: Customize However You Want
&lt;/h3&gt;

&lt;p&gt;Closed AI services give you what they give you. Don't like the summary style? Tough. Want specific categories? Not an option.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;With Recall:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Edit the prompt to change summary style&lt;/li&gt;
&lt;li&gt;Swap Gemma 2B for Qwen, Llama, or any model&lt;/li&gt;
&lt;li&gt;Fine-tune on your reading preferences&lt;/li&gt;
&lt;li&gt;Add custom fields (citations, difficulty, etc.)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I experimented with Qwen 2.5 7B (better quality, slower) and Gemma 2B (faster, good enough). I chose speed for MVP, but you can choose differently. &lt;strong&gt;Your tool, your rules.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Reliability: No Downtime, No Limits
&lt;/h3&gt;

&lt;p&gt;Cloud services go down. They rate-limit during peak hours. Sometimes they shut down entirely.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;With Recall:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Works offline—no internet after setup&lt;/li&gt;
&lt;li&gt;No rate limits—process as many as you want&lt;/li&gt;
&lt;li&gt;No service shutdowns—your tool, your machine&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Open models don't disappear because a startup pivoted.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Transparency: Verify, Don't Trust
&lt;/h3&gt;

&lt;p&gt;Proprietary AI is a black box. You don't know what data it keeps, how it trains models, who has access.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;With Recall:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Every line of code is readable&lt;/li&gt;
&lt;li&gt;Audit exactly what goes to the model&lt;/li&gt;
&lt;li&gt;No hidden data collection&lt;/li&gt;
&lt;li&gt;No training on your private documents&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Open-source means you can verify trust instead of just granting it.&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;In short:&lt;/strong&gt; Privacy, cost, control, reliability, and transparency aren't nice-to-haves—they're why Recall works. A closed version would be a worse product solving a different problem.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Lazy Payoff
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Traditional bookmarking:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Click bookmark button (5 seconds)&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Never organize it&lt;/em&gt; (∞ time wasted later searching)&lt;/li&gt;
&lt;li&gt;Can't find it when you need it&lt;/li&gt;
&lt;li&gt;Google it again&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;With Recall:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Click Recall extension (5 seconds)&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Done.&lt;/em&gt; AI handles the rest (30-40s in background)&lt;/li&gt;
&lt;li&gt;Search by anything—title, content, tags, summary&lt;/li&gt;
&lt;li&gt;Find it instantly&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Real usage this week:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Saved 10 articles about React, Python, and FastAPI&lt;/li&gt;
&lt;li&gt;Zero time spent categorizing or tagging&lt;/li&gt;
&lt;li&gt;Found 3 of them later using search in under 10 seconds each&lt;/li&gt;
&lt;li&gt;Estimated time saved: ~30 minutes of manual organization I'd never have done anyway&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The time savings compound.&lt;/strong&gt; Every article is automatically searchable. Over a month, that's hours of your life back. Over a year? Days.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bonus lazy win:&lt;/strong&gt; I can skim summaries instead of re-reading full articles. If the summary reminds me what I need, I'm done. If I need more, I click through. Either way, I'm not wasting time on irrelevant content.&lt;/p&gt;




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

&lt;ul&gt;
&lt;li&gt;Best Use of Gemma: local gemma3:4b summaries and suggested actions, with a documented failure and fix.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Future Enhancements
&lt;/h2&gt;

&lt;p&gt;This is an MVP, but the local-first architecture enables exciting possibilities:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Weekly/Monthly Digests&lt;/strong&gt; - "This month you read 12 React articles, 8 Python posts. Main themes: state management, async patterns."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Semantic Search&lt;/strong&gt; - Embeddings + vector similarity for concept-based search: "show me articles about state management" surfaces Redux, Zustand, Jotai even without that exact phrase.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Related Article Discovery&lt;/strong&gt; - "You read this FastAPI article. You might also like these 3 about async Python."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fine-Tuned Models&lt;/strong&gt; - Train on your reading history for better categorization and personalized summaries.&lt;/p&gt;

&lt;p&gt;All of this runs locally because the foundation is open.&lt;/p&gt;




&lt;h2&gt;
  
  
  Try It Yourself
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Repository:&lt;/strong&gt; &lt;a href="https://github.com/kannananil/recall" rel="noopener noreferrer"&gt;https://github.com/kannananil/recall&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prerequisites:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Python 3.10+&lt;/li&gt;
&lt;li&gt;Node.js 18+&lt;/li&gt;
&lt;li&gt;Ollama + Gemma 2B&lt;/li&gt;
&lt;li&gt;Chrome/Chromium&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Setup takes ~10 minutes&lt;/strong&gt; - full instructions in README.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Building Recall reminded me why I love local-first software:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No permission needed.&lt;/strong&gt; Don't like a feature? Change it. Fork it. Make it yours.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No surprises.&lt;/strong&gt; No price increases, no features deprecated, no "we're pivoting."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No trust required.&lt;/strong&gt; Don't trust a company with your data—it never leaves your machine.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Open-source AI makes this possible.&lt;/strong&gt; Without Ollama and Gemma, I'd be building a bookmark prettifier. With them, I built a genuine AI assistant running entirely on my hardware.&lt;/p&gt;

&lt;p&gt;That's the future I want: powerful tools, running locally, under my control. Recall is one small step toward that future.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;What would you automate if you could run AI locally?&lt;/strong&gt; Drop a comment—I'd love to hear your ideas.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Built for Hacktoberfest 2026 Week 3: Slow and Steady. Because the best productivity tool is one that works while you sleep.&lt;/em&gt;&lt;/p&gt;

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