Skip to content

Redesign proof page with marketing content and CTAs#452

Open
marksftw wants to merge 1 commit intomasterfrom
feature/update-proof-page
Open

Redesign proof page with marketing content and CTAs#452
marksftw wants to merge 1 commit intomasterfrom
feature/update-proof-page

Conversation

@marksftw
Copy link
Contributor

@marksftw marksftw commented Mar 2, 2026

Summary

  • Redesigned /proof page with 6 sections: hero, data flow diagram, live attestation, privacy spectrum comparison, security team facts, and FAQ
  • Added interactive data flow diagram showing encryption pipeline (device → enclave → GPU TEE → open source)
  • Added "Introduce Us to Your Security Team" CTA with contact modal (copyable email fields)
  • Added "Introduce Us to Your AI Agent" CTA with modal guiding users to point agents at llms-full.txt
  • Added privacy spectrum comparison cards (Standard AI vs Privacy Proxy vs Hardware-Encrypted AI)
  • Added security facts checklist for technical evaluation
  • Added FAQ section with TEE explainers

Test plan

  • Verify page renders correctly in both light and dark mode
  • Test responsive layout at mobile, tablet, and desktop widths
  • Test data flow diagram arrow direction (horizontal on desktop, vertical on mobile)
  • Test Contact modal: copy buttons for email, subject, message, and copy all
  • Test Agent modal: copy buttons for URL and sample prompt
  • Verify live attestation still loads and displays correctly
  • Check all external links (GitHub repos, AWS docs, mailto)

Open with Devin

Summary by CodeRabbit

  • New Features
    • Added an interactive data flow diagram to visualize the verification process with step-by-step visualization.
    • Introduced copy-to-clipboard functionality for easy sharing of contact and agent information.
    • Added expandable FAQ section covering security and privacy topics.
    • Enhanced page layout with new sections on data protection, live attestation, and security resources.
    • Added contact and agent modals with rich content and sharing capabilities.

Add data flow diagram, privacy spectrum comparison cards, security team
facts section, FAQ, contact modal with copyable fields, and AI agent
introduction modal with llms-full.txt integration.
@cloudflare-workers-and-pages
Copy link

Deploying maple with  Cloudflare Pages  Cloudflare Pages

Latest commit: c2909b4
Status: ✅  Deploy successful!
Preview URL: https://6d459e9b.maple-ca8.pages.dev
Branch Preview URL: https://feature-update-proof-page.maple-ca8.pages.dev

View logs

@coderabbitai
Copy link

coderabbitai bot commented Mar 2, 2026

📝 Walkthrough

Walkthrough

This pull request adds comprehensive UI components and content sections to the proof page, including a data flow diagram, interactive modals (contact and agent), feature cards, security facts, and an FAQ section. The layout is restructured to emphasize privacy features and self-verification with improved visual presentation and user interactivity.

Changes

Cohort / File(s) Summary
Proof Page Enhancement
frontend/src/routes/proof.tsx
Added multiple UI components (DataFlowDiagram with icon-based flow steps, CopyButton, ContactModal, AgentModal, ApproachCard, SecurityFact, ProofFAQ) alongside supporting data and constants. Restructured page layout with new sections for data protection flow, live attestation, privacy spectrum, security resources, and expandable FAQ. Updated MarketingHeader messaging and replaced previous loading/error sections with comprehensive multi-section layout. Removed debug console.log statement.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Suggested reviewers

  • AnthonyRonning

Poem

🐰 Hoppy hops of code so bright,
New components dance in light,
Modals pop and buttons shine,
Data flows in perfect line,
Privacy wrapped up, neat and tight!

🚥 Pre-merge checks | ✅ 2
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'Redesign proof page with marketing content and CTAs' accurately summarizes the main change: a comprehensive redesign of the proof page with new marketing components and call-to-action modals.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
  • 📝 Generate docstrings (stacked PR)
  • 📝 Generate docstrings (commit on current branch)
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch feature/update-proof-page

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Contributor

@devin-ai-integration devin-ai-integration bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Devin Review found 1 potential issue.

View 4 additional findings in Devin Review.

Open in Devin Review

Comment on lines +255 to +259
const handleCopy = async () => {
await navigator.clipboard.writeText(text);
setCopied(true);
setTimeout(() => setCopied(false), 2000);
};
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Missing try/catch on navigator.clipboard.writeText causes unhandled rejection

The CopyButton component's handleCopy function at line 256 calls await navigator.clipboard.writeText(text) without any error handling. If the clipboard API throws (e.g., document not focused, permission denied, non-secure context, or on certain mobile browsers), this produces an unhandled promise rejection and the setCopied(true) / setTimeout on lines 257-258 are never reached.

Existing codebase pattern violated

