Your documents, notes, flashcards, quiz results, and chat sessions stay on your device in IndexedDB. Gemini Nano answers your questions on-device. BYOK cloud AI is opt-in and never sees raw document text without a PII filter.
PencilCard does not receive or store any document content, flashcards, or study data. All data below is stored exclusively in your browser on your own device.
documents and chunks stores.chrome.storage.local.chrome.storage.local. It is never transmitted to PencilCard — only to the provider you configured when you initiate a chat.pinocoach_db)All document content, chunks, projects, subjects, flashcards, and chat sessions are stored in a local IndexedDB database. This database is sandboxed to the PinoCoach extension and is not accessible by other extensions, websites, or PencilCard's servers. It is cleared when you clear browser data for the extension or uninstall it.
chrome.storage.localUI state (active project, sidebar open/closed), LLM preferences, and the Firebase auth token are stored here. The BYOK API key, if configured, is stored here as well. None of this is synced to PencilCard.
A fresh install of PinoCoach with Gemini Nano as the AI engine makes zero external network requests related to your study content. All RAG retrieval, chat, flashcard generation, Feynman checking, active recall, and concept mapping run on-device.
Sign-in and Pro subscription verification. No document data is included.
If you configure a BYOK API key (OpenAI, Anthropic, Gemini, DeepSeek), queries are sent to that provider's API directly from your browser under your key. A PII sensitivity filter runs on-device before each call — if sensitive content is detected, you are warned and the call is blocked unless you choose to proceed. PencilCard is not a party to these requests.
| Permission | Why it is needed |
|---|---|
| storage | Stores UI state, LLM preferences, and the Firebase auth token in chrome.storage.local. Document content goes to IndexedDB, which is an extension-sandboxed browser API that does not require a manifest permission. |
| identity | Obtains a Google OAuth token for Firebase sign-in (Pro subscription). Not used to access Google Docs or Drive. |
| chrome_url_overrides: newtab | PinoCoach replaces the new tab page with the study interface. This gives access to window.ai (Gemini Nano), which is only available on extension pages, not in service workers. |
| host: api.openai.com, api.anthropic.com, generativelanguage.googleapis.com, api.deepseek.com (optional) | Used only when you configure a BYOK key for that provider. No requests are made to these hosts unless you initiate a chat with a cloud LLM configured. |
| host: Firebase endpoints | Firebase Identity Toolkit and Firestore for sign-in and subscription tier check. No document data is included. |
RAG chat, flashcard generation, Feynman checker feedback, active recall question generation and evaluation, and concept map extraction all use Chrome's built-in Gemini Nano model. No data leaves your browser. Nano requires Chrome 127+ with the model downloaded (~1.7 GB, managed by Chrome).
When you ask a question, PinoCoach uses a TF-IDF similarity algorithm to identify the most relevant text chunks from your documents. This runs entirely in-browser using the locally stored chunk vectors — no external search or embedding API is called.
PDF text extraction uses PDF.js with a bundled WebAssembly worker (no CDN call after install). DOCX extraction uses mammoth.js (bundled). Neither library makes network requests.
If you supply a cloud API key, PinoCoach routes chat queries through that provider when Nano is unavailable or when you explicitly prefer cloud. Before sending, a PII sensitivity filter strips or flags personal names, email addresses, phone numbers, financial identifiers, and health-related terms. If the filter blocks the content, you are shown a warning and can choose to cancel or proceed with your understanding that the text will be transmitted.
PencilCard does not receive or share document content, flashcards, or chat history. The only external transmissions are:
Documents panel → select document → Delete. This removes the source text, all chunks, and all associated flashcards from IndexedDB permanently.
Sidebar → long-press or right-click project → Delete. Removes the project, all subjects, all documents, all chunks, all flashcards, and all chat sessions within it.
Chrome DevTools → Application → IndexedDB → pinocoach_db → Delete database. Or uninstall the extension.
Settings → LLM → Clear key. The key is removed from chrome.storage.local immediately and no further cloud calls are made.
Email [email protected] to delete your Firebase account record.
PinoCoach does not knowingly collect personal data from children under 13. No document content is transmitted to PencilCard's servers, so the extension does not create a personal data profile on any server for any user of any age.
We will update this page if PinoCoach's privacy practices change. The current version is always at pencilcard.com/privacy-pinocoach.
We aim to respond within 5 business days.