Privacy Policy

PinoCoach

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.

📅 Last updated: June 24, 2026 📦 Extension: PinoCoach v1.0.0 🏢 Publisher: PencilCard
🔒
Plain-English Summary: Everything you ingest into PinoCoach — PDFs, DOCX files, pasted text — is stored in a local IndexedDB database that never leaves your device. Gemini Nano (Chrome's on-device model) handles RAG chat, flashcard generation, Feynman checker, active recall, and concept map generation without any internet call. If you choose to configure a BYOK cloud key, a PII sensitivity filter runs on-device before any text is sent externally, and you are warned if sensitive content is detected.

1. Data We Collect

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.

Data stored locally on your device

  • Documents and source text — the full text extracted from PDFs, DOCX files, or paste operations you add to PinoCoach. Stored in IndexedDB in the documents and chunks stores.
  • TF-IDF chunk vectors — numeric representations of each text chunk used for retrieval. These are derived from your documents and stored alongside them. They contain no personally identifiable information.
  • Projects and subjects — the organisational structure you create (project names, subject names, colours, descriptions). Stored in IndexedDB.
  • Flashcards — front and back text generated by Nano or your cloud LLM, plus SM-2 spaced repetition metadata (next review date, interval, ease factor). Stored in IndexedDB.
  • Chat sessions and messages — your questions and the AI answers in each session. Stored in IndexedDB. Not transmitted to PencilCard.
  • Settings — active project/subject, sidebar state, LLM provider name (not API key), BYOK usage mode. Stored in chrome.storage.local.
  • BYOK API key — if you configure a cloud LLM key, it is stored encrypted in chrome.storage.local. It is never transmitted to PencilCard — only to the provider you configured when you initiate a chat.
  • Firebase authentication token — short-lived token for subscription verification. Contains no document data.

Data we do not collect

  • Document text or file contents — never reaches PencilCard servers
  • Flashcard content or quiz results
  • Chat history
  • API keys you configure
  • Browsing history or page content

2. How Data Is Stored

IndexedDB (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.local

UI 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.

⚠️
Sensitive documents: PinoCoach does not encrypt IndexedDB at rest beyond your operating system's user account protection. Avoid ingesting documents containing passwords, private keys, or regulated personal data (medical records, financial statements) on shared or unencrypted devices.

3. External Network Requests

No requests by default

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.

Firebase (auth and entitlement only)

Sign-in and Pro subscription verification. No document data is included.

BYOK cloud LLM (opt-in)

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.

4. Permissions Justification

PermissionWhy it is needed
storageStores 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.
identityObtains a Google OAuth token for Firebase sign-in (Pro subscription). Not used to access Google Docs or Drive.
chrome_url_overrides: newtabPinoCoach 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 endpointsFirebase Identity Toolkit and Firestore for sign-in and subscription tier check. No document data is included.

5. AI Features & Privacy

Gemini Nano (on-device, default for all features)

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).

TF-IDF retrieval (fully local)

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 and DOCX extraction (local)

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.

BYOK cloud LLM (opt-in)

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.

⚠️
BYOK sends your document chunks to an external provider. Only chunks relevant to your specific question are sent — not your entire document library. The provider's privacy policy governs how they handle this data.

6. Data Sharing

PencilCard does not receive or share document content, flashcards, or chat history. The only external transmissions are:

  • Firebase — UID and subscription tier for sign-in and Pro entitlement. No document data.
  • Cloud LLM provider (BYOK, optional) — relevant document chunks sent under your API key when you initiate a cloud chat. Governed by that provider's privacy policy.

7. Your Rights & Data Deletion

Delete a document

Documents panel → select document → Delete. This removes the source text, all chunks, and all associated flashcards from IndexedDB permanently.

Delete a project

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.

Delete all PinoCoach data

Chrome DevTools → Application → IndexedDB → pinocoach_db → Delete database. Or uninstall the extension.

Remove BYOK API key

Settings → LLM → Clear key. The key is removed from chrome.storage.local immediately and no further cloud calls are made.

Firebase account deletion

Email [email protected] to delete your Firebase account record.

8. Children's Privacy

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.

9. Policy Changes

We will update this page if PinoCoach's privacy practices change. The current version is always at pencilcard.com/privacy-pinocoach.

10. Contact

We aim to respond within 5 business days.