Privacy Notice — Noah's Ark

Version: 1.0
Effective date: 2026-05-22
Last updated: 2026-05-22


1. Identity and Contact

Data controller:
Hộ Kinh Doanh Võ Thị Huyền Vân – Cố Vấn Độc Lập
(Vietnamese registered household business / hộ kinh doanh, independent-consultant trade)
Principal: Võ Thị Huyền Vân
Business registration number: 046171000354
Registered address: 19 Trương Công Định, Phường Tân Bình, Thành Phố Hồ Chí Minh, Việt Nam

The Household Business is referred to as "we" in this notice. Developer operating under the Household Business: Lê Vũ Minh Phúc.

Contact for privacy matters:
Email: levuminhphuc2007@gmail.com
Phone: 0918425016

Business registration is made under applicable Vietnamese law governing household businesses (hộ kinh doanh). Disclosure of the registration number and registered address in this notice satisfies the commercial-disclosure obligation applicable to hộ kinh doanh.


2. Scope

This notice covers:

This notice does not cover third-party websites that Noah's Ark operates on. Those sites have their own privacy policies.

For EU users, see also data-protection.md (the GDPR-specific addendum).
For software license terms, see end-user-license-agreement.md.
For the service relationship contract, see terms-of-service.md.


3. What We Collect (and What We Do Not)

3.1 Client-side storage (local to your browser)

The extension stores the following in chrome.storage.local or chrome.storage.session. This data lives in your browser and is not transmitted unless explicitly noted.

Key Storage type Purpose
creator_uuid local Pre-authentication identity anchor that ties anonymous posts to your account via claimLegacyPosts. Source: node.js/discuss.js:825.
FAB position ({side, yPercent}) local Your preference for the floating-action-button position. Source: node.js/fab.js:305.
lastContext (popup) local The entity most recently viewed in the popup, for display continuity. Source: node.js/popup.js:356.
entityPool, lastContext (background) local The aggregated set of financial entities the NLP engine has detected for the active tab. Source: node.js/background.js:1086.
discovery_queue local Entities the NLP engine flagged as candidates for the entity dictionary; sent in batches to the proposeEntity Cloud Function. Source: node.js/background.js:1173.
lastSync local Timestamp of the last sync with backend reference data. Source: node.js/background.js:1201.
lock_${tabId} session Per-tab lock so a high-confidence URL match overrides NLP noise. Source: node.js/background.js:1137.
Copilot working state (STORAGE_NAMESPACE) local Cached AI evidence and research bundles for re-render after the popup closes. Source: node.js/copilot.js:138,929.

3.2 Authentication data

When you sign in with Google:

All three Google fields are optional. You may use Noah's Ark anonymously using a creator_uuid until you choose to sign in.

3.3 Server-side Firestore collections (user-initiated writes)

Your actions in the extension cause writes to these Firestore collections:

Collection What it stores Who initiates
discussions/{slug}/posts/{postId} Discussion post text, timestamps, soft-delete flag, derived gravity score. You (explicit post action)
discussions/{slug}/posts/{postId}/votes/{uid} Your vote (+1 or −1) on a post. You (explicit vote action)
discussions/{slug}/presence/{uid} Presence heartbeat; auto-expires via 5-minute TTL. You (implicit on room entry)
proposed_tickers/{suggestionId} NLP-detected entity candidate: suggested ticker, source hostname, NLP confidence, your UID. Automatic on NLP discovery
users/{uid} Private profile: email, displayName, photoURL, username, tier, settings. You
users/{uid}/copilotRateLimit/global Rolling token counter for AI evidence rate limiting. System (incremented on copilot use)
users/{uid}/copilotMeter/{dayKey} Per-day usage meter (Pro tier). System
users/{uid}/copilotDeepenMeter/{monthKey} Per-month deepen quota. System
user_metadata/{uid} Server-side rate-limit and hygiene metadata. System
user_quotas/{uid} Per-user quota state. System
usernames/{username} Unique username reservation document. You (on claim)

3.4 Server-only collections (not written or read by the extension client)

Collection Purpose Retention
evidence_cache/{cacheKey} Sub-cache for the copilot pipeline; keyed by SHA-256 of concatenated query strings. 4 hours (temporally sensitive queries) / 24 hours (stable queries) cache-validity window; hard-purged 7 days after creation by a scheduled worker.
ai_telemetry/{requestId} Per-request telemetry: timing, cost, model used, token counts. No user PII fields. Retained for up to 90 days, then purged by a scheduled worker.
rag_knowledge/{docId} Server-side knowledge base for retrieval-augmented copilot responses; 768-dimension vector index. Indefinite (curated reference corpus).
tickers, aliases, site_rules Read-only reference data managed by the Household Business. Indefinite.

