| <!DOCTYPE html>
|
| <html lang="en">
|
| <head>
|
| <meta charset="UTF-8">
|
| <meta name="viewport" content="width=device-width, initial-scale=1.0">
|
| <meta name="description" content="RedactAI — Discover, scan and redact PII, PCI, and PHI from text, files and databases instantly. GDPR, HIPAA, DPDP compliant. Free to start, no install required.">
|
| <title>RedactAI — Detect & Redact Sensitive Data Instantly | PII Scanner</title>
|
| <link rel="stylesheet" href="styles.css">
|
| <link rel="stylesheet" href="landing.css">
|
| <link rel="icon" href="logo.png">
|
| </head>
|
| <body>
|
| <div class="bg-noise"></div>
|
| <div class="bg-grid"></div>
|
| <div class="bg-glow bg-glow--purple"></div>
|
| <div class="bg-glow bg-glow--cyan"></div>
|
|
|
|
|
| <nav class="navbar" id="navbar">
|
|
|
| <div class="global-switcher"> |
| <a href="index.html" class="active global-link"><i data-lucide="shield-check"></i> REDACT-AI</a> |
| </div> |
| <div class="container">
|
| <a href="#" class="navbar__logo">
|
| <svg class="logo-svg" viewBox="0 0 48 48" width="36" height="36" xmlns="http://www.w3.org/2000/svg" style="margin-right:8px;">
|
| <g fill="#555555" class="logo-bars">
|
| <rect x="10" y="12" width="4" height="24" rx="2" />
|
| <rect x="18" y="6" width="4" height="36" rx="2" />
|
| <rect x="26" y="14" width="4" height="20" rx="2" />
|
| <rect x="34" y="10" width="4" height="28" rx="2" />
|
| </g>
|
| <rect class="logo-redaction" x="8" y="20" width="32" height="8" rx="2" fill="#ffffff" />
|
| </svg>
|
| <div class="navbar__logo-text">Redact<span>AI</span></div>
|
| </a>
|
| <ul class="navbar__links">
|
| <li class="has-dropdown">
|
| <a href="#">Products <i data-lucide="chevron-down"></i></a>
|
| <div class="dropdown-menu">
|
| <div class="dropdown-grid">
|
| <div class="dropdown-col">
|
| <div class="dropdown-title">Core Products</div>
|
| <a href="dashboard.html#dpdp-quick" class="dropdown-link"> |
| <div class="dropdown-icon"><i data-lucide="shield"></i></div>
|
| <div class="dropdown-text">
|
| <span class="dropdown-name">DPDP Scanner</span>
|
| <span class="dropdown-desc">Deep scan for DPDP compliance</span>
|
| </div>
|
| </a>
|
| <a href="dashboard.html#scanner" class="dropdown-link">
|
| <div class="dropdown-icon"><i data-lucide="check-circle"></i></div>
|
| <div class="dropdown-text">
|
| <span class="dropdown-name">DPDP Quick Check</span>
|
| <span class="dropdown-desc">Instant compliance validation</span>
|
| </div>
|
| </a>
|
| </div>
|
| <div class="dropdown-col">
|
| <div class="dropdown-title">Security Testing</div>
|
| <a href="dashboard.html#ai-leak" class="dropdown-link">
|
| <div class="dropdown-icon"><i data-lucide="alert-triangle"></i></div>
|
| <div class="dropdown-text">
|
| <span class="dropdown-name">AI Leak of Your Product</span>
|
| <span class="dropdown-desc">Discover leaked sensitive models</span>
|
| </div>
|
| </a>
|
| <a href="dashboard.html#prompt-scanner" class="dropdown-link"> |
| <div class="dropdown-icon"><i data-lucide="terminal-square"></i></div>
|
| <div class="dropdown-text">
|
| <span class="dropdown-name">Prompt Risk Scanner</span>
|
| <span class="dropdown-desc">Analyze AI prompts for vulnerabilities</span>
|
| </div>
|
| </a>
|
| </div>
|
| <div class="dropdown-col">
|
| <div class="dropdown-title">Analytics & Tools</div>
|
| <a href="dashboard.html#data-flow" class="dropdown-link">
|
| <div class="dropdown-icon"><i data-lucide="network"></i></div>
|
| <div class="dropdown-text">
|
| <span class="dropdown-name">Data Flow Visualizer</span>
|
| <span class="dropdown-desc">Map your PII data movement</span>
|
| </div>
|
| </a>
|
| <a href="dashboard.html#synthetic-attack" class="dropdown-link"> |
| <div class="dropdown-icon"><i data-lucide="sword"></i></div>
|
| <div class="dropdown-text">
|
| <span class="dropdown-name">Synthetic Attack Suite</span>
|
| <span class="dropdown-desc">Test defenses with fake data</span>
|
| </div>
|
| </a>
|
| </div>
|
| </div>
|
| </div>
|
| </li>
|
| <li class="has-dropdown">
|
| <a href="#">Solutions <i data-lucide="chevron-down"></i></a>
|
| <div class="dropdown-menu">
|
| <div class="dropdown-grid">
|
| <div class="dropdown-col">
|
| <div class="dropdown-title">By Industry</div>
|
| <a href="#use-cases" class="dropdown-link">
|
| <div class="dropdown-icon"><i data-lucide="stethoscope"></i></div>
|
| <div class="dropdown-text">
|
| <span class="dropdown-name">Healthcare</span>
|
| <span class="dropdown-desc">HIPAA compliant PHI redaction</span>
|
| </div>
|
| </a>
|
| <a href="#use-cases" class="dropdown-link">
|
| <div class="dropdown-icon"><i data-lucide="landmark"></i></div>
|
| <div class="dropdown-text">
|
| <span class="dropdown-name">Financial Services</span>
|
| <span class="dropdown-desc">PCI compliant data masking</span>
|
| </div>
|
| </a>
|
| </div>
|
| <div class="dropdown-col">
|
| <div class="dropdown-title">By Role</div>
|
| <a href="#use-cases" class="dropdown-link">
|
| <div class="dropdown-icon"><i data-lucide="code"></i></div>
|
| <div class="dropdown-text">
|
| <span class="dropdown-name">For Developers</span>
|
| <span class="dropdown-desc">API docs and integration guides</span>
|
| </div>
|
| </a>
|
| <a href="#use-cases" class="dropdown-link">
|
| <div class="dropdown-icon"><i data-lucide="shield-check"></i></div>
|
| <div class="dropdown-text">
|
| <span class="dropdown-name">For Security Teams</span>
|
| <span class="dropdown-desc">Compliance and audit logs</span>
|
| </div>
|
| </a>
|
| </div>
|
| </div>
|
| </div>
|
| </li>
|
| <li><a href="#demo">Live Demo</a></li>
|
| <li><a href="#pricing">Pricing</a></li>
|
| <li><a href="dashboard.html" class="btn btn--outline btn--small">Log In</a></li>
|
| <li><a href="dashboard.html" class="btn btn--primary btn--small">Start Free <i data-lucide="arrow-right"></i></a></li>
|
| </ul>
|
| </div>
|
| </nav>
|
|
|
|
|
| <section class="hero" id="hero">
|
| <div class="container">
|
| <div class="hero__badge animate-in">
|
| <span class="dot"></span>
|
| No install required · Start scanning in 5 seconds
|
| </div>
|
| <div class="hero__trust-badge animate-in animate-delay-0" style="display:inline-flex; align-items:center; gap:8px; background:var(--success-bg); color:var(--success); padding:8px 20px; border-radius:30px; font-size:13px; font-weight:600; border:1px solid rgba(50,215,75,0.2); margin-bottom:32px;">
|
| <i data-lucide="shield-check"></i> Zero Data Retention Policy. We never store your text.
|
| </div>
|
| <h1 class="hero__title animate-in animate-delay-1">
|
| Discover, Scan & Redact<br><span class="highlight hover-redact">Sensitive Data</span> Instantly
|
| </h1>
|
| <p class="hero__subtitle animate-in animate-delay-2">
|
| PII, PCI, PHI hiding in your text, files, or databases? RedactAI finds and removes it in seconds. Cloud-native, developer-friendly, and GDPR/HIPAA/DPDP compliant — with zero data stored.
|
| </p>
|
| <div class="hero__actions animate-in animate-delay-3">
|
| <a href="scan.html" class="btn btn--primary btn--large">Start Scanning Free <i data-lucide="arrow-right"></i></a>
|
| <a href="#demo" class="btn btn--outline btn--large"><i data-lucide="play"></i> See Live Demo</a>
|
| </div>
|
| <p class="hero__trust-text animate-in animate-delay-3" style="display:flex; align-items:center; justify-content:center; gap:8px; color:var(--text-muted); font-size:13px; margin-top:24px;">
|
| <i data-lucide="lock" style="width:14px;height:14px;"></i> End-to-end encrypted · No credit card required · Free forever
|
| </p>
|
|
|
| <div class="stats-bar animate-in animate-delay-3">
|
| <div class="stat">
|
| <div class="stat__value">12+</div>
|
| <div class="stat__label">PII Types Detected</div>
|
| </div>
|
| <div class="stat">
|
| <div class="stat__value">99.2%</div>
|
| <div class="stat__label">Detection Accuracy</div>
|
| </div>
|
| <div class="stat">
|
| <div class="stat__value"><50ms</div>
|
| <div class="stat__label">Avg Response Time</div>
|
| </div>
|
| <div class="stat">
|
| <div class="stat__value">0</div>
|
| <div class="stat__label">Data Stored</div>
|
| </div>
|
| </div>
|
| </div>
|
|
|
|
|
| <div class="hero-mockup animate-in animate-delay-3">
|
| <div class="hero-mockup__glow"></div>
|
| <div class="hero-mockup__window">
|
| <div class="hero-mockup__header">
|
| <div class="dots"><span></span><span></span><span></span></div>
|
| <div class="title">api.redactai.com/gateway/logs</div>
|
| <div class="actions"><i data-lucide="wifi"></i> Live</div>
|
| </div>
|
| <div class="hero-mockup__body">
|
| <div class="log-line"><span class="time">14:02:01.213</span> <span class="method">POST</span> /v1/chat/completions <span class="status status--ok">200 OK</span></div>
|
| <div class="log-line log-line--alert"><i data-lucide="shield-alert"></i> INTERCEPT: Payload contains [CREDIT_CARD], [PERSON_NAME]</div>
|
| <div class="log-line log-line--action"><i data-lucide="check-circle"></i> Vault applied: PII fully redacted before routing to OpenAI</div>
|
| <div class="log-line"><span class="time">14:02:02.045</span> <span class="method">REPLY</span> Provider (gpt-4o) returned secure response</div>
|
| </div>
|
| </div>
|
| </div>
|
| </div>
|
| </section>
|
|
|
|
|
| <section class="compliance-bar">
|
| <div class="container">
|
| <div class="compliance-bar__inner">
|
| <span class="compliance-badge">🇪🇺 GDPR</span>
|
| <span class="compliance-badge">🏥 HIPAA</span>
|
| <span class="compliance-badge"><i data-lucide="credit-card"></i> PCI DSS</span>
|
| <span class="compliance-badge">🇮🇳 DPDP Act</span>
|
| <span class="compliance-badge">🔒 SOC 2</span>
|
| <span class="compliance-badge">🇺🇸 CCPA</span>
|
| </div>
|
| </div>
|
| </section>
|
|
|
|
|
| <section class="section" id="how-it-works">
|
| <div class="container">
|
| <div class="section__header">
|
| <div class="section__label">How It Works</div>
|
| <h2 class="section__title">From Upload to Redaction in 3 Steps</h2>
|
| <p class="section__desc">No installation. No VM. No Docker. Just paste, scan, and redact.</p>
|
| </div>
|
|
|
| <div class="steps-grid">
|
| <div class="step-card">
|
| <div class="step-card__number">01</div>
|
| <div class="step-card__icon"><i data-lucide="search"></i></div>
|
| <h3 class="step-card__title">Discover</h3>
|
| <p class="step-card__desc">Paste text, upload files (CSV, JSON, TXT, PDF), or hit our API. Our AI scans every character for personal and sensitive data.</p>
|
| </div>
|
| <div class="step-card__arrow">→</div>
|
| <div class="step-card">
|
| <div class="step-card__number">02</div>
|
| <div class="step-card__icon"><i data-lucide="bar-chart-2"></i></div>
|
| <h3 class="step-card__title">Analyze</h3>
|
| <p class="step-card__desc">See exactly what was found — names, emails, phones, IDs, credit cards — with color-coded highlighting and entity breakdowns.</p>
|
| </div>
|
| <div class="step-card__arrow">→</div>
|
| <div class="step-card">
|
| <div class="step-card__number">03</div>
|
| <div class="step-card__icon"><i data-lucide="shield-check"></i></div>
|
| <h3 class="step-card__title">Remediate</h3>
|
| <p class="step-card__desc">One click to redact, mask, or pseudonymize. Export clean files, copy redacted text, or process in bulk via API.</p>
|
| </div>
|
| </div>
|
| </div>
|
| </section>
|
|
|
|
|
| <section class="section section--alt" id="use-cases">
|
| <div class="container">
|
| <div class="section__header">
|
| <div class="section__label">Use Cases</div>
|
| <h2 class="section__title">When Do You Need RedactAI?</h2>
|
| </div>
|
|
|
| <div class="usecase-grid">
|
| <div class="usecase-card">
|
| <div class="usecase-card__icon"><i data-lucide="clipboard-list"></i></div>
|
| <h3>Audits & Compliance</h3>
|
| <ul>
|
| <li>Confirm no PII lives outside designated systems</li>
|
| <li>Audit files, emails, DBs, and cloud storage</li>
|
| <li>Meet GDPR, HIPAA, PCI DSS, DPDP requirements</li>
|
| <li>Generate compliance reports automatically</li>
|
| </ul>
|
| </div>
|
| <div class="usecase-card">
|
| <div class="usecase-card__icon"><i data-lucide="alert-triangle"></i></div>
|
| <h3>Breach Response</h3>
|
| <ul>
|
| <li>React fast — identify whose data was exposed</li>
|
| <li>Scan millions of breached records in seconds</li>
|
| <li>Generate detailed impact reports</li>
|
| <li>Take actionable steps to prevent future breaches</li>
|
| </ul>
|
| </div>
|
| <div class="usecase-card">
|
| <div class="usecase-card__icon"><i data-lucide="bot"></i></div>
|
| <h3>AI Data Protection</h3>
|
| <ul>
|
| <li>Scrub PII before feeding data into LLMs</li>
|
| <li>Clean training datasets for ML models</li>
|
| <li>Prevent AI from memorizing personal data</li>
|
| <li>Stay audit-ready with processing logs</li>
|
| </ul>
|
| </div>
|
| <div class="usecase-card">
|
| <div class="usecase-card__icon"><i data-lucide="refresh-cw"></i></div>
|
| <h3>Data Migration</h3>
|
| <ul>
|
| <li>Classify data before migrating to cloud</li>
|
| <li>Cleanse storage of sensitive documents</li>
|
| <li>Move PII files to restricted-access folders</li>
|
| <li>Handle petabytes of legacy data efficiently</li>
|
| </ul>
|
| </div>
|
| <div class="usecase-card">
|
| <div class="usecase-card__icon"><i data-lucide="briefcase"></i></div>
|
| <h3>Consultants & MSPs</h3>
|
| <ul>
|
| <li>Assess security risk across all client data</li>
|
| <li>Formulate service plans with concrete detections</li>
|
| <li>Share interactive reports with clients</li>
|
| <li>White-label available for agencies</li>
|
| </ul>
|
| </div>
|
| <div class="usecase-card">
|
| <div class="usecase-card__icon"><i data-lucide="terminal"></i></div>
|
| <h3>Developer Workflows</h3>
|
| <ul>
|
| <li>Redact logs before developers access them</li>
|
| <li>Clean test databases of production PII</li>
|
| <li>CI/CD pipeline integration via REST API</li>
|
| <li>Pre-commit hooks to catch accidental PII</li>
|
| </ul>
|
| </div>
|
| </div>
|
| </div>
|
| </section>
|
|
|
|
|
| <section class="section" id="demo">
|
| <div class="container">
|
| <div class="section__header">
|
| <div class="section__label">Live Demo</div>
|
| <h2 class="section__title">Try It Right Now — No Signup Required</h2>
|
| <p class="section__desc">Paste any text with personal information. Watch RedactAI detect and redact it instantly, right in your browser.</p>
|
| </div>
|
|
|
| <div class="app-card">
|
| <div class="app-card__header">
|
| <div class="app-card__title"><i data-lucide="shield-check"></i> PII Scanner</div>
|
| <div class="app-card__actions">
|
| <div class="toggle-group">
|
| <button class="toggle-group__btn active" data-mode="highlight">Highlight</button>
|
| <button class="toggle-group__btn" data-mode="redact">Redact</button>
|
| </div>
|
| <button class="btn btn--ghost btn--small" id="btn-sample"><i data-lucide="file-text"></i> Sample</button>
|
| <button class="btn btn--ghost btn--small" id="btn-clear"><i data-lucide="x"></i> Clear</button>
|
| <button class="btn btn--primary btn--small" id="btn-copy"><i data-lucide="clipboard-list"></i> Copy Redacted</button>
|
| </div>
|
| </div>
|
| <div class="editor-layout">
|
| <div class="editor-pane">
|
| <div class="editor-pane__label"><i data-lucide="download"></i> Input — Paste your text</div>
|
| <textarea id="pii-input" placeholder="Paste text containing personal information here... Try pasting a customer email, support ticket, or any text with names, emails, phone numbers, etc."></textarea>
|
| </div>
|
| <div class="editor-pane">
|
| <div class="editor-pane__label"><i data-lucide="upload"></i> Output — Detected PII</div>
|
| <div class="output-area" id="pii-output"></div>
|
| </div>
|
| </div>
|
| </div>
|
| <div class="entities-panel">
|
| <div class="entities-panel__title"><i data-lucide="search"></i> Detected Entities: <span id="entity-count" style="color: var(--accent-light);">0</span></div>
|
| <div class="entities-grid" id="entities-grid"></div>
|
| </div>
|
| </div>
|
| </section>
|
|
|
|
|
| <section class="section section--alt" id="features">
|
| <div class="container">
|
| <div class="section__header">
|
| <div class="section__label">Detection Capabilities</div>
|
| <h2 class="section__title">Detect 12+ Types of Sensitive Data</h2>
|
| <p class="section__desc">From emails to Aadhaar numbers — RedactAI catches what others miss.</p>
|
| </div>
|
|
|
| <div class="marquee-wrapper">
|
|
|
| <div class="marquee-track marquee-track--right">
|
| <div class="marquee-group">
|
| <div class="marquee-chip"><i data-lucide="mail" style="color:var(--info);"></i> Email Addresses</div>
|
| <div class="marquee-chip"><i data-lucide="smartphone" style="color:var(--success);"></i> Phone Numbers</div>
|
| <div class="marquee-chip"><i data-lucide="user" style="color:#f472b6;"></i> Person Names</div>
|
| <div class="marquee-chip"><i data-lucide="id-card" style="color:var(--danger);"></i> Passport Numbers</div>
|
| <div class="marquee-chip"><i data-lucide="credit-card" style="color:var(--warning);"></i> Credit Cards</div>
|
| <div class="marquee-chip"><i data-lucide="globe" style="color:#22d3ee;"></i> IPv4 / IPv6 Addresses</div>
|
| </div>
|
| <div class="marquee-group" aria-hidden="true">
|
| <div class="marquee-chip"><i data-lucide="mail" style="color:var(--info);"></i> Email Addresses</div>
|
| <div class="marquee-chip"><i data-lucide="smartphone" style="color:var(--success);"></i> Phone Numbers</div>
|
| <div class="marquee-chip"><i data-lucide="user" style="color:#f472b6;"></i> Person Names</div>
|
| <div class="marquee-chip"><i data-lucide="id-card" style="color:var(--danger);"></i> Passport Numbers</div>
|
| <div class="marquee-chip"><i data-lucide="credit-card" style="color:var(--warning);"></i> Credit Cards</div>
|
| <div class="marquee-chip"><i data-lucide="globe" style="color:#22d3ee;"></i> IPv4 / IPv6 Addresses</div>
|
| </div>
|
| </div>
|
|
|
|
|
| <div class="marquee-track marquee-track--left" style="margin-top:20px;">
|
| <div class="marquee-group">
|
| <div class="marquee-chip"><i data-lucide="file-text" style="color:#94a3b8;"></i> US SSN</div>
|
| <div class="marquee-chip"><i data-lucide="map-pin" style="color:#818cf8;"></i> ZIP / PIN Codes</div>
|
| <div class="marquee-chip"><i data-lucide="hash" style="color:#a78bfa;"></i> India Aadhaar</div>
|
| <div class="marquee-chip"><i data-lucide="briefcase" style="color:#38bdf8;"></i> UK National Insurance</div>
|
| <div class="marquee-chip"><i data-lucide="building" style="color:#fbbf24;"></i> Bank Accounts / IBAN</div>
|
| <div class="marquee-chip"><i data-lucide="fingerprint" style="color:#f43f5e;"></i> Driving Licenses</div>
|
| </div>
|
| <div class="marquee-group" aria-hidden="true">
|
| <div class="marquee-chip"><i data-lucide="file-text" style="color:#94a3b8;"></i> US SSN</div>
|
| <div class="marquee-chip"><i data-lucide="map-pin" style="color:#818cf8;"></i> ZIP / PIN Codes</div>
|
| <div class="marquee-chip"><i data-lucide="hash" style="color:#a78bfa;"></i> India Aadhaar</div>
|
| <div class="marquee-chip"><i data-lucide="briefcase" style="color:#38bdf8;"></i> UK National Insurance</div>
|
| <div class="marquee-chip"><i data-lucide="building" style="color:#fbbf24;"></i> Bank Accounts / IBAN</div>
|
| <div class="marquee-chip"><i data-lucide="fingerprint" style="color:#f43f5e;"></i> Driving Licenses</div>
|
| </div>
|
| </div>
|
| </div>
|
| </div>
|
| </section>
|
|
|
|
|
| <section class="section" id="api">
|
| <div class="container">
|
| <div class="section__header">
|
| <div class="section__label">Developer First</div>
|
| <h2 class="section__title">Integrate with 3 Lines of Code</h2>
|
| <p class="section__desc">Build powerful data protection into your apps in minutes with our blazing-fast REST API.</p>
|
| </div>
|
|
|
| <div class="ide-wrapper">
|
| <div class="ide-window">
|
| <div class="ide-window__header">
|
| <div class="ide-window__dots">
|
| <span></span><span></span><span></span>
|
| </div>
|
| <div class="ide-window__tabs">
|
| <button class="ide-tab active" data-lang="python">Python</button>
|
| <button class="ide-tab" data-lang="node">Node.js</button>
|
| <button class="ide-tab" data-lang="curl">cURL</button>
|
| </div>
|
| <div class="ide-window__actions">
|
| <button class="btn btn--outline btn--small copy-code-btn" style="padding: 4px 12px; font-size: 12px; border-color: rgba(255,255,255,0.1);"><i data-lucide="copy" style="width:14px;height:14px;margin-right:4px;"></i> Copy</button>
|
| </div>
|
| </div>
|
| <div class="ide-window__body" style="padding: 32px 24px; font-size: 14px; display: block;">
|
| <div class="ide-code-block" id="code-python">
|
| <pre><code><span style="color:#c678dd;">import</span> requests
|
|
|
| <span style="color:#5c6370;"># 1. Route requests through RedactAI Gateway</span>
|
| headers = {<span style="color:#98c379;">"Authorization"</span>: <span style="color:#98c379;">"Bearer sk_live_..."</span>}
|
|
|
| <span style="color:#5c6370;"># 2. Send text containing sensitive data</span>
|
| payload = {
|
| <span style="color:#98c379;">"text"</span>: <span style="color:#98c379;">"Invoice for Elon Musk, card ending in 4242"</span>
|
| }
|
|
|
| <span style="color:#5c6370;"># 3. Get instant redacted results back</span>
|
| response = requests.post(<span style="color:#98c379;">"https://api.redactai.com/v1/scan"</span>, json=payload, headers=headers)
|
| <span style="color:#56b6c2;">print</span>(response.json())</code></pre>
|
| </div>
|
|
|
| <div class="ide-code-block" id="code-node" style="display:none;">
|
| <pre><code><span style="color:#c678dd;">import</span> { RedactAI } <span style="color:#c678dd;">from</span> <span style="color:#98c379;">"redact-ai"</span>;
|
|
|
| <span style="color:#5c6370;">// 1. Initialize the Gateway client</span>
|
| <span style="color:#c678dd;">const</span> client = <span style="color:#e5c07b;">new</span> RedactAI(process.env.REDACT_API_KEY);
|
|
|
| <span style="color:#5c6370;">// 2. Scan and redact in one line</span>
|
| <span style="color:#c678dd;">const</span> result = <span style="color:#c678dd;">await</span> client.scan({
|
| <span style="color:#d19a66;">text</span>: <span style="color:#98c379;">"Invoice for Elon Musk, card ending in 4242"</span>
|
| });
|
|
|
| <span style="color:#e5c07b;">console</span>.log(result.redacted);</code></pre>
|
| </div>
|
|
|
| <div class="ide-code-block" id="code-curl" style="display:none;">
|
| <pre><code>curl -X POST https://api.redactai.com/v1/scan \
|
| -H <span style="color:#98c379;">"Authorization: Bearer sk_live_..."</span> \
|
| -H <span style="color:#98c379;">"Content-Type: application/json"</span> \
|
| -d <span style="color:#98c379;">'{
|
| "text": "Invoice for Elon Musk, card ending in 4242"
|
| }'</span></code></pre>
|
| </div>
|
| </div>
|
| </div>
|
| </div>
|
| </div>
|
| </section>
|
|
|
|
|
| <section class="section section--alt" id="compare">
|
| <div class="container">
|
| <div class="section__header">
|
| <div class="section__label">Why RedactAI</div>
|
| <h2 class="section__title">Enterprise Power, Startup Speed</h2>
|
| <p class="section__desc">Traditional PII tools need weeks of setup. We're live in 5 seconds.</p>
|
| </div>
|
|
|
| <div class="compare-table-wrap">
|
| <table class="compare-table">
|
| <thead>
|
| <tr>
|
| <th>Feature</th>
|
| <th class="compare-table__them">Traditional PII Tools</th>
|
| <th class="compare-table__us">RedactAI ✨</th>
|
| </tr>
|
| </thead>
|
| <tbody>
|
| <tr><td>Setup Time</td><td>30+ minutes (VMware/Docker)</td><td class="compare-win">5 seconds (paste & scan)</td></tr>
|
| <tr><td>Free Tier</td><td>❌ "Schedule a demo"</td><td class="compare-win"><i data-lucide="check-circle"></i> 1,000 docs/month free</td></tr>
|
| <tr><td>API Access</td><td>Enterprise plan only</td><td class="compare-win">All plans, including free</td></tr>
|
| <tr><td>Pricing</td><td>$10,000+/year</td><td class="compare-win">From $0/month</td></tr>
|
| <tr><td>Target User</td><td>Enterprise IT teams</td><td class="compare-win">Anyone — devs, startups, enterprise</td></tr>
|
| <tr><td>Data Storage</td><td>On your servers</td><td class="compare-win">Zero — nothing stored</td></tr>
|
| <tr><td>Processing Speed</td><td>Varies</td><td class="compare-win"><50ms per request</td></tr>
|
| <tr><td>File Formats</td><td>400+</td><td>CSV, JSON, TXT (growing)</td></tr>
|
| <tr><td>On-Premise</td><td><i data-lucide="check-circle"></i> Required</td><td>☁️ Cloud + self-host option</td></tr>
|
| <tr><td>Compliance Reports</td><td><i data-lucide="check-circle"></i></td><td class="compare-win"><i data-lucide="check-circle"></i> + Auto-generated</td></tr>
|
| </tbody>
|
| </table>
|
| </div>
|
| </div>
|
| </section>
|
|
|
|
|
| <section class="section section--alt" id="testimonials">
|
| <div class="container">
|
| <div class="section__header">
|
| <div class="section__label">Testimonials</div>
|
| <h2 class="section__title">What Our Users Say</h2>
|
| </div>
|
| <div class="testimonials-grid">
|
| <div class="testimonial-card">
|
| <div class="testimonial-card__stars"><div style="display:flex;gap:4px;color:#ffd60a;"><i data-lucide="star" fill="currentColor"></i><i data-lucide="star" fill="currentColor"></i><i data-lucide="star" fill="currentColor"></i><i data-lucide="star" fill="currentColor"></i><i data-lucide="star" fill="currentColor"></i></div></div>
|
| <p class="testimonial-card__text">"We integrated RedactAI's API into our support pipeline. Customer PII is now automatically stripped before tickets reach our analytics dashboard. Setup took 10 minutes."</p>
|
| <div class="testimonial-card__author">
|
| <div class="testimonial-card__avatar">AK</div>
|
| <div>
|
| <div class="testimonial-card__name">Arjun Kumar</div>
|
| <div class="testimonial-card__role">CTO, FinServ Startup</div>
|
| </div>
|
| </div>
|
| </div>
|
| <div class="testimonial-card">
|
| <div class="testimonial-card__stars"><div style="display:flex;gap:4px;color:#ffd60a;"><i data-lucide="star" fill="currentColor"></i><i data-lucide="star" fill="currentColor"></i><i data-lucide="star" fill="currentColor"></i><i data-lucide="star" fill="currentColor"></i><i data-lucide="star" fill="currentColor"></i></div></div>
|
| <p class="testimonial-card__text">"Manual PII review of our database would have taken months. RedactAI scanned 50,000 records in under a minute and generated a compliance report automatically."</p>
|
| <div class="testimonial-card__author">
|
| <div class="testimonial-card__avatar">SM</div>
|
| <div>
|
| <div class="testimonial-card__name">Sarah Mitchell</div>
|
| <div class="testimonial-card__role">Data Protection Officer</div>
|
| </div>
|
| </div>
|
| </div>
|
| <div class="testimonial-card">
|
| <div class="testimonial-card__stars"><div style="display:flex;gap:4px;color:#ffd60a;"><i data-lucide="star" fill="currentColor"></i><i data-lucide="star" fill="currentColor"></i><i data-lucide="star" fill="currentColor"></i><i data-lucide="star" fill="currentColor"></i><i data-lucide="star" fill="currentColor"></i></div></div>
|
| <p class="testimonial-card__text">"We use RedactAI to clean training data before feeding it to our ML models. It catches things regex never would — contextual names, ambiguous phone formats. Game changer."</p>
|
| <div class="testimonial-card__author">
|
| <div class="testimonial-card__avatar">DP</div>
|
| <div>
|
| <div class="testimonial-card__name">Dev Patel</div>
|
| <div class="testimonial-card__role">ML Engineer, AI Startup</div>
|
| </div>
|
| </div>
|
| </div>
|
| </div>
|
| </div>
|
| </section>
|
|
|
|
|
| <section class="section" id="pricing">
|
| <div class="container">
|
| <div class="section__header">
|
| <div class="section__label">Pricing</div>
|
| <h2 class="section__title">Simple, Transparent Pricing</h2>
|
| <p class="section__desc">Start free. Scale as you grow. No sales calls required.</p>
|
| </div>
|
|
|
| <div class="pricing-grid">
|
| <div class="pricing-card">
|
| <div class="pricing-card__name">Starter</div>
|
| <div class="pricing-card__desc">For individuals and small projects</div>
|
| <div class="pricing-card__price">$0 <span>/ mo</span></div>
|
| <div class="pricing-card__period">Free forever</div>
|
| <ul class="pricing-card__features">
|
| <li>1,000 documents / month</li>
|
| <li>All 12+ PII types</li>
|
| <li>Web scanner + API</li>
|
| <li>Copy redacted text</li>
|
| <li>Community support</li>
|
| </ul>
|
| <a href="dashboard.html" class="btn btn--outline" style="width:100%;justify-content:center;">Get Started Free</a>
|
| </div>
|
| <div class="pricing-card pricing-card--popular">
|
| <div class="pricing-card__name">Business</div>
|
| <div class="pricing-card__desc">For teams and growing companies</div>
|
| <div class="pricing-card__price">$49 <span>/ mo</span></div>
|
| <div class="pricing-card__period">Billed monthly</div>
|
| <ul class="pricing-card__features">
|
| <li>50,000 documents / month</li>
|
| <li>Batch file upload (CSV, JSON, TXT)</li>
|
| <li>Full REST API with higher limits</li>
|
| <li>Compliance reports (GDPR, HIPAA)</li>
|
| <li>Scan history & export</li>
|
| <li>Priority email support</li>
|
| </ul>
|
| <a href="dashboard.html" class="btn btn--primary" style="width:100%;justify-content:center;">Start 14-Day Trial <i data-lucide="arrow-right"></i></a>
|
| </div>
|
| <div class="pricing-card">
|
| <div class="pricing-card__name">Enterprise</div>
|
| <div class="pricing-card__desc">For large organizations & MSPs</div>
|
| <div class="pricing-card__price">$299 <span>/ mo</span></div>
|
| <div class="pricing-card__period">Custom billing available</div>
|
| <ul class="pricing-card__features">
|
| <li>Unlimited documents</li>
|
| <li>Dedicated API instance</li>
|
| <li>Self-host / on-premise option</li>
|
| <li>Custom PII detection rules</li>
|
| <li>SOC2 compliance report</li>
|
| <li>SLA & dedicated support</li>
|
| <li>SSO & team management</li>
|
| <li>White-label for MSPs</li>
|
| </ul>
|
| <button class="btn btn--outline" style="width:100%;justify-content:center;">Contact Sales</button>
|
| </div>
|
| </div>
|
| </div>
|
| </section>
|
|
|
|
|
| <section class="section cta-section">
|
| <div class="container">
|
| <div class="cta-card">
|
| <h2 class="cta-card__title">Take Control of Your Sensitive Data Today</h2>
|
| <p class="cta-card__desc">Join hundreds of companies using RedactAI to protect customer data, comply with regulations, and prevent breaches.</p>
|
| <div class="cta-card__reasons">
|
| <div class="cta-reason"><i data-lucide="check-circle"></i> Instant PII detection — no setup needed</div>
|
| <div class="cta-reason"><i data-lucide="check-circle"></i> Comply with GDPR, HIPAA, PCI DSS, DPDP</div>
|
| <div class="cta-reason"><i data-lucide="check-circle"></i> Clean data before passing to AI or 3rd parties</div>
|
| </div>
|
| <div class="hero__actions" style="margin-top:32px;">
|
| <a href="scan.html" class="btn btn--primary btn--large">Start Scanning Free <i data-lucide="arrow-right"></i></a>
|
| <a href="#demo" class="btn btn--outline btn--large">Try Live Demo</a>
|
| </div>
|
| <p style="margin-top:16px;font-size:13px;color:var(--text-muted);">No credit card · No install · Free forever up to 1,000 docs</p>
|
| </div>
|
| </div>
|
| </section>
|
|
|
|
|
| <section class="section section--dark-scan" id="shadow-scan">
|
| <div class="container" style="max-width: 800px; text-align: center;">
|
| <div class="scan-pitch-badge animate-in">Free proof report — No sign-up required</div>
|
| <h2 class="section__title animate-in" style="font-size: 42px; margin-bottom: 24px;">See what your AI is leaking</h2>
|
| <p class="section__subtitle animate-in" style="font-size: 16px; margin-bottom: 40px; color: var(--text-secondary); max-width: 100%;">
|
| Find shadow AI endpoints, exposed Indian PII, pre-consent trackers, and buyer-facing DPDP gaps before your customer asks for proof.
|
| </p>
|
|
|
| <div class="shadow-scan-box animate-in">
|
| <div class="scan-remaining">2 free scans remaining this month.</div>
|
|
|
| <form class="scan-form" id="shadowScanForm">
|
| <div class="scan-step" id="scanStep1">
|
| <label>Website URL to scan</label>
|
| <div class="scan-input-group">
|
| <input type="url" required placeholder="https://yourwebsite.com" id="scanUrl" />
|
| <button type="button" class="btn btn--primary" id="btnNextScan">Next <i data-lucide="arrow-right"></i></button>
|
| </div>
|
| </div>
|
|
|
| <div class="scan-step" id="scanStep2" style="display:none;">
|
| <label>Email address for report delivery</label>
|
| <div class="scan-input-group">
|
| <input type="email" placeholder="Email (optional - to receive your report)" id="scanEmail" />
|
| <button type="submit" class="btn btn--primary" style="background: #ff5f56; border-color: #ff5f56; color: white;">Find data breach</button>
|
| </div>
|
| <p class="scan-disclaimer">
|
| <i data-lucide="shield"></i> Takes 2 minutes. We crawl only publicly accessible pages. No data is stored without your consent.
|
| </p>
|
| </div>
|
| </form>
|
| </div>
|
| </div>
|
| </section>
|
|
|
|
|
| <footer class="footer-full">
|
| <div class="container">
|
| <div class="footer-grid">
|
| <div class="footer-col">
|
| <a href="#" class="navbar__logo" style="margin-bottom:16px;">
|
| <svg class="logo-svg" viewBox="0 0 48 48" width="36" height="36" xmlns="http://www.w3.org/2000/svg" style="margin-right:8px;">
|
| <g fill="#555555" class="logo-bars">
|
| <rect x="10" y="12" width="4" height="24" rx="2" />
|
| <rect x="18" y="6" width="4" height="36" rx="2" />
|
| <rect x="26" y="14" width="4" height="20" rx="2" />
|
| <rect x="34" y="10" width="4" height="28" rx="2" />
|
| </g>
|
| <rect class="logo-redaction" x="8" y="20" width="32" height="8" rx="2" fill="#ffffff" />
|
| </svg>
|
| <div class="navbar__logo-text">Redact<span>AI</span></div>
|
| </a>
|
| <p style="font-size:14px;color:var(--text-muted);line-height:1.7;">Detect and redact sensitive data instantly. Cloud-native, developer-friendly, and built for compliance.</p>
|
| </div>
|
| <div class="footer-col">
|
| <h4>Product</h4>
|
| <a href="#demo">Live Demo</a>
|
| <a href="#features">Features</a>
|
| <a href="#pricing">Pricing</a>
|
| <a href="dashboard.html">Dashboard</a>
|
| </div>
|
| <div class="footer-col">
|
| <h4>Use Cases</h4>
|
| <a href="#use-cases">Compliance</a>
|
| <a href="#use-cases">Breach Response</a>
|
| <a href="#use-cases">AI Data Protection</a>
|
| <a href="#use-cases">Data Migration</a>
|
| </div>
|
| <div class="footer-col">
|
| <h4>Company</h4>
|
| <a href="#">Documentation</a>
|
| <a href="#">API Reference</a>
|
| <a href="#">Privacy Policy</a>
|
| <a href="#">Terms of Service</a>
|
| </div>
|
| </div>
|
| <div class="footer-bottom">
|
| <p>© 2026 RedactAI. All rights reserved.</p>
|
| <p>Built with <i data-lucide="shield-check"></i> for data privacy.</p>
|
| </div>
|
| </div>
|
| </footer>
|
|
|
| <script>
|
| document.querySelectorAll('.navbar__logo').forEach(logo => {
|
| logo.addEventListener('click', (e) => {
|
| e.preventDefault();
|
| logo.classList.remove('is-animating');
|
| void logo.offsetWidth;
|
| logo.classList.add('is-animating');
|
| setTimeout(() => {
|
| logo.classList.remove('is-animating');
|
| if (logo.getAttribute('href') && logo.getAttribute('href') !== '#') {
|
| window.location.href = logo.getAttribute('href');
|
| }
|
| }, 600);
|
| });
|
| });
|
| </script>
|
|
|
| <div class="redact-bot" id="redactBot">
|
| <div class="bot-history" id="botHistory"></div>
|
| <div class="redact-bot__speech-bubble" id="botBubble">
|
| <span id="botText">Zero retention... I literally have no memory!</span>
|
| <form id="botForm" style="display:none; margin:0; padding:0;">
|
| <input type="text" id="botInput" class="redact-bot__input" placeholder="Tell me a secret..." autocomplete="off" />
|
| </form>
|
| </div>
|
| <svg width="80" height="80" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg" class="redact-bot__svg">
|
| <defs>
|
| <filter id="core-glow" x="-50%" y="-50%" width="200%" height="200%">
|
| <feGaussianBlur stdDeviation="3" result="blur" />
|
| <feMerge>
|
| <feMergeNode in="blur"/>
|
| <feMergeNode in="blur"/>
|
| <feMergeNode in="SourceGraphic"/>
|
| </feMerge>
|
| </filter>
|
| <linearGradient id="armor-grad" x1="0%" y1="0%" x2="100%" y2="100%">
|
| <stop offset="0%" stop-color="#1e293b" />
|
| <stop offset="100%" stop-color="#0f172a" />
|
| </linearGradient>
|
| <linearGradient id="visor-grad" x1="0%" y1="0%" x2="0%" y2="100%">
|
| <stop offset="0%" stop-color="#0284c7" />
|
| <stop offset="100%" stop-color="#082f49" />
|
| </linearGradient>
|
| </defs>
|
|
|
|
|
| <circle cx="50" cy="50" r="44" fill="none" stroke="#475569" stroke-width="1.5" stroke-dasharray="30 15 5 15">
|
| <animateTransform attributeName="transform" type="rotate" from="0 50 50" to="360 50 50" dur="20s" repeatCount="indefinite"/>
|
| </circle>
|
|
|
|
|
| <circle cx="50" cy="50" r="38" fill="none" stroke="#22d3ee" stroke-width="1" stroke-dasharray="20 40" opacity="0.7">
|
| <animateTransform attributeName="transform" type="rotate" from="360 50 50" to="0 50 50" dur="12s" repeatCount="indefinite"/>
|
| </circle>
|
|
|
|
|
| <path d="M 50 12 L 83 31 L 83 69 L 50 88 L 17 69 L 17 31 Z" fill="url(#armor-grad)" stroke="#334155" stroke-width="2" />
|
|
|
|
|
| <path d="M 50 22 L 74 36 L 74 64 L 50 78 L 26 64 L 26 36 Z" fill="url(#visor-grad)" stroke="#0ea5e9" stroke-width="1.5" />
|
|
|
|
|
| <g stroke="#0284c7" stroke-width="0.5" opacity="0.3">
|
| <line x1="28" y1="40" x2="72" y2="40" />
|
| <line x1="26" y1="50" x2="74" y2="50" />
|
| <line x1="28" y1="60" x2="72" y2="60" />
|
| </g>
|
|
|
|
|
| <circle cx="50" cy="50" r="9" fill="#22d3ee" filter="url(#core-glow)" class="bot-eye">
|
| <animate attributeName="r" values="8;11;8" dur="2s" repeatCount="indefinite" />
|
| <animate attributeName="fill" values="#22d3ee;#38bdf8;#22d3ee" dur="2s" repeatCount="indefinite" />
|
| </circle>
|
|
|
|
|
| <circle cx="50" cy="50" r="3" fill="#ffffff" />
|
|
|
|
|
| <line x1="20" y1="50" x2="80" y2="50" stroke="#22d3ee" stroke-width="2" filter="url(#core-glow)" opacity="0.8">
|
| <animateTransform attributeName="transform" type="translate" values="0 -20; 0 20; 0 -20" dur="3s" repeatCount="indefinite" />
|
| </line>
|
| </svg>
|
| </div>
|
|
|
| <script src="https://unpkg.com/lucide@latest"></script>
|
| <script>lucide.createIcons();</script>
|
| <script src="https://cdn.jsdelivr.net/npm/canvas-confetti@1.6.0/dist/confetti.browser.min.js"></script>
|
| <script src="app.js"></script>
|
| <script>
|
| const botContainer = document.getElementById('redactBot');
|
| const botText = document.getElementById('botText');
|
| const botForm = document.getElementById('botForm');
|
| const botInput = document.getElementById('botInput');
|
| const botHistory = document.getElementById('botHistory');
|
|
|
| let isChatting = false;
|
| let storyInterval;
|
| let chatTimeout;
|
|
|
| const stories = [
|
| "Psst! I found an SSN over there.",
|
| "Redacting is my favorite hobby.",
|
| "Your data is completely safe with me!",
|
| "Zero retention... I literally have no memory.",
|
| "Scanning... 100% secure.",
|
| "Did someone say GDPR compliant?"
|
| ];
|
|
|
| function startStories() {
|
| clearInterval(storyInterval);
|
| storyInterval = setInterval(() => {
|
| if (!isChatting) botText.textContent = stories[Math.floor(Math.random() * stories.length)];
|
| }, 6000);
|
| }
|
| startStories();
|
|
|
|
|
| botContainer.addEventListener('click', (e) => {
|
| if(isChatting) return;
|
| isChatting = true;
|
| botContainer.classList.add('is-chatting');
|
| botText.style.display = 'none';
|
| botForm.style.display = 'block';
|
| botInput.focus();
|
| clearInterval(storyInterval);
|
| clearTimeout(chatTimeout);
|
| });
|
|
|
|
|
| botForm.addEventListener('click', e => e.stopPropagation());
|
|
|
|
|
| document.addEventListener('click', (e) => {
|
| if (isChatting && !botContainer.contains(e.target)) {
|
| isChatting = false;
|
| botContainer.classList.remove('is-chatting');
|
| botForm.style.display = 'none';
|
| botInput.value = '';
|
| botText.style.display = 'block';
|
| botText.textContent = "Tell me another secret!";
|
| startStories();
|
| }
|
| });
|
|
|
| function addHistoryMsg(html, type) {
|
| const msg = document.createElement('div');
|
| msg.className = `bot-history__msg bot-history__msg--${type}`;
|
| msg.innerHTML = html;
|
| botHistory.appendChild(msg);
|
|
|
| if(botHistory.children.length > 4) {
|
| botHistory.removeChild(botHistory.firstChild);
|
| }
|
| }
|
|
|
|
|
| botForm.addEventListener('submit', async (e) => {
|
| e.preventDefault();
|
| const text = botInput.value.trim();
|
| if(!text) return;
|
|
|
| botInput.value = '';
|
| addHistoryMsg(`<strong>You:</strong> ${text}`, 'user');
|
|
|
|
|
| const typingMsg = document.createElement('div');
|
| typingMsg.className = `bot-history__msg bot-history__msg--bot`;
|
| typingMsg.innerHTML = `<strong>Bot:</strong> <span style="opacity: 0.6;">typing...</span>`;
|
| botHistory.appendChild(typingMsg);
|
|
|
|
|
| botHistory.scrollTop = botHistory.scrollHeight;
|
|
|
|
|
| let redactedText = "";
|
| botInput.placeholder = "Processing...";
|
| botInput.disabled = true;
|
|
|
|
|
| await new Promise(r => setTimeout(r, 600));
|
|
|
| if (typeof detectPII === 'function') {
|
| const findings = detectPII(text);
|
|
|
| if (findings.length > 0) {
|
|
|
| let safeText = text;
|
| for (let i = findings.length - 1; i >= 0; i--) {
|
| safeText = safeText.substring(0, findings[i].start) + '<span style="color:var(--accent-light);">' + findings[i].redacted + '</span>' + safeText.substring(findings[i].end);
|
| }
|
| redactedText = "I successfully intercepted and redacted your sensitive data! 🛡️<br><br><i>\"" + safeText + "\"</i>";
|
| } else {
|
|
|
| const lower = text.toLowerCase();
|
| if (lower.match(/^(hi|hello|hey|yo)/)) {
|
| redactedText = "Hello! I'm the RedactAI Cyber-Sentinel. Feed me some sensitive text and watch me redact it instantly.";
|
| } else if (lower.match(/(fuck|shit|bitch|damn|niga|nigga|crap|ass)/)) {
|
| redactedText = "Woah there! 🛑 I redact sensitive data, but I can't redact your attitude. Let's keep it professional.";
|
| } else if (lower.includes('how are you')) {
|
| redactedText = "I am functioning at 100% security capacity with zero data retention. Thanks for asking!";
|
| } else {
|
| redactedText = "I didn't detect any PII, PCI, or PHI in your message. Your text is clean and ready for AI models!";
|
| }
|
| }
|
| } else {
|
| redactedText = "My scanning modules are currently offline, but I'm keeping a close eye on your data!";
|
| }
|
|
|
|
|
| typingMsg.innerHTML = `<strong>Bot:</strong> ${redactedText}`;
|
| botHistory.scrollTop = botHistory.scrollHeight;
|
| botInput.placeholder = "Tell me a secret...";
|
| botInput.disabled = false;
|
| botInput.focus();
|
|
|
|
|
| if(redactedText !== text && typeof confetti === 'function') {
|
| const rect = botContainer.getBoundingClientRect();
|
| confetti({
|
| particleCount: 30, spread: 50,
|
| origin: { x: (rect.left + rect.width/2)/window.innerWidth, y: rect.top/window.innerHeight },
|
| colors: ['#0ea5e9', '#8b5cf6', '#f43f5e']
|
| });
|
| }
|
|
|
|
|
| clearTimeout(chatTimeout);
|
| chatTimeout = setTimeout(() => {
|
| isChatting = false;
|
| botContainer.classList.remove('is-chatting');
|
| botForm.style.display = 'none';
|
| botText.style.display = 'block';
|
| botText.textContent = "Secrets deleted. I remember nothing.";
|
| botHistory.innerHTML = '';
|
| startStories();
|
| }, 15000);
|
| });
|
|
|
| function fallbackRedact(text) {
|
| if (typeof detectPII !== 'function') return text;
|
| const findings = detectPII(text);
|
| if (findings.length === 0) return text;
|
|
|
| let res = text;
|
| for (let i = findings.length - 1; i >= 0; i--) {
|
| res = res.substring(0, findings[i].start) + '<span style="color:var(--accent-light);">'+findings[i].redacted+'</span>' + res.substring(findings[i].end);
|
| }
|
| return res;
|
| }
|
|
|
|
|
| const btnNextScan = document.getElementById('btnNextScan');
|
| const scanStep1 = document.getElementById('scanStep1');
|
| const scanStep2 = document.getElementById('scanStep2');
|
| const scanUrl = document.getElementById('scanUrl');
|
|
|
| if(btnNextScan) {
|
| btnNextScan.addEventListener('click', () => {
|
| if(!scanUrl.value) {
|
| scanUrl.focus();
|
| return;
|
| }
|
| scanStep1.style.display = 'none';
|
| scanStep2.style.display = 'block';
|
| document.getElementById('scanEmail').focus();
|
| });
|
| }
|
| const shadowScanForm = document.getElementById('shadowScanForm');
|
| if(shadowScanForm) {
|
| shadowScanForm.addEventListener('submit', (e) => {
|
| e.preventDefault();
|
| const url = document.getElementById('scanUrl')?.value || '';
|
|
|
| window.location.href = 'scan.html?url=' + encodeURIComponent(url);
|
| });
|
| }
|
|
|
|
|
| const btnNextScanLanding = document.getElementById('btnNextScan');
|
| if (btnNextScanLanding) {
|
| btnNextScanLanding.addEventListener('click', () => {
|
| const url = document.getElementById('scanUrl')?.value || '';
|
| if (!url) { document.getElementById('scanUrl')?.focus(); return; }
|
| window.location.href = 'scan.html?url=' + encodeURIComponent(url);
|
| });
|
| }
|
|
|
|
|
| const ideTabs = document.querySelectorAll('.ide-tab');
|
| const codeBlocks = document.querySelectorAll('.ide-code-block');
|
| ideTabs.forEach(tab => {
|
| tab.addEventListener('click', () => {
|
| ideTabs.forEach(t => t.classList.remove('active'));
|
| codeBlocks.forEach(c => c.style.display = 'none');
|
| tab.classList.add('active');
|
| document.getElementById(`code-${tab.dataset.lang}`).style.display = 'block';
|
| });
|
| });
|
|
|
| const copyBtn = document.querySelector('.copy-code-btn');
|
| if(copyBtn) {
|
| copyBtn.addEventListener('click', () => {
|
| const activeBlock = document.querySelector('.ide-code-block[style*="display: block"]');
|
| if(activeBlock) {
|
| navigator.clipboard.writeText(activeBlock.textContent.trim());
|
| const orig = copyBtn.innerHTML;
|
| copyBtn.innerHTML = '<i data-lucide="check" style="width:14px;height:14px;margin-right:4px;"></i> Copied';
|
| lucide.createIcons();
|
| setTimeout(() => { copyBtn.innerHTML = orig; lucide.createIcons(); }, 2000);
|
| }
|
| });
|
| }
|
| const globalLinks = document.querySelectorAll('.global-link');
|
| const overlay = document.createElement('div');
|
| overlay.innerHTML = `
|
| <div id="transition-overlay" style="position: fixed; top: 0; left: 0; width: 100vw; height: 100vh; background: #050505; z-index: 999999; display: flex; flex-direction: column; align-items: center; justify-content: center; opacity: 0; transition: opacity 0.2s ease; pointer-events: none;">
|
| <div style="font-family: 'JetBrains Mono', monospace; color: #ff4545; text-align: center;">
|
| <div style="margin-bottom: 24px;"><i data-lucide="skull" style="width: 64px; height: 64px; animation: pulse 1s infinite;"></i></div>
|
| <h2 id="glitch-text" style="font-size: 32px; font-weight: 800; letter-spacing: 4px; margin: 0; text-shadow: 0 0 15px rgba(255,69,69,0.6); min-height: 40px;"></h2>
|
| <div style="margin-top: 24px; font-size: 14px; opacity: 0.8; text-align: left; display: inline-block; min-width: 280px;" id="hacker-logs"></div>
|
| </div>
|
| </div>
|
| `;
|
| document.body.appendChild(overlay.firstElementChild);
|
| lucide.createIcons();
|
|
|
| globalLinks.forEach(link => {
|
| link.addEventListener('click', (e) => {
|
| if (link.href === window.location.href || link.href.includes('#')) return;
|
| e.preventDefault();
|
|
|
| const transOverlay = document.getElementById('transition-overlay');
|
| transOverlay.style.pointerEvents = 'auto';
|
| transOverlay.style.opacity = '1';
|
|
|
| const textStr = "BREACHING PROTOCOLS";
|
| const h2 = document.getElementById('glitch-text');
|
| const logs = document.getElementById('hacker-logs');
|
| let i = 0;
|
| h2.innerHTML = "";
|
| logs.innerHTML = "";
|
|
|
| const typeInterval = setInterval(() => {
|
| h2.innerHTML += textStr.charAt(i);
|
| i++;
|
| if (i >= textStr.length) clearInterval(typeInterval);
|
| }, 50);
|
|
|
| setTimeout(() => { logs.innerHTML += "> Bypassing perimeter firewall...<br>"; }, 400);
|
| setTimeout(() => { logs.innerHTML += "> Injecting persistent payload...<br>"; }, 800);
|
| setTimeout(() => { logs.innerHTML += "> <span style='color:#32d74b;'>ACCESS GRANTED.</span><br>"; }, 1200);
|
|
|
| setTimeout(() => {
|
| window.location.href = link.href;
|
| }, 1600);
|
| });
|
| });
|
| </script>
|
| </body>
|
| </html>
|
|
|