feat: add privacy policy page and download links

This commit is contained in:
jwinterm
2026-01-27 15:46:39 -05:00
parent 3c18a7eb14
commit 98b08291c9
2 changed files with 176 additions and 12 deletions
+31 -7
View File
@@ -164,18 +164,35 @@ export default function Home() {
{step === 'initial' && (
<div className="flex flex-col items-center gap-6">
{hasExtension === false && (
<p className="text-zinc-400 text-sm mb-4">
Install the{' '}
<div className="flex flex-col items-center gap-4 mb-4">
<p className="creepster-text text-xl text-[#fbeb0a]">GET SMIRKED</p>
<div className="flex gap-4">
<a
href="https://chrome.google.com/webstore/detail/smirk-wallet"
target="_blank"
rel="noopener noreferrer"
className="text-[#fbeb0a] hover:underline"
className="flex items-center gap-2 px-4 py-2 bg-zinc-800 border border-zinc-700 rounded-lg
hover:border-[#fbeb0a] hover:shadow-[0_0_12px_rgba(251,235,10,0.4)] transition-all"
>
Smirk extension
</a>{' '}
to continue
</p>
<svg className="w-5 h-5" viewBox="0 0 24 24" fill="currentColor">
<path d="M12 0C8.21 0 4.831 1.757 2.632 4.501l3.953 6.848A5.454 5.454 0 0 1 12 6.545h10.691A12 12 0 0 0 12 0zM1.931 5.47A11.943 11.943 0 0 0 0 12c0 6.012 4.42 10.991 10.189 11.864l3.953-6.847a5.45 5.45 0 0 1-6.865-2.29zm13.342 2.166a5.446 5.446 0 0 1 1.45 7.09l.002.001h-.002l-5.344 9.257c.206.01.413.016.621.016 6.627 0 12-5.373 12-12 0-1.54-.29-3.011-.818-4.364zM12 16.364a4.364 4.364 0 1 1 0-8.728 4.364 4.364 0 0 1 0 8.728z"/>
</svg>
<span className="text-sm">Chrome Store</span>
</a>
<a
href="https://github.com/Such-Software/smirk-extension/releases"
target="_blank"
rel="noopener noreferrer"
className="flex items-center gap-2 px-4 py-2 bg-zinc-800 border border-zinc-700 rounded-lg
hover:border-[#fbeb0a] hover:shadow-[0_0_12px_rgba(251,235,10,0.4)] transition-all"
>
<svg className="w-5 h-5" viewBox="0 0 24 24" fill="currentColor">
<path d="M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z"/>
</svg>
<span className="text-sm">GitHub</span>
</a>
</div>
</div>
)}
<button
@@ -294,6 +311,13 @@ export default function Home() {
<p className="text-red-400 text-sm">{error}</p>
</div>
)}
{/* Footer */}
<div className="fixed bottom-4 left-0 right-0 flex justify-center">
<Link href="/privacy" className="text-zinc-500 text-sm hover:text-[#fbeb0a] transition-colors">
Privacy Policy
</Link>
</div>
</div>
);
}
+140
View File
@@ -0,0 +1,140 @@
'use client';
import Image from 'next/image';
import Link from 'next/link';
export default function Privacy() {
return (
<div className="min-h-screen flex flex-col items-center p-8">
{/* Header */}
<div className="mb-8 flex flex-col items-center">
<Link href="/" className="logo-glow mb-4">
<Image
src="/logo.svg"
alt="Smirk"
width={80}
height={80}
priority
/>
</Link>
<h1 className="creepster-text text-3xl">Privacy Policy</h1>
</div>
{/* Content */}
<div className="max-w-2xl w-full bg-zinc-900/50 rounded-2xl p-8 space-y-8">
<p className="text-zinc-300 text-lg leading-relaxed">
At Smirk, we believe privacy is a fundamental human right. Our architecture is designed
so that we never have access to your private keys, unencrypted funds, or the ability
to spend your money.
</p>
{/* Section 1 */}
<section>
<h2 className="text-xl font-bold text-[#fbeb0a] mb-4">1. The Non-Custodial Guarantee</h2>
<p className="text-zinc-300 mb-4">Smirk is a <strong>non-custodial</strong> service.</p>
<ul className="space-y-3 text-zinc-400">
<li>
<strong className="text-white">Private Spend Keys:</strong> Your private spend keys
(the keys required to move money) are generated and stored locally on your device.
They are never transmitted to our servers.
</li>
<li>
<strong className="text-white">No Access:</strong> We cannot &quot;freeze&quot; accounts or
&quot;seize&quot; funds because we do not hold the keys to move them.
</li>
</ul>
</section>
{/* Section 2 */}
<section>
<h2 className="text-xl font-bold text-[#fbeb0a] mb-4">2. Information We Collect</h2>
<p className="text-zinc-300 mb-4">
To facilitate social tipping and identity verification, we collect the following:
</p>
<h3 className="text-lg font-semibold text-white mt-6 mb-3">A. Monero &amp; Wownero Private View Keys</h3>
<p className="text-zinc-400 mb-3">
To provide a fast mobile and extension experience without requiring you to download
the entire blockchain, Smirk collects and stores your Private View Keys for Monero (XMR)
and Wownero (WOW).
</p>
<ul className="space-y-2 text-zinc-400 ml-4">
<li>
<strong className="text-white">Purpose:</strong> These keys allow our Light Wallet Server (LWS)
to scan the blockchain on your behalf to identify incoming tips.
</li>
<li>
<strong className="text-white">Limitation:</strong> A View Key cannot be used to spend your funds.
It only allows the server to see that a transaction has occurred. Your funds remain secure
and spendable only by your local extension.
</li>
</ul>
<h3 className="text-lg font-semibold text-white mt-6 mb-3">B. Social Identity Data</h3>
<p className="text-zinc-400 mb-2">
When you link a social account (Telegram, Discord, etc.), we store:
</p>
<ul className="space-y-2 text-zinc-400 ml-4">
<li>Your platform-specific User ID and Username.</li>
<li>Your public wallet address (so others can find you to send tips).</li>
</ul>
<h3 className="text-lg font-semibold text-white mt-6 mb-3">C. Transaction Metadata &amp; Payloads</h3>
<ul className="space-y-2 text-zinc-400 ml-4">
<li><strong className="text-white">Encrypted Payloads:</strong> The ciphertext of the tip (which we cannot read).</li>
<li><strong className="text-white">Status &amp; Timestamps:</strong> Metadata regarding when a tip was created or claimed.</li>
</ul>
</section>
{/* Section 3 */}
<section>
<h2 className="text-xl font-bold text-[#fbeb0a] mb-4">3. How We Protect Your Data</h2>
<ul className="space-y-3 text-zinc-400">
<li>
<strong className="text-white">Backend Security:</strong> Our Rust-based backend utilizes
SQLx type safety and memory-safe architecture to protect your stored view keys and social data.
</li>
<li>
<strong className="text-white">No Sale of Data:</strong> We do not, and will never,
sell your social handles, transaction history, or view key data to third parties.
</li>
</ul>
</section>
{/* Smirk Approach */}
<section className="bg-zinc-800/50 rounded-xl p-6">
<h2 className="text-lg font-bold text-[#fbeb0a] mb-4 flex items-center gap-2">
<span>🛡️</span> Why do we need your View Key? (The &quot;Smirk&quot; Approach)
</h2>
<p className="text-zinc-300 mb-4">Traditional Monero wallets require hours of syncing. By providing your Private View Key to our server:</p>
<ul className="space-y-2 text-zinc-400">
<li>✓ We scan the blockchain for you in real-time.</li>
<li>✓ We notify your extension when a tip arrives.</li>
<li>✓ You remain the only one with the Private Spend Key required to actually move those funds.</li>
</ul>
</section>
{/* Quick Summary */}
<section className="border border-zinc-700 rounded-xl p-6">
<h2 className="text-lg font-bold text-white mb-4">🛡️ Quick-Glance Summary</h2>
<ul className="space-y-2 text-zinc-400">
<li><strong className="text-[#fbeb0a]">Non-Custodial:</strong> We never see your private spend keys. Your money is yours.</li>
<li><strong className="text-[#fbeb0a]">View Keys:</strong> We collect Monero/Wownero view keys to scan for your tips so you don&apos;t have to sync the whole blockchain.</li>
<li><strong className="text-[#fbeb0a]">Encrypted:</strong> All tip payloads are encrypted on your device.</li>
<li><strong className="text-[#fbeb0a]">Identity:</strong> We only store your Social ID to help people find your public key.</li>
</ul>
</section>
{/* Back link */}
<div className="pt-4 text-center">
<Link
href="/"
className="text-[#fbeb0a] hover:underline"
>
← Back to Smirk
</Link>
</div>
</div>
</div>
);
}