PrivacyShield
A zero-network Chrome extension that blurs sensitive on-screen data before you share your screen.
PrivacyShield is a Chrome MV3 extension that detects and blurs sensitive content (emails, card numbers, API keys, SSNs, crypto addresses) on any webpage, either on-demand or automatically when a screen share starts. It's built for remote workers, support/sales teams doing live demos, streamers, and anyone who needs to share a screen without leaking credentials or PII. All processing runs locally in the browser: no backend, no network calls.
Why it needed to exist
Screen sharing and screenshots routinely expose emails, tokens, card numbers, and other sensitive data that's simply visible on screen. Most privacy tools protect data at rest or in transit, not data that's rendered on the page during a live share.
Inside the product
Auto-detect & blur
A layered engine (regex + DOM structure + context keywords) scans page text across 6 categories (contact, financial, government ID, credentials, network, crypto) and blurs matches live.
Screen-share auto-protection
Hooks getDisplayMedia in the page's main world and automatically applies a blur profile the instant a share starts, restoring on end.
Meeting profiles
Six built-in profiles (client demo, interview, all-hands…) bundling blur rules, tab disguise, notification suppression, and bookmark hiding, plus custom/imported profiles.
Panic Mode & Blur All
Keyboard shortcuts instantly blur every tab or the active page, with reference-counted ownership so panic, manual toggle, and profiles don't clobber each other.
Pick & Blur
Click any element to persistently blur it per-site, stored as a CSS selector, with undo history and live removal from the Options page.
Demo Mode
Replaces detected sensitive text with realistic, locale-aware fake data (US/UK/IN/EU) in place, using uniquely-marked tokens so restoration is unambiguous.
Clipboard Guard
Synchronously scans copied text in the copy event and either redacts the clipboard or auto-clears it after a timeout.
Scheduled privacy & team policy
Time-based profile activation via chrome.alarms, plus JSON policy import for org-wide config, with no remote server.
Compliance reporting & audit log
Generates a local 7/30/90-day report of blur/panic/screen-share events with zero raw content, exportable as JSON.
End to end
Manifest V3 service-worker state
MV3 service workers are unloaded and restarted by Chrome at any time, which silently reset in-memory module state (e.g. 'is Panic currently on?') and caused features like Panic Mode to invert, or screen-share protection to leave tabs permanently blurred after a worker restart. The fix moved that ephemeral cross-restart state into chrome.storage.session (survives worker sleep, clears on browser close) instead of module globals, and made every disable path DOM-authoritative, disableBlurAll() always queries and clears tracked elements regardless of what the in-memory flag says, so a desynced flag can never leave a page stuck blurred. A related concurrency issue, async profile apply/clear racing so a slow load lands after a newer clear, was fixed with a monotonic generation counter that invalidates superseded async work.
Where it stands
Live on the Chrome Web Store, version 1.1.0. 174 unit tests passing across 23 test files. A prior submission draft was rejected for keyword-stuffing and an unused scripting permission, both since fixed.
The full stack
- TypeScript (strict)
- React 18
- Vite 5
- @crxjs/vite-plugin
- Tailwind CSS
- Chrome Extension Manifest V3
- Web Crypto API (PBKDF2)
- MutationObserver
- Vitest + Testing Library
- Playwright
- ESLint
Continue along the river
Want something built like this?
This is one of several products shipped under Astal Creates. Tell me what you're building and I'll write back.