MyPantry ("we", "us", or "our") is the operator of the
MyPantry browser extension ("MyPantry Clip") and the cloud synchronisation API hosted at
mypantry.dev. For questions about this policy, contact us at
support@mypantry.dev.
This policy applies to:
https://mypantry.dev (the "Service").It does not apply to third-party services you may connect (e.g., Google, Anthropic, or OpenAI) — their own privacy policies govern your use of those services.
| Data element | Where it lives | Shared with us? |
|---|---|---|
| Saved recipes (title, ingredients, steps, image URL) | Browser IndexedDB Local |
Only if you enable Cloud Sync |
| Recipe vector embeddings (mathematical arrays) | Browser IndexedDB Local |
Only if you enable Cloud Sync |
| Your LLM API key (BYOK mode) | AES-GCM encrypted in chrome.storage.local Local |
Never |
| Session password / encryption salt & IV | chrome.storage.session Local |
Never |
| Supabase user ID + auth token (Cloud mode) | Supabase Auth + chrome.storage.local Cloud |
Yes — required for authentication |
| Raw recipe page HTML (during extraction) | Sent transiently to our API, pruned before LLM routing Cloud | Yes — discarded after processing |
| Request timestamps & endpoint hit counts | Upstash Redis (anonymous per user-ID) Cloud | Yes — used solely for rate-limiting |
| Server-side request logs (latency, endpoint, user ID hash) | Fly.io log stream, rotated regularly Cloud | Yes — used for debugging only |
| Browsing history / page content outside recipe extraction | N/A | Never collected |
BYOK mode lets you use MyPantry without a cloud account. Your LLM API key is encrypted locally in your browser using AES-256-GCM via the Web Crypto API, keyed with a password you create via PBKDF2. The raw key material is held only in ephemeral memory for up to 1 hour after decryption to avoid repeated password prompts, and is cleared upon browser restart or logout.
In BYOK mode, your API key is never transmitted to our servers. All LLM calls are routed through your own key against the provider's API directly from our server acting as a stateless proxy — we never log or store the key value.
Recipe extraction and ingredient substitution use the Google Gemini API. The text payload we send is the pruned page content or your stored recipe JSON — no personally identifiable information is deliberately included. Please review Google's Privacy Policy for how Gemini processes data.
Semantic search embeddings are generated entirely on-device using
Transformers.js (Xenova/all-MiniLM-L6-v2, quantized WASM build). No text is sent
to any external service at the vectorisation step.
MyPantry Clip requests the following Chrome permissions and uses them strictly as described:
IndexedDB) between sessions.Transformers.js WASM pipeline without blocking the UI thread.We do not request <all_urls>, broad host permissions, or access to browser history.
chrome-extension://<your-extension-id> and localhost for local development.MyPantry is not directed at children under 13 (or the applicable age of digital consent in your jurisdiction). We do not knowingly collect personal information from children. If you believe a child has provided us with personal data, contact us at support@mypantry.dev and we will delete it promptly.
Depending on your jurisdiction, you may have the following rights regarding your personal data:
To exercise any of these rights, email support@mypantry.dev.
We may update this policy to reflect changes in the service or legal requirements. Material
changes will be announced on our website at mypantry.dev. The "Effective date"
at the top of this page is always updated when changes are published.