<?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: Sidharth</title>
    <description>The latest articles on DEV Community by Sidharth (@sidharth_28c750a8437aa781).</description>
    <link>https://dev.to/sidharth_28c750a8437aa781</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%2F4154885%2F12970f1d-679d-4e9b-b4e4-451986204ad0.jpg</url>
      <title>DEV Community: Sidharth</title>
      <link>https://dev.to/sidharth_28c750a8437aa781</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sidharth_28c750a8437aa781"/>
    <language>en</language>
    <item>
      <title>book.ai: A spoiler-free, fully local AI reading companion built for a friend</title>
      <dc:creator>Sidharth</dc:creator>
      <pubDate>Sun, 04 Oct 2026 19:34:18 +0000</pubDate>
      <link>https://dev.to/sidharth_28c750a8437aa781/bookai-a-spoiler-free-fully-local-ai-reading-companion-built-for-a-friend-356a</link>
      <guid>https://dev.to/sidharth_28c750a8437aa781/bookai-a-spoiler-free-fully-local-ai-reading-companion-built-for-a-friend-356a</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;I built &lt;strong&gt;book.ai&lt;/strong&gt;, a reading companion that runs entirely on your own computer and never spoils the book.&lt;/p&gt;

&lt;p&gt;It's for a friend of mine who loves getting lost in fantasy and sci-fi like &lt;em&gt;The Hobbit&lt;/em&gt;. Whenever she hit a confusing bit of lore or a character she'd forgotten, searching online or asking a chatbot meant risking a spoiler for a later chapter. On top of that, she didn't love the idea of her reading habits sitting on someone else's servers.&lt;/p&gt;