3.5 What we do not collect


4. Purposes of Collection

Data category Primary purpose
creator_uuid Pre-authentication identity continuity; migrates anonymous posts to verified account on sign-in.
FAB position Persisting your UI preference across browser restarts.
entityPool, lastContext, lastSync, lock_${tabId} Powering the NLP entity sensor: detecting and caching the financial entity on the current page.
discovery_queue / proposed_tickers Expanding the entity dictionary when the NLP engine detects a candidate ticker not already in the reference data.
Copilot working state Re-rendering AI evidence and research bundles after popup close without a new server call.
Firebase ID tokens + Google email / display name / photo URL Authentication and account identity for the discussion platform.
Username User-chosen display identity; uniqueness enforced per platform.
Discussion posts and votes Core product function: collaborative discussion and post ranking.
Presence heartbeat Live participant count in discussion rooms.
copilotRateLimit, copilotMeter, copilotDeepenMeter, user_quotas Rate limiting and quota enforcement for the AI evidence pipeline.
user_metadata Server-side anti-abuse and hygiene.
evidence_cache Reducing duplicate AI provider calls; lowering latency for repeated queries.
ai_telemetry Internal measurement of AI pipeline cost, latency, and quality. No user PII.

5. Legal Bases for Processing

5.1 Vietnam PDPL — Decree 13/2023/NĐ-CP

Vietnam's Personal Data Protection Law (effective 2023-07-01) is our primary governing regime.

Processing activity Basis under Decree 13/2023/NĐ-CP
Operating the discussion platform; storing posts, votes, presence Performance of service — processing necessary for contract performance under Decree 13/2023/NĐ-CP
Optional Google sign-in; collecting email, displayName, photo Consent — freely given, specific, informed, unambiguous, under Decree 13/2023/NĐ-CP
AI evidence feature (editorAction pipeline) Consent — user explicitly triggers the feature, under Decree 13/2023/NĐ-CP
Rate limiting, anti-abuse (user_metadata, user_quotas, copilotRateLimit) Legitimate interests of the Household Business — protecting the service from abuse, under Decree 13/2023/NĐ-CP
Entity discovery (discovery_queue, proposed_tickers) Legitimate interests — improving dictionary quality, proportionate to service purpose, under Decree 13/2023/NĐ-CP

Data subjects have the right to withdraw consent at any time. Withdrawal does not affect lawfulness of processing based on consent before the withdrawal.

5.2 GDPR — for EU/EEA users

GDPR (Regulation (EU) 2016/679) applies to users in the EU/EEA by virtue of the extension being made available to persons in the EU (Art. 3(2) territorial scope).

Processing activity Lawful basis (Art. 6(1))
Operating the discussion platform; storing posts, votes, presence Art. 6(1)(b) — processing necessary for the performance of a service contract
Optional Google sign-in; collecting email, displayName, photo URL Art. 6(1)(a) — consent
AI evidence feature Art. 6(1)(a) — consent (user explicitly triggers)
Rate limiting, anti-abuse Art. 6(1)(f) — legitimate interests (protecting the service from abuse; not overridden by data subjects' interests given the minimal data involved)
Entity discovery (proposed_tickers) Art. 6(1)(f) — legitimate interests (improving entity dictionary; proportionate)
Server-only telemetry (ai_telemetry) Art. 6(1)(f) — legitimate interests (internal quality measurement; no PII fields)

5.3 CCPA — for California residents

CCPA (California Civil Code §§1798.100 et seq., as amended by CPRA) is a disclosure-only regime for our purposes. We are a "business" as defined in §1798.140.

We do not "sell" personal information as defined in §1798.140(ad). We do not share personal information for cross-context behavioral advertising. We do not use personal data to determine creditworthiness or for lending. The three CWS certification checkboxes confirmed in docs/cws/privacy-disclosure.md apply here.

This notice satisfies the right-to-know notice obligation of §1798.115.


6. Third-Party Processors

6.1 Firebase / Google Cloud

Role: Infrastructure provider — Auth, Firestore, Cloud Functions, Storage.
Relationship: Controller (Household Business) – Processor (Google Cloud EMEA Limited and affiliates) under the Google Cloud Data Processing Addendum, which incorporates Standard Contractual Clauses for international transfers.
What is sent: All Firestore data described in §3.3–§3.4; Firebase Auth tokens; Cloud Functions invocations.
What is NOT sent: Anything not described in §3.

6.2 Perplexity AI

Role: Research data provider in the AI evidence pipeline.
What is sent: Research queries derived from the user-highlighted claim text and discussion context intent. Source: node.js/functions/index.js:1714.
What is NOT sent: The user's Firebase UID, email, display name, or any Firestore document content unrelated to the specific copilot request.
Caching: Responses cached server-side in evidence_cache (4h / 24h TTL) to reduce duplicate calls.

6.3 xAI (Grok)

Role: Research data provider in the AI evidence pipeline.
What is sent: Research queries derived from claim text. Endpoint: https://api.x.ai/v1 (OpenAI-compatible). Source: node.js/functions/index.js:1796.
What is NOT sent: Firebase UID, email, display name, or unrelated Firestore content.

6.4 Google Gemini

Role: Embeddings generation and research in the AI evidence pipeline.
What is sent: Research queries and embedding inputs derived from highlighted claim text. Endpoint: https://generativelanguage.googleapis.com via @google/generative-ai SDK.
What is NOT sent: Firebase UID, email, display name, or unrelated Firestore content.

6.5 Anthropic Claude

Role: Synthesis (Critic and Synthesizer roles) in the AI evidence pipeline.
What is sent: Synthesis prompt with retrieved evidence and the user's question intent. Endpoint: https://api.anthropic.com via @anthropic-ai/sdk.
What is NOT sent: Firebase UID, email, display name, or unrelated Firestore content.

6.6 What is never sent to any AI provider

The user's Firebase UID, email address, and display name are never sent to Perplexity, xAI, Google Gemini, or Anthropic Claude. All AI provider calls are made server-side by the editorAction Cloud Function. The extension client never directly calls any of these providers.


7. International Data Transfers

US-based providers: Perplexity AI, xAI, and Anthropic Claude are US-based. Transfers of EU-resident personal data (in the form of claim text and intent) to these providers occur under Standard Contractual Clauses (SCCs) adopted by the European Commission pursuant to GDPR Art. 46(2)(c), or equivalent appropriate safeguards. We rely on each provider's applicable data processing terms.

Google / Firebase: Operates globally. Google Cloud's Data Processing Addendum includes SCCs covering transfers from the EEA to Google infrastructure outside the EEA (GDPR Art. 46).

Vietnam PDPL: Cross-border transfers of personal data are conducted in accordance with the obligations set out in Decree 13/2023/NĐ-CP.


8. Retention

Data category Retention period
chrome.storage.local entries Until extension uninstall or you clear extension storage.
chrome.storage.session entries Until browser session ends.
Firestore user data (users/{uid}, usernames/{username}, user_metadata/{uid}, user_quotas/{uid}, copilotRateLimit, copilotMeter, copilotDeepenMeter) Until account deletion. We delete all user-keyed documents when an account is deleted.
Discussion posts (discussions/{slug}/posts/{postId}) On soft-delete: post text is nulled immediately; only the deleted:true flag and deletedAt timestamp remain. The tombstone record is hard-deleted 30 days after soft-delete by the purgeTombstonedPosts scheduled worker. Source: node.js/functions/purgeTombstonedPosts.js.
Votes Until account deletion.
Presence heartbeat Auto-expires via 5-minute TTL in Firestore.
proposed_tickers entries Retained indefinitely as part of the entity dictionary. Your UID is included in the entry; you may request deletion per §9.
evidence_cache 4 hours (temporally sensitive queries) / 24 hours (stable queries) cache-validity window; hard-purged 7 days after creation by a scheduled worker.
ai_telemetry Retained for up to 90 days, then purged by a scheduled worker. Used for internal product-improvement purposes.
rag_knowledge, tickers, aliases, site_rules Indefinite (curated reference data maintained by the Household Business).

9. Your Rights

9.1 Rights under Vietnam PDPL — Decree 13/2023/NĐ-CP

Response deadline under Vietnam PDPL: within the period required by applicable Vietnamese law.

See also terms-of-service.md for the dispute-resolution clause applicable under Vietnamese law.

9.2 Rights under GDPR — for EU/EEA users

Response deadline under GDPR: 1 month from receipt of request, extendable by 2 further months for complex requests (Art. 12(3)).

EU users may also lodge complaints with their national data-protection authority and bring proceedings in their EU member-state courts (GDPR Art. 79).

For full detail on controller/processor relationships, transfer mechanisms, and EU data-subject rights procedures, see data-protection.md.

9.3 Rights under CCPA — for California residents

Response deadline under CCPA: 45 days from receipt of a verifiable consumer request, extendable by 45 days with notice (§1798.130).

California users retain the right to file complaints with the California Privacy Protection Agency (CPPA) per CCPA §1798.155 (post-CPRA, eff. 2023-01-01; Stats. 2020 Ch. 30 §16, as amended) and exercise private-right-of-action remedies where applicable per §1798.150.


10. How to Exercise Your Rights

Send a request to: levuminhphuc2007@gmail.com

Identity verification: To process a deletion or access request, we must verify that the request comes from the account owner. Provide your Firebase UID in the request. Your Firebase UID is available in the extension by opening the side panel while signed in — your UID appears in the browser developer console log (look for "User authenticated: [uid]" in the service worker console).

Response timelines:


11. Children's Privacy

Noah's Ark is not directed at children. The minimum age to use the service is 13 years (COPPA-aligned). In the EU, the minimum age for a child to provide their own consent for information society services is 16 years (GDPR Art. 8); users under 16 in the EU require parental or guardian consent.

We do not knowingly collect personal data from users under 13. If a parent or guardian believes their child under 13 has provided personal data, contact us at levuminhphuc2007@gmail.com and we will delete the data.


12. Security Measures


13. Data Breach Notification

In the event of a personal data breach:


14. Changes to This Policy

This is version 1.0 of the privacy notice, effective 2026-05-22. We will post material changes in the extension popup before the updated policy takes effect. The version number and effective date will be updated at the top of this document. For changes that materially affect how we process your personal data, we will notify you via the extension popup at your next session.


15. Contact for Privacy Matters

Hộ Kinh Doanh Võ Thị Huyền Vân – Cố Vấn Độc Lập
19 Trương Công Định, Phường Tân Bình, Thành Phố Hồ Chí Minh, Việt Nam
Email: levuminhphuc2007@gmail.com
Phone: 0918425016


16. Sources Cited

Citation Source reference
GDPR (Regulation (EU) 2016/679) — Art. 6(1)(a)(b)(f) https://gdpr-info.eu/art-6-gdpr/ (mirrors consolidated EUR-Lex text)
GDPR Art. 8 — child's consent https://gdpr-info.eu/art-8-gdpr/
GDPR Art. 12(3) — response timeframe https://gdpr-info.eu/art-12-gdpr/
GDPR Art. 15 — right of access https://gdpr-info.eu/art-15-gdpr/
GDPR Art. 17 — erasure https://gdpr-info.eu/art-17-gdpr/
GDPR Art. 20 — portability https://gdpr-info.eu/art-20-gdpr/
GDPR Art. 21 — objection https://gdpr-info.eu/art-21-gdpr/
GDPR Art. 22 — automated decisions https://gdpr-info.eu/art-22-gdpr/
GDPR Art. 33 — breach notification to authority https://gdpr-info.eu/art-33-gdpr/
GDPR Art. 34 — breach notification to data subjects https://gdpr-info.eu/art-34-gdpr/
GDPR Art. 46 — transfers subject to appropriate safeguards (SCCs) https://gdpr-info.eu/art-46-gdpr/
GDPR Art. 79 — judicial remedy https://gdpr-info.eu/art-79-gdpr/
CCPA §1798.100 — right to know https://leginfo.legislature.ca.gov/faces/codes_displaySection.xhtml?lawCode=CIV&sectionNum=1798.100.
CCPA §1798.105 — right to delete https://leginfo.legislature.ca.gov/faces/codes_displaySection.xhtml?lawCode=CIV&sectionNum=1798.105.
CCPA §1798.115 — right to know about third-party disclosures https://leginfo.legislature.ca.gov/faces/codes_displaySection.xhtml?lawCode=CIV&sectionNum=1798.115.
CCPA §1798.120 — right to opt out of sale https://leginfo.legislature.ca.gov/faces/codes_displaySection.xhtml?lawCode=CIV&sectionNum=1798.120.
CCPA §1798.121 — right to limit sensitive PI https://leginfo.legislature.ca.gov/faces/codes_displaySection.xhtml?lawCode=CIV&sectionNum=1798.121.
CCPA §1798.125 — non-discrimination https://leginfo.legislature.ca.gov/faces/codes_displaySection.xhtml?lawCode=CIV&sectionNum=1798.125.
CCPA §1798.130 — response time (45 days) https://leginfo.legislature.ca.gov/faces/codes_displaySection.xhtml?lawCode=CIV&sectionNum=1798.130.
CCPA §1798.140(ad) — definition of "sell" https://leginfo.legislature.ca.gov/faces/codes_displaySection.xhtml?lawCode=CIV&sectionNum=1798.140.
CCPA §1798.150 — private right of action https://leginfo.legislature.ca.gov/faces/codes_displaySection.xhtml?lawCode=CIV&sectionNum=1798.150.
CCPA §1798.155 — enforcement (California Privacy Protection Agency) https://leginfo.legislature.ca.gov/faces/codes_displaySection.xhtml?lawCode=CIV&sectionNum=1798.155.