Skip to content
Metaspry

Docs

Cloud sync

How the extension syncs scan data to the cloud once the Pro tier ships.

The free Chrome extension is local-first. Every scan stays in your browser via chrome.storage.local. When the Pro tier ships, this page describes how the cloud-sync layer works on top of the local store.

Planned Firestore data model

Scans

Path: users/{uid}/scans/{scanId}

{
  "url": "https://example.com",
  "title": "Example - Home",
  "hostname": "example.com",
  "score": 87,
  "tags": { "og:title": "Example", "og:description": "..." },
  "audit": { /* AuditResult object */ },
  "scannedAt": "2026-05-20T12:00:00Z"
}

Shares

Path: shares/{shareId}

{
  "uid": "abc123",
  "scanId": "xyz789",
  "snapshot": { /* ScanSnapshot - PII stripped */ },
  "createdAt": "2026-05-20T12:00:00Z"
}

Planned security rules

  • Users can only read/write their own scans: users/{uid}/scans/{scanId}.
  • Shares are publicly readable, but only the owning user can create or delete them.
  • The uid field on share docs is validated on create to match the authenticated user.

Planned PII stripping

When creating a share, fields whose key matches email, phone, or address are removed from the snapshot. This runs on the client before writing to Firestore.

Planned extension integration

Auth via Firebase Auth, same project as the website. The extension reads users/{uid}.plan on auth-state change:

  • pro or trial: scans auto-sync.
  • free: local-only. Extension shows an “Upgrade to sync” prompt (subject to engagement-threshold rules).

Until Pro launches, none of this is active. Everything runs locally.