Every other usage of navigator.clipboard.writeText() in the codebase wraps the call in a try/catch:

  • frontend/src/routes/_auth.chat.$chatId.tsx:27-33 — try/catch with console.error
  • frontend/src/components/UnifiedChat.tsx:162-169 — try/catch with console.error
  • frontend/src/components/apikeys/CreateApiKeyDialog.tsx:82-88 — try/catch with console.error
  • frontend/src/components/GuestCredentialsDialog.tsx:33-39 — try/catch with console.error
  • frontend/src/components/markdown.tsx:17-23 — try/catch with console.error

The new CopyButton component breaks this established pattern. On browsers/platforms where clipboard access fails, the button will silently break with an unhandled promise rejection instead of gracefully degrading.

Impact: The copy buttons in both the Contact modal and Agent modal (used ~7 times across both modals) will throw unhandled errors on any platform where clipboard access is restricted, causing a poor user experience on the security-focused proof page.

Suggested change
const handleCopy = async () => {
await navigator.clipboard.writeText(text);
setCopied(true);
setTimeout(() => setCopied(false), 2000);
};
const handleCopy = async () => {
try {
await navigator.clipboard.writeText(text);
setCopied(true);
setTimeout(() => setCopied(false), 2000);
} catch (error) {
console.error("Failed to copy text: ", error);
}
};
Open in Devin Review

Was this helpful? React with 👍 or 👎 to provide feedback.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
frontend/src/routes/proof.tsx (1)

255-259: Add error handling for clipboard API.

navigator.clipboard.writeText() can reject if the clipboard API is unavailable or permission is denied. Currently, failures are silently ignored.

♻️ Suggested improvement with error handling
   const handleCopy = async () => {
-    await navigator.clipboard.writeText(text);
-    setCopied(true);
-    setTimeout(() => setCopied(false), 2000);
+    try {
+      await navigator.clipboard.writeText(text);
+      setCopied(true);
+      setTimeout(() => setCopied(false), 2000);
+    } catch {
+      // Clipboard access denied or unavailable - fail silently or add user feedback
+    }
   };
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@frontend/src/routes/proof.tsx` around lines 255 - 259, The handleCopy
function currently calls navigator.clipboard.writeText(text) without handling
rejections; wrap the writeText call in a try/catch inside handleCopy, call
setCopied(true) only on successful await, and in the catch log or surface the
error (e.g., console.error or show a toast) and ensure setCopied(false) is used
to clear any state; also consider a fallback behavior (e.g.,
select-and-execCommand or a user-visible error) when navigator.clipboard is
unavailable before calling navigator.clipboard.writeText.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In `@frontend/src/routes/proof.tsx`:
- Around line 255-259: The handleCopy function currently calls
navigator.clipboard.writeText(text) without handling rejections; wrap the
writeText call in a try/catch inside handleCopy, call setCopied(true) only on
successful await, and in the catch log or surface the error (e.g., console.error
or show a toast) and ensure setCopied(false) is used to clear any state; also
consider a fallback behavior (e.g., select-and-execCommand or a user-visible
error) when navigator.clipboard is unavailable before calling
navigator.clipboard.writeText.

ℹ️ Review info

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between c118743 and c2909b4.

📒 Files selected for processing (1)
  • frontend/src/routes/proof.tsx

Comment on lines +308 to +346
<div className="flex flex-col gap-4 mt-2">
{/* To field */}
<div className="flex flex-col gap-1.5">
<label className="text-sm font-medium text-muted-foreground">To</label>
<div className="flex items-center justify-between gap-2 px-3 py-2 rounded-md border border-input bg-[hsl(var(--muted))]/50">
<span className="text-sm font-mono">{CONTACT_EMAIL}</span>
<CopyButton text={CONTACT_EMAIL} label="Copy" />
</div>
</div>

{/* Subject field */}
<div className="flex flex-col gap-1.5">
<label className="text-sm font-medium text-muted-foreground">Subject</label>
<div className="flex items-center justify-between gap-2 px-3 py-2 rounded-md border border-input bg-[hsl(var(--muted))]/50">
<span className="text-sm">{CONTACT_SUBJECT}</span>
<CopyButton text={CONTACT_SUBJECT} label="Copy" />
</div>
</div>

{/* Body field */}
<div className="flex flex-col gap-1.5">
<div className="flex items-center justify-between">
<label className="text-sm font-medium text-muted-foreground">Message</label>
<CopyButton text={CONTACT_BODY} label="Copy message" />
</div>
<div className="px-3 py-2 rounded-md border border-input bg-[hsl(var(--muted))]/50">
<pre className="text-sm whitespace-pre-wrap font-sans text-foreground/80">
{CONTACT_BODY}
</pre>
</div>
</div>

{/* Copy all */}
<div className="flex justify-end pt-2">
<CopyButton
text={`To: ${CONTACT_EMAIL}\nSubject: ${CONTACT_SUBJECT}\n\n${CONTACT_BODY}`}
label="Copy all"
/>
</div>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

the copy pasting for email sending here is very strange. there's standard email client popups that should be used instead

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants