From 57cc5840b9ceb6c78c4b6559f31fa6078e8e04f3 Mon Sep 17 00:00:00 2001
From: chris
Date: Fri, 8 May 2026 10:23:50 -0400
Subject: [PATCH] feat: obfuscate email with click-to-reveal across all pages
Replace all bare info@ occurrences with a click-to-reveal pattern:
- New EmailLink React component (base64 decode on click, never in DOM pre-click)
- privacy, terms, refund pages use EmailLink
- contact/index.html uses a vanilla JS button with the same pattern
- PaymentForm mailto builder uses atob() to keep email out of source literals
Co-Authored-By: Claude Sonnet 4.6
---
estore/src/app/privacy/page.tsx | 6 ++--
estore/src/app/refund/page.tsx | 6 ++--
estore/src/app/terms/page.tsx | 4 +--
estore/src/components/EmailLink.tsx | 42 +++++++++++++++++++++++++++
estore/src/components/PaymentForm.tsx | 3 +-
main-site/contact/index.html | 12 +++++++-
6 files changed, 63 insertions(+), 10 deletions(-)
create mode 100644 estore/src/components/EmailLink.tsx
diff --git a/estore/src/app/privacy/page.tsx b/estore/src/app/privacy/page.tsx
index 782f393..f3f9101 100644
--- a/estore/src/app/privacy/page.tsx
+++ b/estore/src/app/privacy/page.tsx
@@ -1,4 +1,5 @@
import type { Metadata } from 'next'
+import EmailLink from '@/components/EmailLink'
export const metadata: Metadata = { title: 'Privacy Policy' }
@@ -75,13 +76,12 @@ export default function PrivacyPage() {
8. Your rights
You may request access to, correction of, or deletion of your personal data at any
- time by emailing info@beachpartyballoons.com.
+ time by emailing .