DemoGuards
Protect every demo. A Chrome MV3 extension plus multi-tenant web dashboard that automatically blurs emails, phone numbers, API keys, JWTs, SSNs, credit cards, and customer names on any web page, so sales engineers and founders can screen-share live customer environments without leaking PII.
Category: Privacy SaaS + Browser Extension
Tech Stack: TypeScript, React 18, Vite, Tailwind CSS, Chrome Extensions (MV3), Express 5, PostgreSQL, Drizzle ORM, Clerk Auth, Stripe, Resend, OpenAPI / Orval
What it is
DemoGuards is a Chrome extension and a multi-tenant SaaS dashboard that work together to keep sensitive data off the screen during a live demo. The extension scans every page (and watches SPAs for mutations) and blurs emails, phone numbers, API keys from the major vendors, JWTs, SSNs, credit cards, social handles, and customer names in place. Multiple Panic Shield triggers instantly obscure the entire page mid-demo. The dashboard manages teams and seats, lets each profile tune what gets redacted, and ships a custom-branded extension build per team. Paid plans run on Stripe with monthly and yearly tiers for solo, pro, and team, plus seat addons.
Why it exists
Every sales engineer and founder I know has had the same near-miss: a customer's real email, a live API key, a phone number, or a CRM record shows up on a screen-share that's being recorded by ten people on the other end. The standard answer is "use a fake account" or "be careful," which is to say there is no answer. I wanted a tool that defaults to safe: install it once, configure what counts as sensitive for your team, and never think about it again. Building it as a Chrome extension plus a real multi-tenant SaaS meant a sales team can hand new hires a single link and have everyone on the same redaction profile by lunch, instead of trusting muscle memory under demo pressure.
What I built
- Chrome MV3 extension with robust DOM scanning that handles SPA mutations, shadow DOM, and the awkward edge cases where a token is split across nested elements
- 12+ built-in detectors covering the major API key formats (Stripe, AWS, GitHub, GitLab, Slack, Resend, SendGrid, OpenAI, Anthropic, Google, Firecrawl) plus emails, phone numbers, JWTs, SSNs, credit cards, social handles, and customer names
- Multiple Panic Shield triggers (keyboard shortcut, in-page widget, toolbar popup, double-tap backup) with a mirrored control on the dashboard so the dashboard tab itself can also be obscured
- In-page floating widget with WCAG AA contrast, per-site pause, and profile-scoped corner position
- Cross-origin SSO sign-in widgets (Google, Microsoft, Apple, GitHub, Auth0/Okta) treated as a unit and obscured as a group, solving a class of leak that's unreachable from any extension's normal text scan
- Multi-tenant React + Vite dashboard with Clerk auth, team and seat management, per-profile redaction toggles, and one-click custom-branded extension downloads
- Express 5 API with PostgreSQL via Drizzle ORM, device-token sync for the extension, Stripe-backed billing across 8 SKUs (solo / pro / team monthly + yearly, plus seat addons), and a Resend-backed contact form with rate limiting
- 75+ jsdom regression tests pinning every detector and walker behavior that has ever burned us, so any change ships with a test
- Color-coded audit log pills by category so reviewers can scan what got redacted at a glance
- Brand system (Aperture Shield logo, blue brand pill, white live dot) driving the favicon, OG image, in-app mark, and extension toolbar icons from one source SVG
- Public terms and privacy-policy pages with test-before-live guidance and Panic Shield instructions
Back to Aaron Horne Portfolio