&lt;p&gt;So book.ai does two things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Stays inside your chapter.&lt;/strong&gt; You pick where you are in the book, and the AI only discusses what has happened up to that point. Ask about the ending and it politely declines.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keeps everything local.&lt;/strong&gt; Your questions and reading history never leave your machine.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It also has a quiet, paper-toned reading UI, cached book overviews, and optional audio narration for when she'd rather listen than read.&lt;/p&gt;

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

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/sBKbTY0pKis" width="710" height="399"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;A 5-minute walkthrough of local inference, chapter-scoped answers, and voice narration.&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/sidharth-chauhan" rel="noopener noreferrer"&gt;
        sidharth-chauhan
      &lt;/a&gt; / &lt;a href="https://github.com/sidharth-chauhan/book.ai" rel="noopener noreferrer"&gt;
        book.ai
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A self-hosted AI book companion to explore books and read chapters interactively. Auto-generates chapter breakdowns, author details, and structured content into clickable UI slides. Fully containerized with Docker, featuring React Native Web, Node.js, TypeScript, MongoDB caching, and local Ollama (Gemma) with zero external API keys needed.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div&gt;
&lt;a rel="noopener noreferrer" href="https://github.com/sidharth-chauhan/book.ai/frontend/assets/logo.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%2Fsidharth-chauhan%2Fbook.ai%2FHEAD%2Ffrontend%2Fassets%2Flogo.svg" alt="book.ai logo" width="140" height="140"&gt;&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;book.ai&lt;/h1&gt;
&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Read deeper. Spoil nothing. Share nothing.&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;A privacy-first, offline-capable AI reading companion that runs on your machine, not in someone else's cloud.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/sidharth-chauhan/book.ai/LICENSE" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/9218332452902d9e542a100d0af126fd3174a116456614d2cf093546a13783db/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d677265656e2e7376673f7374796c653d666f722d7468652d6261646765" alt="License: MIT"&gt;&lt;/a&gt;
&lt;a href="https://github.com/sidharth-chauhan/book.ai/CONTRIBUTING.md" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/875fdcafb33a30d3badb178f9a5e7177dd3ebab8dbedeaa97028e748172e7375/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5052732d77656c636f6d652d627269676874677265656e2e7376673f7374796c653d666f722d7468652d6261646765" alt="PRs Welcome"&gt;&lt;/a&gt;
&lt;a href="https://hacktoberfest.com" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/63315c9b498e4fa6d3c509d7de28dc231019e540b6263c56e2b11ea9431559fd/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4861636b746f626572666573742d323032362d626c756576696f6c65742e7376673f7374796c653d666f722d7468652d6261646765" alt="Hacktoberfest 2026"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/02b0496725dd0faada59a30761e60e4bc2401c2e9053067a88599bdb43da7efe/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f52656163745f4e61746976652d4578706f5f5765622d3631444146423f6c6f676f3d7265616374266c6f676f436f6c6f723d626c61636b"&gt;&lt;img src="https://camo.githubusercontent.com/02b0496725dd0faada59a30761e60e4bc2401c2e9053067a88599bdb43da7efe/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f52656163745f4e61746976652d4578706f5f5765622d3631444146423f6c6f676f3d7265616374266c6f676f436f6c6f723d626c61636b" alt="React Native"&gt;&lt;/a&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/263ac0f4c45dc084ff7cbfbeb3986dd8c9acba41a993e06f1a6ea6495030669f/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4e6f64652e6a732d457870726573732d3333393933333f6c6f676f3d6e6f64652e6a73266c6f676f436f6c6f723d7768697465"&gt;&lt;img src="https://camo.githubusercontent.com/263ac0f4c45dc084ff7cbfbeb3986dd8c9acba41a993e06f1a6ea6495030669f/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4e6f64652e6a732d457870726573732d3333393933333f6c6f676f3d6e6f64652e6a73266c6f676f436f6c6f723d7768697465" alt="Node.js"&gt;&lt;/a&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/2c6ae5406823e79ee3a6ec1835c371b139f19c65633756bbf5426d82ac9a2ea9/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4d6f6e676f44422d4c6f63616c2d3437413234383f6c6f676f3d6d6f6e676f6462266c6f676f436f6c6f723d7768697465"&gt;&lt;img src="https://camo.githubusercontent.com/2c6ae5406823e79ee3a6ec1835c371b139f19c65633756bbf5426d82ac9a2ea9/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4d6f6e676f44422d4c6f63616c2d3437413234383f6c6f676f3d6d6f6e676f6462266c6f676f436f6c6f723d7768697465" alt="MongoDB"&gt;&lt;/a&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/893bd2850ec5d0c47846d139083c5ebc6520a4b326380c22ef11d7c870bff873/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4f6c6c616d612d47656d6d615f325f32422d3030303030303f6c6f676f3d6f6c6c616d61266c6f676f436f6c6f723d7768697465"&gt;&lt;img src="https://camo.githubusercontent.com/893bd2850ec5d0c47846d139083c5ebc6520a4b326380c22ef11d7c870bff873/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4f6c6c616d612d47656d6d615f325f32422d3030303030303f6c6f676f3d6f6c6c616d61266c6f676f436f6c6f723d7768697465" alt="Ollama"&gt;&lt;/a&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/22be7b8b4dcd8179af2651a234ef7bcbcded006f266309236d938c6789dd0cec/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f446f636b65722d52656164792d3234393645443f6c6f676f3d646f636b6572266c6f676f436f6c6f723d7768697465"&gt;&lt;img src="https://camo.githubusercontent.com/22be7b8b4dcd8179af2651a234ef7bcbcded006f266309236d938c6789dd0cec/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f446f636b65722d52656164792d3234393645443f6c6f676f3d646f636b6572266c6f676f436f6c6f723d7768697465" alt="Docker"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;br&gt;
&lt;a href="https://youtu.be/sBKbTY0pKis" rel="nofollow noopener noreferrer"&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%2Fsidharth-chauhan%2Fbook.ai%2FHEAD%2Ffrontend%2Fassets%2Fdemo-thumbnail.png" alt="Watch the book.ai demo walkthrough on YouTube" width="240"&gt;
&lt;/a&gt;
&lt;br&gt;
&lt;a href="https://youtu.be/sBKbTY0pKis" rel="nofollow noopener noreferrer"&gt;&lt;b&gt;▶ Watch the 5-min demo walkthrough&lt;/b&gt;&lt;/a&gt;
&lt;/div&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;💌 Why book.ai Exists&lt;/h2&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"I just want to ask a question about the chapter I'm on, without the app telling me how the book ends."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Built for a friend who loves reading, &lt;code&gt;book.ai&lt;/code&gt; solves three problems with general-purpose chatbots:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;🔒 &lt;strong&gt;Privacy:&lt;/strong&gt; your questions reveal what you think and feel. They stay on your machine.&lt;/li&gt;
&lt;li&gt;🙈 &lt;strong&gt;Spoilers:&lt;/strong&gt; ask about chapter three and get chapter three, not the ending.&lt;/li&gt;
&lt;li&gt;📴 &lt;strong&gt;Access:&lt;/strong&gt; no subscription, and no connection required.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;✨ Key Features&lt;/h2&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;🧠 &lt;strong&gt;Local-first AI:&lt;/strong&gt; Google's &lt;code&gt;gemma2:2b&lt;/code&gt; runs through &lt;a href="https://ollama.com" rel="nofollow noopener noreferrer"&gt;Ollama&lt;/a&gt; on your hardware.&lt;/li&gt;
&lt;li&gt;📖 &lt;strong&gt;Book exploration:&lt;/strong&gt; enter a title for the author, summary, and chapter breakdown.&lt;/li&gt;
&lt;li&gt;🛡️ &lt;strong&gt;Spoiler-free Read Mode:&lt;/strong&gt; chat about a chapter; the AI discusses only what happened up to it.&lt;/li&gt;
&lt;li&gt;🎧 &lt;strong&gt;Audio&lt;/strong&gt;…&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/sidharth-chauhan/book.ai" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;The repo has everything: the React Native web frontend, the Express backend, and a &lt;code&gt;docker-compose.yml&lt;/code&gt; that starts the database and model server in one command.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Model:&lt;/strong&gt; Google's open-weight &lt;strong&gt;Gemma 2 (2B)&lt;/strong&gt;, served locally through &lt;strong&gt;Ollama&lt;/strong&gt; in a Docker container. It's small enough to give usable answers on an ordinary laptop.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend:&lt;/strong&gt; Node.js and Express. It builds the prompts, enforces the chapter boundary in the instructions sent to the model, and talks to Ollama.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Storage:&lt;/strong&gt; A local &lt;strong&gt;MongoDB&lt;/strong&gt; container caches book overviews so repeat visits load instantly. Docker volumes (&lt;code&gt;mongo_data&lt;/code&gt; and &lt;code&gt;ollama_data&lt;/code&gt;) keep the cache and model weights across restarts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Frontend:&lt;/strong&gt; &lt;strong&gt;React Native with Expo Web&lt;/strong&gt;, styled to feel like a page rather than a dashboard.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Audio:&lt;/strong&gt; Optional narration through the &lt;strong&gt;ElevenLabs&lt;/strong&gt; API. This is the one feature that needs internet, since the text of a single answer is sent to be converted to speech. Skip it and the app works fully offline.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;A closed API would have broken the main promise of this project.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Privacy.&lt;/strong&gt; What someone asks about a book says a lot about them. With open weights, that data never has to leave their laptop.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No meter running.&lt;/strong&gt; Because the model runs locally, my friend can ask as many questions as she wants without paying per token or subscribing to anything.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It works offline.&lt;/strong&gt; She reads on trains and flights, and a local model keeps working when the connection doesn't.&lt;/li&gt;
&lt;/ol&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Google Gemma Challenge:&lt;/strong&gt; Gemma 2 running locally is the core of the app.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ElevenLabs:&lt;/strong&gt; Powers the optional voice narration.&lt;/li&gt;
&lt;/ul&gt;

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