docs: apply fleet-template (16-artifact scaffold)
Adds missing standard artifacts: - README.md (if missing) - AGENTS.md (AI agent contract) - PLAN.md (current sprint) - STATUS.md (where we are) - DEVELOPMENT.md (dev workflow) - DEPLOYMENT.md (deploy procedure) - TESTING.md (test strategy) - DECISIONS.md (ADR index + templates) - .github/CODEOWNERS - .github/workflows/ci.yml Preserves all existing artifacts. Refs: RugMunchMedia/fleet-template
This commit is contained in:
commit
e13bd4d774
203 changed files with 31140 additions and 0 deletions
274
marketing/about.html
Normal file
274
marketing/about.html
Normal file
|
|
@ -0,0 +1,274 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>About — WalletPress · Built by Rug Munch Media</title>
|
||||
<meta name="description" content="WalletPress is built by Rug Munch Media LLC — a Wyoming-based crypto infrastructure company. Self-hosted, no DRM, developer-first.">
|
||||
<meta name="robots" content="noindex">
|
||||
<link rel="icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><text y='.9em' font-size='90'>🔐</text></svg>">
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:opsz,wght@14..32,300;14..32,400;14..32,510;14..32,590;14..32,700&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet">
|
||||
<style>
|
||||
:root {
|
||||
--bg:#08090a;--bg2:#0c0d0f;--bg3:#121317;--bg4:#181a1f;
|
||||
--border:rgba(255,255,255,0.06);--border2:rgba(255,255,255,0.09);
|
||||
--fg:#f7f8f8;--fg2:#9ca0a8;--fg3:#5f636b;
|
||||
--accent:#f0a030;--accent2:#d48c1e;--accent-glow:rgba(240,160,48,0.12);--accent-glow2:rgba(240,160,48,0.2);
|
||||
--cyan:#22d3ee;--purple:#8b5cf6;--green:#22c55e;
|
||||
--radius:6px;--radius-lg:12px;--radius-xl:16px;--radius-pill:9999px;--nav-h:52px;
|
||||
}
|
||||
*,*::before,*::after{margin:0;padding:0;box-sizing:border-box}
|
||||
html{scroll-behavior:smooth;-webkit-text-size-adjust:100%}
|
||||
body{font-family:'Inter',system-ui,-apple-system,sans-serif;background:var(--bg);color:var(--fg);line-height:1.5;-webkit-font-smoothing:antialiased;font-feature-settings:'cv01','ss03';overflow-x:hidden}
|
||||
::selection{background:rgba(240,160,48,0.3);color:var(--fg)}
|
||||
img{display:block;max-width:100%}
|
||||
.reveal{opacity:0;transform:translateY(24px);transition:opacity .6s ease-out,transform .6s ease-out}
|
||||
.reveal.visible{opacity:1;transform:translateY(0)}
|
||||
|
||||
/* NAV */
|
||||
nav{position:fixed;top:0;left:0;right:0;z-index:100;height:var(--nav-h);background:rgba(8,9,10,0.82);backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);border-bottom:1px solid var(--border)}
|
||||
.nav-inner{max-width:1200px;margin:0 auto;padding:0 20px;height:100%;display:flex;align-items:center;justify-content:space-between;gap:16px}
|
||||
.logo{display:flex;align-items:center;gap:8px;font-weight:700;font-size:18px;color:var(--fg);text-decoration:none;letter-spacing:-0.02em}
|
||||
.logo-dot{width:8px;height:8px;border-radius:50%;background:var(--accent)}
|
||||
.nav-links{display:flex;align-items:center;gap:24px}
|
||||
.nav-links a{color:var(--fg2);text-decoration:none;font-size:13px;font-weight:510;transition:color .15s}
|
||||
.nav-links a:hover{color:var(--fg)}
|
||||
.nav-links .active{color:var(--accent)}
|
||||
.nav-cta{padding:6px 16px!important;border-radius:var(--radius)!important;background:var(--accent)!important;color:#08090a!important;font-weight:590!important;font-size:13px!important}
|
||||
.nav-cta:hover{background:var(--accent2)!important;color:#08090a!important}
|
||||
.hamburger{display:none;flex-direction:column;gap:4px;cursor:pointer;padding:8px;background:none;border:none;z-index:101}
|
||||
.hamburger span{display:block;width:20px;height:1.5px;background:var(--fg2);transition:.2s}
|
||||
.hamburger.open span:nth-child(1){transform:rotate(45deg) translate(4px,4px)}
|
||||
.hamburger.open span:nth-child(2){opacity:0}
|
||||
.hamburger.open span:nth-child(3){transform:rotate(-45deg) translate(4px,-4px)}
|
||||
.mobile-menu{display:none;position:fixed;top:var(--nav-h);left:0;right:0;bottom:0;background:var(--bg);z-index:99;padding:32px 20px;flex-direction:column;gap:20px}
|
||||
.mobile-menu.open{display:flex}
|
||||
.mobile-menu a{color:var(--fg2);text-decoration:none;font-size:18px;font-weight:510}
|
||||
.mobile-menu .nav-cta{display:inline-block;text-align:center;margin-top:8px}
|
||||
|
||||
/* BUTTONS */
|
||||
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;padding:12px 24px;border-radius:var(--radius);font-size:14px;font-weight:590;text-decoration:none;transition:all .2s;cursor:pointer;border:none;font-family:inherit;letter-spacing:-0.01em}
|
||||
.btn-primary{background:var(--accent);color:#08090a}
|
||||
.btn-primary:hover{background:var(--accent2);transform:translateY(-1px);box-shadow:0 8px 24px var(--accent-glow)}
|
||||
.btn-secondary{background:rgba(255,255,255,0.04);color:var(--fg);border:1px solid var(--border2)}
|
||||
.btn-secondary:hover{background:rgba(255,255,255,0.07)}
|
||||
.btn-lg{padding:14px 28px;font-size:15px}
|
||||
|
||||
/* SECTIONS */
|
||||
section{padding:80px 20px}
|
||||
@media(min-width:768px){section{padding:100px 32px}}
|
||||
section.alt{background:var(--bg2);border-top:1px solid var(--border);border-bottom:1px solid var(--border)}
|
||||
.container{max-width:1100px;margin:0 auto}
|
||||
|
||||
/* HERO */
|
||||
.hero{min-height:35vh;display:flex;align-items:center;justify-content:center;text-align:center;padding:120px 20px 60px;position:relative;overflow:hidden}
|
||||
.hero::before{content:'';position:absolute;top:-30%;left:-50%;width:200%;height:160%;background:radial-gradient(ellipse at 50% 0%,var(--accent-glow),transparent 50%);opacity:0.2;pointer-events:none}
|
||||
.hero-content{position:relative;z-index:1;max-width:600px}
|
||||
.hero-breadcrumb{font-size:12px;color:var(--fg3);margin-bottom:16px}
|
||||
.hero-breadcrumb a{color:var(--fg3);text-decoration:none;transition:color .15s}
|
||||
.hero-breadcrumb a:hover{color:var(--fg2)}
|
||||
.hero h1{font-size:clamp(28px,5vw,44px);font-weight:700;line-height:1.1;letter-spacing:-0.03em;margin-bottom:12px}
|
||||
.hero p{color:var(--fg2);font-size:15px;margin:0 auto;line-height:1.6;font-weight:400}
|
||||
|
||||
/* MISSION */
|
||||
.mission-grid{display:grid;grid-template-columns:1fr;gap:20px;max-width:900px;margin:0 auto}
|
||||
@media(min-width:640px){.mission-grid{grid-template-columns:repeat(3,1fr)}}
|
||||
.mission-card{background:var(--bg2);border:1px solid var(--border);border-radius:var(--radius-xl);padding:32px 28px;text-align:center;transition:all .25s}
|
||||
.mission-card:hover{border-color:var(--border2);transform:translateY(-2px)}
|
||||
.mission-icon{font-size:32px;margin-bottom:16px}
|
||||
.mission-card h3{font-size:16px;font-weight:590;margin-bottom:8px}
|
||||
.mission-card p{font-size:13px;color:var(--fg2);line-height:1.6}
|
||||
|
||||
/* TRUST */
|
||||
.trust-grid{display:grid;grid-template-columns:1fr;gap:16px;max-width:800px;margin:0 auto}
|
||||
@media(min-width:640px){.trust-grid{grid-template-columns:repeat(2,1fr)}}
|
||||
.trust-card{background:var(--bg2);border:1px solid var(--border);border-radius:var(--radius-xl);padding:28px;display:flex;gap:16px;align-items:flex-start;transition:all .25s}
|
||||
.trust-card:hover{border-color:var(--border2)}
|
||||
.trust-card .icon{font-size:24px;flex-shrink:0;margin-top:2px}
|
||||
.trust-card h4{font-size:14px;font-weight:590;margin-bottom:4px}
|
||||
.trust-card p{font-size:12px;color:var(--fg2);line-height:1.6}
|
||||
|
||||
/* TEAM */
|
||||
.team-badge{max-width:700px;margin:0 auto;background:linear-gradient(135deg,rgba(240,160,48,0.04),rgba(139,92,246,0.04));border:1px solid var(--border2);border-radius:var(--radius-xl);padding:36px 40px;text-align:center}
|
||||
.team-badge h3{font-size:20px;font-weight:700;margin-bottom:8px;letter-spacing:-0.01em}
|
||||
.team-badge p{font-size:14px;color:var(--fg2);line-height:1.7;max-width:500px;margin:0 auto 16px}
|
||||
.team-badge .location{font-size:12px;color:var(--fg3)}
|
||||
|
||||
/* SECTION HEADER */
|
||||
.section-header{text-align:center;margin-bottom:48px}
|
||||
.section-label{display:inline-block;font-size:11px;font-weight:590;text-transform:uppercase;letter-spacing:0.08em;color:var(--accent);margin-bottom:12px}
|
||||
.section-header h2{font-size:clamp(24px,4vw,34px);font-weight:700;letter-spacing:-0.02em;margin-bottom:12px}
|
||||
.section-header p{color:var(--fg2);font-size:14px;max-width:480px;margin:0 auto}
|
||||
|
||||
/* CTA */
|
||||
.cta-band{text-align:center;padding:64px 20px;background:var(--bg2);border-top:1px solid var(--border);border-bottom:1px solid var(--border)}
|
||||
.cta-band h2{font-size:clamp(22px,4vw,30px);font-weight:700;margin-bottom:12px;letter-spacing:-0.02em}
|
||||
.cta-band p{color:var(--fg2);font-size:15px;margin-bottom:24px}
|
||||
|
||||
/* FOOTER */
|
||||
footer{border-top:1px solid var(--border);padding:40px 20px;text-align:center}
|
||||
.footer-grid{display:flex;justify-content:center;flex-wrap:wrap;gap:24px;margin-bottom:20px}
|
||||
.footer-grid a{color:var(--fg3);text-decoration:none;font-size:12px;font-weight:510;transition:color .15s}
|
||||
.footer-grid a:hover{color:var(--fg2)}
|
||||
footer .copy{color:var(--fg3);font-size:11px}
|
||||
|
||||
@media(max-width:768px){
|
||||
.nav-links{display:none}
|
||||
.hamburger{display:flex}
|
||||
.hero h1{font-size:28px}
|
||||
section{padding:60px 16px}
|
||||
.team-badge{padding:28px 24px}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<nav>
|
||||
<div class="nav-inner">
|
||||
<a href="/index.html" class="logo"><span class="logo-dot"></span>WalletPress</a>
|
||||
<div class="nav-links">
|
||||
<a href="/index.html">Home</a>
|
||||
<a href="/features.html">Features</a>
|
||||
<a href="/docs.html">Docs</a>
|
||||
<a href="/about.html" class="active">About</a>
|
||||
<a href="/buy.html" class="nav-cta">Buy — $49</a>
|
||||
</div>
|
||||
<button class="hamburger" onclick="document.getElementById('mobile-menu').classList.toggle('open');this.classList.toggle('open')" aria-label="Menu">
|
||||
<span></span><span></span><span></span>
|
||||
</button>
|
||||
</div>
|
||||
</nav>
|
||||
<div class="mobile-menu" id="mobile-menu">
|
||||
<a href="/index.html">Home</a>
|
||||
<a href="/features.html">Features</a>
|
||||
<a href="/docs.html">Docs</a>
|
||||
<a href="/about.html">About</a>
|
||||
<a href="/buy.html" class="nav-cta">Buy — $49</a>
|
||||
</div>
|
||||
|
||||
<section class="hero">
|
||||
<div class="hero-content">
|
||||
<div class="hero-breadcrumb"><a href="/index.html">Home</a> / About</div>
|
||||
<h1>Built for Developers Who Build on Chain</h1>
|
||||
<p>WalletPress is a product of Rug Munch Media LLC — a Wyoming-based crypto infrastructure company. We build tools for the sovereign developer.</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="alt">
|
||||
<div class="container reveal">
|
||||
<div class="section-header">
|
||||
<div class="section-label">Our Mission</div>
|
||||
<h2>Why WalletPress Exists</h2>
|
||||
<p>We got tired of stitching together wallet libraries, debugging chain-specific quirks, and paying per-API-call. So we built the tool we wanted.</p>
|
||||
</div>
|
||||
<div class="mission-grid">
|
||||
<div class="mission-card">
|
||||
<div class="mission-icon">🔑</div>
|
||||
<h3>Sovereign Infrastructure</h3>
|
||||
<p>Your server, your keys, your rules. No cloud dependency, no telemetry, no kill switch. You own the tool — forever.</p>
|
||||
</div>
|
||||
<div class="mission-card">
|
||||
<div class="mission-icon">💰</div>
|
||||
<h3>Fair Pricing</h3>
|
||||
<p>$49 one-time. Not per wallet, not per month. We believe developer tools should be bought, not rented. Pay once, use forever.</p>
|
||||
</div>
|
||||
<div class="mission-card">
|
||||
<div class="mission-icon">🔓</div>
|
||||
<h3>No DRM</h3>
|
||||
<p>Full source code included. No phone-home, no license validation, no activation servers. We trust developers — and we prove it.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<div class="container reveal">
|
||||
<div class="section-header">
|
||||
<div class="section-label">Trust & Transparency</div>
|
||||
<h2>What you can count on</h2>
|
||||
</div>
|
||||
<div class="trust-grid">
|
||||
<div class="trust-card">
|
||||
<div class="icon">🏛️</div>
|
||||
<div>
|
||||
<h4>Registered US Company</h4>
|
||||
<p>Rug Munch Media LLC is a legally registered Wyoming limited liability company. We operate under US law with full compliance.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="trust-card">
|
||||
<div class="icon">📜</div>
|
||||
<div>
|
||||
<h4>Full Source Code</h4>
|
||||
<p>You receive every line of code. No obfuscation, no binary blobs. Audit it, modify it, extend it — it's yours.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="trust-card">
|
||||
<div class="icon">🔄</div>
|
||||
<div>
|
||||
<h4>Lifetime Updates</h4>
|
||||
<p>All future WalletPress updates are included. New chains, new features, security patches — you get them all, forever.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="trust-card">
|
||||
<div class="icon">🛡️</div>
|
||||
<div>
|
||||
<h4>30-Day Refund</h4>
|
||||
<p>Not satisfied? Full refund within 30 days, no questions asked. We stand behind our product.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="trust-card">
|
||||
<div class="icon">🔒</div>
|
||||
<div>
|
||||
<h4>No Data Collection</h4>
|
||||
<p>WalletPress makes zero external network calls. No analytics, no usage tracking, no error reporting. Your data is yours.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="trust-card">
|
||||
<div class="icon">📡</div>
|
||||
<div>
|
||||
<h4>Offline-First</h4>
|
||||
<p>Once deployed, WalletPress runs entirely offline. No internet required after initial setup. Air-gapped deployments supported.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="alt">
|
||||
<div class="container reveal">
|
||||
<div class="team-badge">
|
||||
<h3>Rug Munch Media LLC</h3>
|
||||
<p>We're a small, focused team building crypto infrastructure tools from Phnom Penh, Cambodia. We ship fast, price fairly, and don't do corporate bullshit.</p>
|
||||
<p class="location">📍 Phnom Penh, Cambodia · Registered: Wyoming, USA · Est. 2025</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="cta-band">
|
||||
<div class="container reveal">
|
||||
<h2>Ready to stop renting your wallet infrastructure?</h2>
|
||||
<p>30 chains. Full source code. $49, forever.</p>
|
||||
<a href="/buy.html" class="btn btn-primary btn-lg">Buy WalletPress — $49</a>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<footer>
|
||||
<div class="footer-grid">
|
||||
<a href="/docs.html">Documentation</a>
|
||||
<a href="/features.html">Features</a>
|
||||
<a href="/buy.html">Pricing</a>
|
||||
<a href="/contact.html">Contact</a>
|
||||
<a href="/about.html">About</a>
|
||||
</div>
|
||||
<p class="copy">© 2026 Rug Munch Media LLC. Made in Wyoming.</p>
|
||||
</footer>
|
||||
|
||||
<script>
|
||||
const observer = new IntersectionObserver((entries) => {
|
||||
entries.forEach(e => { if(e.isIntersecting) e.target.classList.add('visible'); });
|
||||
}, { threshold: 0.1 });
|
||||
document.querySelectorAll('.reveal').forEach(el => observer.observe(el));
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
464
marketing/buy.html
Normal file
464
marketing/buy.html
Normal file
|
|
@ -0,0 +1,464 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Buy WalletPress — Checkout · $49 One-Time</title>
|
||||
<meta name="description" content="Purchase WalletPress — pay with crypto or card. Instant source code delivery. 30 chains, self-hosted, no subscriptions.">
|
||||
<meta name="robots" content="noindex">
|
||||
<link rel="icon" href="logo.svg">
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:opsz,wght@14..32,300;14..32,400;14..32,510;14..32,590;14..32,700&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet">
|
||||
<style>
|
||||
:root { --bg: #08090a; --bg2: #0c0d0f; --bg3: #121317; --bg4: #181a1f; --border: rgba(255,255,255,0.06); --border2: rgba(255,255,255,0.09); --fg: #f7f8f8; --fg2: #9ca0a8; --fg3: #5f636b; --accent: #f0a030; --accent2: #d48c1e; --accent-glow: rgba(240,160,48,0.12); --accent-glow2: rgba(240,160,48,0.2); --cyan: #22d3ee; --purple: #8b5cf6; --green: #22c55e; --red: #ef4444; --radius: 6px; --radius-lg: 12px; --radius-xl: 16px; --radius-pill: 9999px; --nav-h: 52px; }
|
||||
*,*::before,*::after{margin:0;padding:0;box-sizing:border-box}
|
||||
html{scroll-behavior:smooth;-webkit-text-size-adjust:100%}
|
||||
body{font-family:'Inter',system-ui,-apple-system,sans-serif;background:var(--bg);color:var(--fg);line-height:1.5;-webkit-font-smoothing:antialiased;overflow-x:hidden}
|
||||
::selection{background:rgba(240,160,48,0.3);color:var(--fg)}
|
||||
img,svg{display:block;max-width:100%}
|
||||
|
||||
.reveal{opacity:0;transform:translateY(24px);transition:opacity .6s ease-out,transform .6s ease-out}
|
||||
.reveal.visible{opacity:1;transform:translateY(0)}
|
||||
|
||||
nav{position:fixed;top:0;left:0;right:0;z-index:100;height:var(--nav-h);background:rgba(8,9,10,0.82);backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);border-bottom:1px solid var(--border)}
|
||||
.nav-inner{max-width:1200px;margin:0 auto;padding:0 20px;height:100%;display:flex;align-items:center;justify-content:space-between;gap:16px}
|
||||
.logo{display:flex;align-items:center;gap:8px;font-weight:700;font-size:18px;color:var(--fg);text-decoration:none;letter-spacing:-0.02em}
|
||||
.logo img{width:28px;height:28px}
|
||||
.nav-links{display:flex;align-items:center;gap:24px}
|
||||
.nav-links a{color:var(--fg2);text-decoration:none;font-size:13px;font-weight:510;transition:color .15s}
|
||||
.nav-links a:hover{color:var(--fg)}
|
||||
.nav-cta{padding:6px 16px!important;border-radius:var(--radius)!important;background:var(--accent)!important;color:#08090a!important;font-weight:590!important;font-size:13px!important}
|
||||
.nav-cta:hover{background:var(--accent2)!important}
|
||||
.hamburger{display:none;flex-direction:column;gap:4px;cursor:pointer;padding:8px;background:none;border:none;z-index:101}
|
||||
.hamburger span{display:block;width:20px;height:1.5px;background:var(--fg2);transition:.2s}
|
||||
.hamburger.open span:nth-child(1){transform:rotate(45deg) translate(4px,4px)}
|
||||
.hamburger.open span:nth-child(2){opacity:0}
|
||||
.hamburger.open span:nth-child(3){transform:rotate(-45deg) translate(4px,-4px)}
|
||||
.mobile-menu{display:none;position:fixed;top:var(--nav-h);left:0;right:0;bottom:0;background:var(--bg);z-index:99;padding:32px 20px;flex-direction:column;gap:20px}
|
||||
.mobile-menu.open{display:flex}
|
||||
.mobile-menu a{color:var(--fg2);text-decoration:none;font-size:18px;font-weight:510}
|
||||
|
||||
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;padding:12px 24px;border-radius:var(--radius);font-size:14px;font-weight:590;text-decoration:none;transition:all .2s;cursor:pointer;border:none;font-family:inherit;letter-spacing:-0.01em}
|
||||
.btn-primary{background:var(--accent);color:#08090a}
|
||||
.btn-primary:hover{background:var(--accent2);transform:translateY(-1px);box-shadow:0 8px 24px var(--accent-glow)}
|
||||
.btn-secondary{background:rgba(255,255,255,0.04);color:var(--fg);border:1px solid var(--border2)}
|
||||
.btn-secondary:hover{background:rgba(255,255,255,0.07)}
|
||||
.btn-lg{padding:14px 28px;font-size:15px}
|
||||
.btn-outline{background:transparent;color:var(--fg);border:1px solid var(--border2)}
|
||||
.btn-outline:hover{background:rgba(255,255,255,0.04);border-color:var(--accent-glow2)}
|
||||
.btn-sm{padding:8px 16px;font-size:12px}
|
||||
|
||||
section{padding:80px 20px}
|
||||
@media(min-width:768px){section{padding:100px 32px}}
|
||||
.container{max-width:1100px;margin:0 auto}
|
||||
|
||||
.hero{min-height:30vh;display:flex;align-items:center;justify-content:center;text-align:center;padding:120px 20px 40px;position:relative;overflow:hidden}
|
||||
.hero::before{content:'';position:absolute;top:-30%;left:-50%;width:200%;height:160%;background:radial-gradient(ellipse at 50% 0%,var(--accent-glow),transparent 50%);opacity:0.15;pointer-events:none}
|
||||
.hero-content{position:relative;z-index:1;max-width:600px}
|
||||
.hero h1{font-size:clamp(28px,5vw,44px);font-weight:700;line-height:1.1;letter-spacing:-0.03em;margin-bottom:12px}
|
||||
.hero p{color:var(--fg2);font-size:15px;margin:0 auto 28px;line-height:1.6;font-weight:400}
|
||||
|
||||
/* Checkout Layout */
|
||||
.checkout-grid{display:grid;grid-template-columns:1fr;gap:24px;max-width:1000px;margin:0 auto}
|
||||
@media(min-width:768px){.checkout-grid{grid-template-columns:1fr 1.2fr}}
|
||||
|
||||
.order-panel{background:var(--bg2);border:1px solid var(--border);border-radius:var(--radius-xl);padding:28px;height:fit-content;position:sticky;top:80px}
|
||||
.order-panel h3{font-size:14px;font-weight:590;text-transform:uppercase;letter-spacing:0.05em;color:var(--fg3);margin-bottom:20px}
|
||||
.order-item{display:flex;justify-content:space-between;align-items:center;padding:12px 0;border-bottom:1px solid var(--border)}
|
||||
.order-item:last-child{border-bottom:none}
|
||||
.order-item .name{font-size:14px;color:var(--fg)}
|
||||
.order-item .desc{font-size:12px;color:var(--fg3);margin-top:2px}
|
||||
.order-item .price{font-size:14px;font-weight:590;color:var(--fg)}
|
||||
.order-total{display:flex;justify-content:space-between;align-items:center;padding:16px 0;margin-top:8px;border-top:2px solid var(--border)}
|
||||
.order-total .name{font-size:16px;font-weight:700}
|
||||
.order-total .price{font-size:20px;font-weight:700;color:var(--accent)}
|
||||
|
||||
.payment-panel{background:var(--bg2);border:1px solid var(--border);border-radius:var(--radius-xl);padding:28px}
|
||||
.payment-panel h3{font-size:14px;font-weight:590;text-transform:uppercase;letter-spacing:0.05em;color:var(--fg3);margin-bottom:20px}
|
||||
|
||||
/* Payment Method Tabs */
|
||||
.pay-tabs{display:flex;gap:8px;margin-bottom:24px;border-bottom:1px solid var(--border);padding-bottom:16px}
|
||||
.pay-tab{padding:10px 20px;border-radius:var(--radius);font-size:13px;font-weight:590;color:var(--fg2);background:transparent;border:1px solid transparent;cursor:pointer;transition:all .15s;font-family:inherit}
|
||||
.pay-tab:hover{color:var(--fg)}
|
||||
.pay-tab.active{background:var(--accent-glow);color:var(--accent);border-color:var(--accent-glow2)}
|
||||
|
||||
.pay-content{display:none}
|
||||
.pay-content.active{display:block}
|
||||
|
||||
/* Card Payment */
|
||||
.card-form{display:flex;flex-direction:column;gap:16px}
|
||||
.form-row{display:grid;grid-template-columns:1fr 1fr;gap:12px}
|
||||
.form-group{display:flex;flex-direction:column;gap:6px}
|
||||
.form-group.full{grid-column:1 / -1}
|
||||
.form-group label{font-size:12px;font-weight:510;color:var(--fg2);text-transform:uppercase;letter-spacing:0.03em}
|
||||
.form-group input,.form-group select{padding:12px 14px;background:var(--bg3);border:1px solid var(--border);border-radius:var(--radius);color:var(--fg);font-family:inherit;font-size:14px;transition:all .15s}
|
||||
.form-group input:focus,.form-group select:focus{outline:none;border-color:var(--accent-glow2);box-shadow:0 0 0 3px var(--accent-glow)}
|
||||
.form-group input::placeholder{color:var(--fg3)}
|
||||
|
||||
/* Crypto Payment */
|
||||
.chain-select{display:grid;grid-template-columns:repeat(2,1fr);gap:8px;margin-bottom:20px}
|
||||
@media(min-width:640px){.chain-select{grid-template-columns:repeat(4,1fr)}}
|
||||
.chain-option{padding:14px 12px;background:var(--bg3);border:1px solid var(--border);border-radius:var(--radius);cursor:pointer;text-align:center;transition:all .15s}
|
||||
.chain-option:hover{border-color:var(--border2)}
|
||||
.chain-option.selected{border-color:var(--accent);background:rgba(240,160,48,0.08)}
|
||||
.chain-option .icon{font-size:24px;margin-bottom:6px}
|
||||
.chain-option .name{font-size:12px;font-weight:590;color:var(--fg)}
|
||||
.chain-option .symbol{font-size:11px;color:var(--fg3);margin-top:2px}
|
||||
|
||||
.qr-section{text-align:center;padding:24px;background:var(--bg3);border:1px solid var(--border);border-radius:var(--radius-lg);margin-bottom:16px}
|
||||
.qr-section .qr-wrap{background:#fff;display:inline-block;padding:12px;border-radius:var(--radius);margin-bottom:16px}
|
||||
.qr-section .qr-wrap img{display:block;width:200px;height:200px}
|
||||
.qr-section .amount{font-size:18px;font-weight:700;color:var(--accent);margin-bottom:8px}
|
||||
.qr-section .addr{display:inline-flex;align-items:center;gap:8px;background:var(--bg2);border:1px solid var(--border);border-radius:var(--radius);padding:10px 14px;margin-top:8px;cursor:pointer;transition:all .15s}
|
||||
.qr-section .addr:hover{border-color:var(--accent-glow2)}
|
||||
.qr-section .addr code{font-family:'JetBrains Mono',monospace;font-size:12px;color:var(--accent)}
|
||||
.qr-section .addr .copy-btn{font-size:10px;color:var(--fg3);text-transform:uppercase;letter-spacing:0.05em}
|
||||
|
||||
.payment-status{text-align:center;padding:20px;background:var(--bg3);border:1px solid var(--border);border-radius:var(--radius-lg)}
|
||||
.payment-status .status-icon{font-size:32px;margin-bottom:8px}
|
||||
.payment-status .status-text{font-size:14px;font-weight:590;color:var(--fg);margin-bottom:4px}
|
||||
.payment-status .status-sub{font-size:12px;color:var(--fg3)}
|
||||
|
||||
/* Email capture */
|
||||
.email-capture{margin-top:24px;padding:20px;background:var(--bg3);border:1px solid var(--border);border-radius:var(--radius-lg)}
|
||||
.email-capture p{font-size:13px;color:var(--fg2);margin-bottom:12px}
|
||||
.email-capture .form-row{display:flex;gap:8px}
|
||||
.email-capture input{flex:1;padding:12px 14px;background:var(--bg2);border:1px solid var(--border);border-radius:var(--radius);color:var(--fg);font-family:inherit;font-size:14px}
|
||||
.email-capture input:focus{outline:none;border-color:var(--accent-glow2)}
|
||||
|
||||
.guarantee{display:inline-flex;align-items:center;gap:8px;background:var(--bg3);border:1px solid var(--border);padding:10px 18px;border-radius:var(--radius-pill);font-size:12px;color:var(--fg2);font-weight:510;margin-top:20px}
|
||||
.guarantee svg{color:var(--accent)}
|
||||
|
||||
footer{border-top:1px solid var(--border);padding:40px 20px;text-align:center}
|
||||
.footer-grid{display:flex;justify-content:center;flex-wrap:wrap;gap:24px;margin-bottom:20px}
|
||||
.footer-grid a{color:var(--fg3);text-decoration:none;font-size:12px;font-weight:510;transition:color .15s}
|
||||
.footer-grid a:hover{color:var(--fg2)}
|
||||
footer .copy{color:var(--fg3);font-size:11px}
|
||||
|
||||
@media(max-width:768px){
|
||||
.nav-links{display:none}
|
||||
.hamburger{display:flex}
|
||||
.hero h1{font-size:26px}
|
||||
.form-row{grid-template-columns:1fr}
|
||||
.chain-select{grid-template-columns:repeat(2,1fr)}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<nav>
|
||||
<div class="nav-inner">
|
||||
<a href="index.html" class="logo"><img src="logo.svg" alt="WalletPress">WalletPress</a>
|
||||
<div class="nav-links">
|
||||
<a href="index.html">Home</a>
|
||||
<a href="features.html">Features</a>
|
||||
<a href="docs.html">Docs</a>
|
||||
<a href="about.html">About</a>
|
||||
<a href="buy.html" class="nav-cta">Buy — $49</a>
|
||||
</div>
|
||||
<button class="hamburger" onclick="document.getElementById('mobile-menu').classList.toggle('open');this.classList.toggle('open')" aria-label="Menu">
|
||||
<span></span><span></span><span></span>
|
||||
</button>
|
||||
</div>
|
||||
</nav>
|
||||
<div class="mobile-menu" id="mobile-menu">
|
||||
<a href="index.html">Home</a>
|
||||
<a href="features.html">Features</a>
|
||||
<a href="docs.html">Docs</a>
|
||||
<a href="about.html">About</a>
|
||||
<a href="buy.html" class="nav-cta">Buy — $49</a>
|
||||
</div>
|
||||
|
||||
<section class="hero">
|
||||
<div class="hero-content">
|
||||
<h1>Complete Your Purchase</h1>
|
||||
<p>One-time payment. Lifetime access. Self-hosted wallet generator.</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<div class="checkout-grid">
|
||||
<div class="order-panel">
|
||||
<h3>Order Summary</h3>
|
||||
<div class="order-item">
|
||||
<div>
|
||||
<div class="name">WalletPress Self-Hosted</div>
|
||||
<div class="desc">30 chains, CLI + API, encrypted vault</div>
|
||||
</div>
|
||||
<div class="price">$49.00</div>
|
||||
</div>
|
||||
<div class="order-item">
|
||||
<div>
|
||||
<div class="name">Lifetime Updates</div>
|
||||
<div class="desc">Free updates for life</div>
|
||||
</div>
|
||||
<div class="price" style="color:var(--green)">Included</div>
|
||||
</div>
|
||||
<div class="order-item">
|
||||
<div>
|
||||
<div class="name">Source Code</div>
|
||||
<div class="desc">Full Docker Compose project</div>
|
||||
</div>
|
||||
<div class="price" style="color:var(--green)">Included</div>
|
||||
</div>
|
||||
<div class="order-total">
|
||||
<span class="name">Total</span>
|
||||
<span class="price">$49.00</span>
|
||||
</div>
|
||||
<div style="margin-top:16px;padding-top:16px;border-top:1px solid var(--border)">
|
||||
<div class="guarantee" style="margin-top:0">
|
||||
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"/></svg>
|
||||
30-day money-back guarantee
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="payment-panel">
|
||||
<h3>Payment Method</h3>
|
||||
|
||||
<div class="pay-tabs">
|
||||
<button class="pay-tab active" onclick="switchTab('crypto')">Crypto</button>
|
||||
<button class="pay-tab" onclick="switchTab('card')">Card</button>
|
||||
<button class="pay-tab" onclick="switchTab('gumroad')">Gumroad</button>
|
||||
</div>
|
||||
|
||||
<!-- Crypto Payment -->
|
||||
<div id="crypto-panel" class="pay-content active">
|
||||
<p style="font-size:13px;color:var(--fg2);margin-bottom:16px">Select a chain and send exactly <strong style="color:var(--accent)" id="crypto-amount-display">$49.00 USD</strong> worth. We'll verify and deliver instantly.</p>
|
||||
|
||||
<div id="price-loading" style="text-align:center;padding:12px;color:var(--fg3);font-size:12px">Loading prices...</div>
|
||||
|
||||
<div class="chain-select" id="chain-select">
|
||||
<div class="chain-option selected" data-chain="evm" data-addr="0x1E3AC01d0fdb976179790BDD02823196A92705C9" data-symbol="ETH" onclick="selectChain(this)">
|
||||
<div class="icon">Ξ</div>
|
||||
<div class="name">Ethereum</div>
|
||||
<div class="symbol">ETH / USDC</div>
|
||||
</div>
|
||||
<div class="chain-option" data-chain="btc" data-addr="bc1qzkllckr024wqttm4px6egcwsya9tcrgghm46kq" data-symbol="BTC" onclick="selectChain(this)">
|
||||
<div class="icon">₿</div>
|
||||
<div class="name">Bitcoin</div>
|
||||
<div class="symbol">BTC</div>
|
||||
</div>
|
||||
<div class="chain-option" data-chain="sol" data-addr="G1uZFfsdxK2PuH2Em5LhRkEcptxHWe4vy5BZak67QyKv" data-symbol="SOL" onclick="selectChain(this)">
|
||||
<div class="icon">◎</div>
|
||||
<div class="name">Solana</div>
|
||||
<div class="symbol">SOL / USDC</div>
|
||||
</div>
|
||||
<div class="chain-option" data-chain="trx" data-addr="TYSWXWr24QTe3c99V9dtzhe1aZTneE261p" data-symbol="TRX" onclick="selectChain(this)">
|
||||
<div class="icon">◆</div>
|
||||
<div class="name">TRON</div>
|
||||
<div class="symbol">TRX / USDT</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="qr-section" id="qr-section">
|
||||
<div class="qr-wrap">
|
||||
<img id="qr-img" src="https://api.qrserver.com/v1/create-qr-code/?size=200x200&data=ethereum:0x1E3AC01d0fdb976179790BDD02823196A92705C9" alt="Payment QR">
|
||||
</div>
|
||||
<div class="amount" id="amount-display">Send $49.00 USD in ETH</div>
|
||||
<div class="addr" onclick="copyAddr()" id="addr-display">
|
||||
<code id="addr-code">0x1E3A...05C9</code>
|
||||
<span class="copy-btn">Copy</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="email-capture">
|
||||
<p><strong>Step 2:</strong> Enter your email so we can send your download link after confirmation.</p>
|
||||
<div class="form-row">
|
||||
<input type="email" id="crypto-email" placeholder="you@example.com">
|
||||
<button class="btn btn-primary" onclick="submitCrypto()">I've Sent Payment</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="payment-status" id="crypto-status" style="display:none">
|
||||
<div class="status-icon">⏳</div>
|
||||
<div class="status-text">Payment Pending</div>
|
||||
<div class="status-sub">We'll email your download link once confirmed</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Card Payment -->
|
||||
<div id="card-panel" class="pay-content">
|
||||
<p style="font-size:13px;color:var(--fg2);margin-bottom:16px">Secure payment via Stripe. Your card details are never stored on our servers.</p>
|
||||
<form class="card-form" onsubmit="event.preventDefault();submitCard()">
|
||||
<div class="form-group full">
|
||||
<label>Email</label>
|
||||
<input type="email" placeholder="you@example.com" required>
|
||||
</div>
|
||||
<div class="form-group full">
|
||||
<label>Card Number</label>
|
||||
<input type="text" placeholder="4242 4242 4242 4242" maxlength="19" required>
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<div class="form-group">
|
||||
<label>Expiry</label>
|
||||
<input type="text" placeholder="MM/YY" maxlength="5" required>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label>CVC</label>
|
||||
<input type="text" placeholder="123" maxlength="4" required>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group full">
|
||||
<label>Name on Card</label>
|
||||
<input type="text" placeholder="John Doe" required>
|
||||
</div>
|
||||
<button type="submit" class="btn btn-primary btn-lg" style="width:100%">Pay $49.00</button>
|
||||
</form>
|
||||
<div class="payment-status" id="card-status" style="display:none;margin-top:16px">
|
||||
<div class="status-icon">✓</div>
|
||||
<div class="status-text">Payment Successful</div>
|
||||
<div class="status-sub">Check your email for the download link</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Gumroad Payment -->
|
||||
<div id="gumroad-panel" class="pay-content">
|
||||
<p style="font-size:13px;color:var(--fg2);margin-bottom:16px">Pay via Gumroad with PayPal, Apple Pay, Google Pay, or crypto.</p>
|
||||
<div style="text-align:center;padding:32px;background:var(--bg3);border:1px solid var(--border);border-radius:var(--radius-lg)">
|
||||
<div style="font-size:48px;margin-bottom:16px">🛒</div>
|
||||
<p style="font-size:14px;color:var(--fg2);margin-bottom:20px">You'll be redirected to Gumroad to complete your purchase securely.</p>
|
||||
<a href="https://cryptorugmuncher.gumroad.com/l/walletpress" class="btn btn-primary btn-lg" target="_blank">Continue to Gumroad</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<footer>
|
||||
<div class="footer-grid">
|
||||
<a href="docs.html">Documentation</a>
|
||||
<a href="features.html">Features</a>
|
||||
<a href="buy.html">Pricing</a>
|
||||
<a href="about.html">About</a>
|
||||
<a href="contact.html">Contact</a>
|
||||
</div>
|
||||
<p class="copy">© 2026 Rug Munch Media LLC. Made in Wyoming.</p>
|
||||
</footer>
|
||||
|
||||
<script>
|
||||
// Tab switching
|
||||
function switchTab(tab) {
|
||||
document.querySelectorAll('.pay-tab').forEach(t => t.classList.remove('active'));
|
||||
document.querySelectorAll('.pay-content').forEach(c => c.classList.remove('active'));
|
||||
event.target.classList.add('active');
|
||||
document.getElementById(tab + '-panel').classList.add('active');
|
||||
}
|
||||
|
||||
// Chain selection
|
||||
let selectedChain = 'evm';
|
||||
let selectedAddr = '0x1E3AC01d0fdb976179790BDD02823196A92705C9';
|
||||
let selectedSymbol = 'ETH';
|
||||
|
||||
const chainData = {
|
||||
evm: { addr: '0x1E3AC01d0fdb976179790BDD02823196A92705C9', symbol: 'ETH', fullAddr: '0x1E3AC01d0fdb976179790BDD02823196A92705C9', qrPrefix: 'ethereum:' },
|
||||
btc: { addr: 'bc1qzkllckr024wqttm4px6egcwsya9tcrgghm46kq', symbol: 'BTC', fullAddr: 'bc1qzkllckr024wqttm4px6egcwsya9tcrgghm46kq', qrPrefix: 'bitcoin:' },
|
||||
sol: { addr: 'G1uZFfsdxK2PuH2Em5LhRkEcptxHWe4vy5BZak67QyKv', symbol: 'SOL', fullAddr: 'G1uZFfsdxK2PuH2Em5LhRkEcptxHWe4vy5BZak67QyKv', qrPrefix: 'solana:' },
|
||||
trx: { addr: 'TYSWXWr24QTe3c99V9dtzhe1aZTneE261p', symbol: 'TRX', fullAddr: 'TYSWXWr24QTe3c99V9dtzhe1aZTneE261p', qrPrefix: 'tron:' }
|
||||
};
|
||||
|
||||
function selectChain(el) {
|
||||
document.querySelectorAll('.chain-option').forEach(c => c.classList.remove('selected'));
|
||||
el.classList.add('selected');
|
||||
selectedChain = el.dataset.chain;
|
||||
selectedAddr = el.dataset.addr;
|
||||
selectedSymbol = el.dataset.symbol;
|
||||
updateQR();
|
||||
}
|
||||
|
||||
function updateQR() {
|
||||
const data = chainData[selectedChain];
|
||||
const qrUrl = 'https://api.qrserver.com/v1/create-qr-code/?size=200x200&data=' + encodeURIComponent(data.qrPrefix + data.fullAddr);
|
||||
document.getElementById('qr-img').src = qrUrl;
|
||||
document.getElementById('amount-display').textContent = 'Send $49.00 USD in ' + data.symbol;
|
||||
document.getElementById('addr-code').textContent = data.addr.substring(0, 6) + '...' + data.addr.substring(data.addr.length - 4);
|
||||
document.getElementById('addr-display').dataset.addr = data.fullAddr;
|
||||
}
|
||||
|
||||
function copyAddr() {
|
||||
const addr = document.getElementById('addr-display').dataset.addr;
|
||||
navigator.clipboard.writeText(addr).then(() => {
|
||||
const btn = document.querySelector('#addr-display .copy-btn');
|
||||
btn.textContent = 'Copied!';
|
||||
setTimeout(() => btn.textContent = 'Copy', 2000);
|
||||
}).catch(() => {
|
||||
const ta = document.createElement('textarea');
|
||||
ta.value = addr;
|
||||
document.body.appendChild(ta);
|
||||
ta.select();
|
||||
document.execCommand('copy');
|
||||
document.body.removeChild(ta);
|
||||
document.querySelector('#addr-display .copy-btn').textContent = 'Copied!';
|
||||
setTimeout(() => document.querySelector('#addr-display .copy-btn').textContent = 'Copy', 2000);
|
||||
});
|
||||
}
|
||||
|
||||
function submitCrypto() {
|
||||
const email = document.getElementById('crypto-email').value;
|
||||
if (!email || !email.includes('@')) {
|
||||
alert('Please enter a valid email address');
|
||||
return;
|
||||
}
|
||||
document.getElementById('crypto-status').style.display = 'block';
|
||||
document.getElementById('crypto-status').querySelector('.status-text').textContent = 'Payment Pending';
|
||||
document.getElementById('crypto-status').querySelector('.status-sub').textContent = 'We\'ll email ' + email + ' once your ' + selectedSymbol + ' payment is confirmed';
|
||||
// In production: send to backend webhook
|
||||
}
|
||||
|
||||
function submitCard() {
|
||||
document.getElementById('card-status').style.display = 'block';
|
||||
// In production: Stripe integration
|
||||
}
|
||||
|
||||
// Price fetching
|
||||
let currentPrices = {};
|
||||
const PRODUCT = 'walletpress'; // or 'pry' for Pry site
|
||||
|
||||
async function fetchPrices() {
|
||||
try {
|
||||
const resp = await fetch('/api/prices');
|
||||
if (!resp.ok) throw new Error('Price fetch failed');
|
||||
currentPrices = await resp.json();
|
||||
document.getElementById('price-loading').style.display = 'none';
|
||||
updateAmountDisplay();
|
||||
} catch (e) {
|
||||
document.getElementById('price-loading').textContent = 'Using cached prices';
|
||||
}
|
||||
}
|
||||
|
||||
function updateAmountDisplay() {
|
||||
const cgId = selectedChain === 'evm' ? 'ethereum' : selectedChain;
|
||||
const priceData = currentPrices[cgId];
|
||||
if (!priceData) return;
|
||||
|
||||
const usdValue = PRODUCT === 'walletpress' ? 49.0 : 29.0;
|
||||
const cryptoAmount = (usdValue / priceData.usd).toFixed(6);
|
||||
const symbol = priceData.symbol;
|
||||
|
||||
document.getElementById('amount-display').textContent = `Send ${cryptoAmount} ${symbol} (~$${usdValue} USD)`;
|
||||
document.getElementById('crypto-amount-display').textContent = `${cryptoAmount} ${symbol}`;
|
||||
}
|
||||
|
||||
// Modified selectChain to update amounts
|
||||
function selectChain(el) {
|
||||
document.querySelectorAll('.chain-option').forEach(c => c.classList.remove('selected'));
|
||||
el.classList.add('selected');
|
||||
selectedChain = el.dataset.chain;
|
||||
selectedAddr = el.dataset.addr;
|
||||
selectedSymbol = el.dataset.symbol;
|
||||
updateQR();
|
||||
updateAmountDisplay();
|
||||
}
|
||||
|
||||
// Fetch prices on load
|
||||
fetchPrices();
|
||||
|
||||
// Reveal animation
|
||||
const observer = new IntersectionObserver((entries) => {
|
||||
entries.forEach(e => { if(e.isIntersecting) e.target.classList.add('visible'); });
|
||||
}, { threshold: 0.1 });
|
||||
document.querySelectorAll('.reveal').forEach(el => observer.observe(el));
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
204
marketing/contact.html
Normal file
204
marketing/contact.html
Normal file
|
|
@ -0,0 +1,204 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Contact — WalletPress · Get in Touch</title>
|
||||
<meta name="description" content="Contact the WalletPress team. Support, sales, and general inquiries. We respond within hours.">
|
||||
<meta name="robots" content="noindex">
|
||||
<link rel="icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><text y='.9em' font-size='90'>🔐</text></svg>">
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:opsz,wght@14..32,300;14..32,400;14..32,510;14..32,590;14..32,700&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet">
|
||||
<style>
|
||||
:root {
|
||||
--bg:#08090a;--bg2:#0c0d0f;--bg3:#121317;--bg4:#181a1f;
|
||||
--border:rgba(255,255,255,0.06);--border2:rgba(255,255,255,0.09);
|
||||
--fg:#f7f8f8;--fg2:#9ca0a8;--fg3:#5f636b;
|
||||
--accent:#f0a030;--accent2:#d48c1e;--accent-glow:rgba(240,160,48,0.12);--accent-glow2:rgba(240,160,48,0.2);
|
||||
--cyan:#22d3ee;--green:#22c55e;--purple:#8b5cf6;
|
||||
--radius:6px;--radius-lg:12px;--radius-xl:16px;--radius-pill:9999px;--nav-h:52px;
|
||||
}
|
||||
*,*::before,*::after{margin:0;padding:0;box-sizing:border-box}
|
||||
html{scroll-behavior:smooth;-webkit-text-size-adjust:100%}
|
||||
body{font-family:'Inter',system-ui,-apple-system,sans-serif;background:var(--bg);color:var(--fg);line-height:1.5;-webkit-font-smoothing:antialiased;font-feature-settings:'cv01','ss03';overflow-x:hidden}
|
||||
::selection{background:rgba(240,160,48,0.3);color:var(--fg)}
|
||||
img{display:block;max-width:100%}
|
||||
.reveal{opacity:0;transform:translateY(24px);transition:opacity .6s ease-out,transform .6s ease-out}
|
||||
.reveal.visible{opacity:1;transform:translateY(0)}
|
||||
|
||||
/* NAV */
|
||||
nav{position:fixed;top:0;left:0;right:0;z-index:100;height:var(--nav-h);background:rgba(8,9,10,0.82);backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);border-bottom:1px solid var(--border)}
|
||||
.nav-inner{max-width:1200px;margin:0 auto;padding:0 20px;height:100%;display:flex;align-items:center;justify-content:space-between;gap:16px}
|
||||
.logo{display:flex;align-items:center;gap:8px;font-weight:700;font-size:18px;color:var(--fg);text-decoration:none;letter-spacing:-0.02em}
|
||||
.logo-dot{width:8px;height:8px;border-radius:50%;background:var(--accent)}
|
||||
.nav-links{display:flex;align-items:center;gap:24px}
|
||||
.nav-links a{color:var(--fg2);text-decoration:none;font-size:13px;font-weight:510;transition:color .15s}
|
||||
.nav-links a:hover{color:var(--fg)}
|
||||
.nav-cta{padding:6px 16px!important;border-radius:var(--radius)!important;background:var(--accent)!important;color:#08090a!important;font-weight:590!important;font-size:13px!important}
|
||||
.nav-cta:hover{background:var(--accent2)!important;color:#08090a!important}
|
||||
.hamburger{display:none;flex-direction:column;gap:4px;cursor:pointer;padding:8px;background:none;border:none;z-index:101}
|
||||
.hamburger span{display:block;width:20px;height:1.5px;background:var(--fg2);transition:.2s}
|
||||
.hamburger.open span:nth-child(1){transform:rotate(45deg) translate(4px,4px)}
|
||||
.hamburger.open span:nth-child(2){opacity:0}
|
||||
.hamburger.open span:nth-child(3){transform:rotate(-45deg) translate(4px,-4px)}
|
||||
.mobile-menu{display:none;position:fixed;top:var(--nav-h);left:0;right:0;bottom:0;background:var(--bg);z-index:99;padding:32px 20px;flex-direction:column;gap:20px}
|
||||
.mobile-menu.open{display:flex}
|
||||
.mobile-menu a{color:var(--fg2);text-decoration:none;font-size:18px;font-weight:510}
|
||||
.mobile-menu .nav-cta{display:inline-block;text-align:center;margin-top:8px}
|
||||
|
||||
/* BUTTONS */
|
||||
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;padding:12px 24px;border-radius:var(--radius);font-size:14px;font-weight:590;text-decoration:none;transition:all .2s;cursor:pointer;border:none;font-family:inherit;letter-spacing:-0.01em}
|
||||
.btn-primary{background:var(--accent);color:#08090a}
|
||||
.btn-primary:hover{background:var(--accent2);transform:translateY(-1px);box-shadow:0 8px 24px var(--accent-glow)}
|
||||
.btn-secondary{background:rgba(255,255,255,0.04);color:var(--fg);border:1px solid var(--border2)}
|
||||
.btn-secondary:hover{background:rgba(255,255,255,0.07)}
|
||||
.btn-lg{padding:14px 28px;font-size:15px}
|
||||
|
||||
section{padding:80px 20px}
|
||||
@media(min-width:768px){section{padding:100px 32px}}
|
||||
.container{max-width:800px;margin:0 auto}
|
||||
|
||||
.hero{min-height:30vh;display:flex;align-items:center;justify-content:center;text-align:center;padding:120px 20px 40px;position:relative;overflow:hidden}
|
||||
.hero::before{content:'';position:absolute;top:-30%;left:-50%;width:200%;height:160%;background:radial-gradient(ellipse at 50% 0%,var(--accent-glow),transparent 50%);opacity:0.15;pointer-events:none}
|
||||
.hero-content{position:relative;z-index:1;max-width:550px}
|
||||
.hero-breadcrumb{font-size:12px;color:var(--fg3);margin-bottom:16px}
|
||||
.hero-breadcrumb a{color:var(--fg3);text-decoration:none;transition:color .15s}
|
||||
.hero-breadcrumb a:hover{color:var(--fg2)}
|
||||
.hero h1{font-size:clamp(26px,5vw,40px);font-weight:700;line-height:1.1;letter-spacing:-0.03em;margin-bottom:12px}
|
||||
.hero p{color:var(--fg2);font-size:15px;margin:0 auto;line-height:1.6}
|
||||
|
||||
/* CONTACT CARDS */
|
||||
.contact-grid{display:grid;grid-template-columns:1fr;gap:16px}
|
||||
@media(min-width:640px){.contact-grid{grid-template-columns:repeat(3,1fr)}}
|
||||
.contact-card{background:var(--bg2);border:1px solid var(--border);border-radius:var(--radius-xl);padding:32px 28px;text-align:center;transition:all .25s}
|
||||
.contact-card:hover{border-color:var(--border2);transform:translateY(-2px)}
|
||||
.contact-icon{font-size:36px;margin-bottom:16px}
|
||||
.contact-card h3{font-size:15px;font-weight:590;margin-bottom:8px}
|
||||
.contact-card p{font-size:13px;color:var(--fg2);line-height:1.6;margin-bottom:12px}
|
||||
.contact-card a{color:var(--accent);text-decoration:none;font-family:'JetBrains Mono',monospace;font-size:13px;transition:color .15s}
|
||||
.contact-card a:hover{text-decoration:underline}
|
||||
.contact-card .response{font-size:11px;color:var(--fg3);margin-top:8px}
|
||||
|
||||
/* RESPONSE TIMES */
|
||||
.info-box{max-width:600px;margin:40px auto 0;background:var(--bg2);border:1px solid var(--border);border-radius:var(--radius-xl);padding:28px 32px}
|
||||
.info-box h3{font-size:14px;font-weight:590;margin-bottom:12px;text-align:center}
|
||||
.time-row{display:flex;justify-content:space-between;align-items:center;padding:10px 0;border-bottom:1px solid var(--border);font-size:13px}
|
||||
.time-row:last-child{border-bottom:none}
|
||||
.time-row .label{color:var(--fg2)}
|
||||
.time-row .val{color:var(--fg);font-weight:510}
|
||||
|
||||
/* FOOTER */
|
||||
footer{border-top:1px solid var(--border);padding:40px 20px;text-align:center}
|
||||
.footer-grid{display:flex;justify-content:center;flex-wrap:wrap;gap:24px;margin-bottom:20px}
|
||||
.footer-grid a{color:var(--fg3);text-decoration:none;font-size:12px;font-weight:510;transition:color .15s}
|
||||
.footer-grid a:hover{color:var(--fg2)}
|
||||
footer .copy{color:var(--fg3);font-size:11px}
|
||||
|
||||
@media(max-width:768px){
|
||||
.nav-links{display:none}
|
||||
.hamburger{display:flex}
|
||||
.hero h1{font-size:26px}
|
||||
section{padding:60px 16px}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<nav>
|
||||
<div class="nav-inner">
|
||||
<a href="/index.html" class="logo"><span class="logo-dot"></span>WalletPress</a>
|
||||
<div class="nav-links">
|
||||
<a href="/index.html">Home</a>
|
||||
<a href="/features.html">Features</a>
|
||||
<a href="/docs.html">Docs</a>
|
||||
<a href="/about.html">About</a>
|
||||
<a href="/buy.html" class="nav-cta">Buy — $49</a>
|
||||
</div>
|
||||
<button class="hamburger" onclick="document.getElementById('mobile-menu').classList.toggle('open');this.classList.toggle('open')" aria-label="Menu">
|
||||
<span></span><span></span><span></span>
|
||||
</button>
|
||||
</div>
|
||||
</nav>
|
||||
<div class="mobile-menu" id="mobile-menu">
|
||||
<a href="/index.html">Home</a>
|
||||
<a href="/features.html">Features</a>
|
||||
<a href="/docs.html">Docs</a>
|
||||
<a href="/about.html">About</a>
|
||||
<a href="/buy.html" class="nav-cta">Buy — $49</a>
|
||||
</div>
|
||||
|
||||
<section class="hero">
|
||||
<div class="hero-content">
|
||||
<div class="hero-breadcrumb"><a href="/index.html">Home</a> / Contact</div>
|
||||
<h1>Get in Touch</h1>
|
||||
<p>Questions, support, custom deployments, or partnership inquiries. We respond fast.</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section style="padding-top:0">
|
||||
<div class="container reveal">
|
||||
<div class="contact-grid">
|
||||
<div class="contact-card">
|
||||
<div class="contact-icon">🛟</div>
|
||||
<h3>Support</h3>
|
||||
<p>Technical issues, deployment help, bug reports.</p>
|
||||
<a href="mailto:support@walletpress.cc">support@walletpress.cc</a>
|
||||
<div class="response">Typically < 4 hours</div>
|
||||
</div>
|
||||
<div class="contact-card">
|
||||
<div class="contact-icon">💳</div>
|
||||
<h3>Sales & Payments</h3>
|
||||
<p>Purchase questions, crypto payment confirmation, invoices.</p>
|
||||
<a href="mailto:pay@walletpress.cc">pay@walletpress.cc</a>
|
||||
<div class="response">Typically < 1 hour</div>
|
||||
</div>
|
||||
<div class="contact-card">
|
||||
<div class="contact-icon">🤝</div>
|
||||
<h3>Partnerships</h3>
|
||||
<p>White-label, enterprise, custom chains, integrations.</p>
|
||||
<a href="mailto:sales@walletpress.cc">sales@walletpress.cc</a>
|
||||
<div class="response">Typically < 24 hours</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="info-box">
|
||||
<h3>Expected Response Times</h3>
|
||||
<div class="time-row">
|
||||
<span class="label">Crypto payment confirmation</span>
|
||||
<span class="val">1–3 minutes</span>
|
||||
</div>
|
||||
<div class="time-row">
|
||||
<span class="label">Support email response</span>
|
||||
<span class="val">< 4 hours</span>
|
||||
</div>
|
||||
<div class="time-row">
|
||||
<span class="label">Sales / enterprise inquiry</span>
|
||||
<span class="val">< 24 hours</span>
|
||||
</div>
|
||||
<div class="time-row">
|
||||
<span class="label">Refund processing</span>
|
||||
<span class="val">< 48 hours</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<footer>
|
||||
<div class="footer-grid">
|
||||
<a href="/docs.html">Documentation</a>
|
||||
<a href="/features.html">Features</a>
|
||||
<a href="/buy.html">Pricing</a>
|
||||
<a href="/contact.html">Contact</a>
|
||||
<a href="/about.html">About</a>
|
||||
</div>
|
||||
<p class="copy">© 2026 Rug Munch Media LLC. Made in Wyoming.</p>
|
||||
</footer>
|
||||
|
||||
<script>
|
||||
const observer = new IntersectionObserver((entries) => {
|
||||
entries.forEach(e => { if(e.isIntersecting) e.target.classList.add('visible'); });
|
||||
}, { threshold: 0.1 });
|
||||
document.querySelectorAll('.reveal').forEach(el => observer.observe(el));
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
615
marketing/docs.html
Normal file
615
marketing/docs.html
Normal file
|
|
@ -0,0 +1,615 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Documentation — WalletPress · 30-Chain Wallet Generator</title>
|
||||
<meta name="description" content="Complete WalletPress documentation — quickstart, CLI reference, REST API reference (86 endpoints), deployment guide, security model, architecture.">
|
||||
<meta name="robots" content="noindex">
|
||||
<link rel="icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><text y='.9em' font-size='90'>🔐</text></svg>">
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:opsz,wght@14..32,400;14..32,510;14..32,590;14..32,700&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet">
|
||||
<style>
|
||||
:root {
|
||||
--bg:#08090a;--bg2:#0c0d0f;--bg3:#121317;--bg4:#181a1f;
|
||||
--border:rgba(255,255,255,0.06);--border2:rgba(255,255,255,0.09);
|
||||
--fg:#f7f8f8;--fg2:#9ca0a8;--fg3:#5f636b;
|
||||
--accent:#f0a030;--accent2:#d48c1e;--accent-glow:rgba(240,160,48,0.12);--accent-glow2:rgba(240,160,48,0.2);
|
||||
--cyan:#22d3ee;--purple:#8b5cf6;--green:#22c55e;
|
||||
--radius:6px;--radius-lg:12px;--radius-xl:16px;--nav-h:52px;--side-w:250px;
|
||||
}
|
||||
*{margin:0;padding:0;box-sizing:border-box}
|
||||
html{scroll-behavior:smooth;scroll-padding-top:70px}
|
||||
body{font-family:'Inter',system-ui,-apple-system,sans-serif;background:var(--bg);color:var(--fg);line-height:1.6;-webkit-font-smoothing:antialiased;font-feature-settings:'cv01','ss03'}
|
||||
::selection{background:rgba(240,160,48,0.3);color:var(--fg)}
|
||||
|
||||
nav{position:fixed;top:0;left:0;right:0;z-index:100;height:var(--nav-h);background:rgba(8,9,10,0.85);backdrop-filter:blur(20px);border-bottom:1px solid var(--border)}
|
||||
.nav-inner{max-width:1300px;margin:0 auto;padding:0 20px;height:100%;display:flex;align-items:center;justify-content:space-between}
|
||||
.logo{display:flex;align-items:center;gap:8px;font-weight:700;font-size:16px;color:var(--fg);text-decoration:none;letter-spacing:-0.02em}
|
||||
.logo-dot{width:8px;height:8px;border-radius:50%;background:var(--accent)}
|
||||
.nav-links{display:flex;align-items:center;gap:20px}
|
||||
.nav-links a{color:var(--fg2);text-decoration:none;font-size:12px;font-weight:510;transition:color .15s}
|
||||
.nav-links a:hover{color:var(--fg)}
|
||||
.nav-links .active{color:var(--accent)}
|
||||
.nav-cta{padding:5px 14px!important;border-radius:var(--radius)!important;background:var(--accent)!important;color:#08090a!important;font-weight:590!important;font-size:12px!important}
|
||||
.nav-cta:hover{background:var(--accent2)!important;color:#08090a!important}
|
||||
.pdf-btn{display:inline-flex;align-items:center;gap:6px;padding:7px 14px;border-radius:var(--radius);font-size:12px;font-weight:590;color:var(--accent);background:var(--accent-glow);border:1px solid var(--accent-glow2);text-decoration:none;transition:all .15s}
|
||||
.pdf-btn:hover{background:var(--accent);color:var(--bg)}
|
||||
|
||||
.layout{display:flex;padding-top:var(--nav-h);min-height:100vh}
|
||||
.sidebar{width:var(--side-w);flex-shrink:0;position:fixed;top:var(--nav-h);bottom:0;overflow-y:auto;padding:24px 16px;border-right:1px solid var(--border);background:var(--bg);scrollbar-width:thin;scrollbar-color:var(--border) transparent}
|
||||
.sidebar::-webkit-scrollbar{width:4px}
|
||||
.sidebar::-webkit-scrollbar-thumb{background:var(--border);border-radius:4px}
|
||||
.sidebar h3{font-size:10px;text-transform:uppercase;letter-spacing:0.08em;color:var(--fg3);margin:20px 0 10px;font-weight:590}
|
||||
.sidebar h3:first-child{margin-top:0}
|
||||
.sidebar a{display:block;padding:5px 10px;border-radius:var(--radius);color:var(--fg2);text-decoration:none;font-size:12px;font-weight:510;margin-bottom:2px;transition:all .12s}
|
||||
.sidebar a:hover{color:var(--fg);background:var(--bg3)}
|
||||
.main{margin-left:var(--side-w);padding:32px 40px;max-width:900px;width:100%}
|
||||
|
||||
/* Doc header with PDF CTA */
|
||||
.doc-header{display:flex;align-items:flex-start;justify-content:space-between;gap:20px;margin-bottom:32px;flex-wrap:wrap}
|
||||
.doc-header h1{font-size:30px;font-weight:700;letter-spacing:-0.02em;flex:1;min-width:200px}
|
||||
.doc-header .pdf-download{flex-shrink:0}
|
||||
.doc-header .pdf-download .pdf-btn-lg{padding:12px 20px;font-size:14px;gap:8px}
|
||||
.doc-header p{color:var(--fg2);font-size:14px;margin-top:4px}
|
||||
|
||||
.main h2{font-size:22px;font-weight:590;margin:56px 0 16px;letter-spacing:-0.01em;padding-top:20px;border-top:1px solid var(--border)}
|
||||
.main h2:first-of-type{border-top:none;margin-top:0;padding-top:0}
|
||||
.main h3{font-size:15px;font-weight:590;margin:28px 0 10px;color:var(--accent);letter-spacing:-0.01em}
|
||||
.main h4{font-size:13px;font-weight:590;margin:20px 0 8px;color:var(--fg)}
|
||||
.main p,.main li{font-size:13px;color:var(--fg2);line-height:1.7}
|
||||
.main ul,.main ol{margin:8px 0 16px 20px}
|
||||
.main a{color:var(--accent);text-decoration:none}
|
||||
.main a:hover{text-decoration:underline}
|
||||
.main code{background:var(--bg3);padding:2px 6px;border-radius:3px;font-family:'JetBrains Mono',monospace;font-size:11px;color:var(--accent)}
|
||||
.main strong{color:var(--fg);font-weight:590}
|
||||
|
||||
/* ENDPOINT CARDS */
|
||||
.endpoint{background:var(--bg2);border:1px solid var(--border);border-radius:var(--radius-lg);margin-bottom:16px;overflow:hidden;transition:border-color .15s}
|
||||
.endpoint:hover{border-color:var(--border2)}
|
||||
.ep-header{display:flex;align-items:center;gap:10px;padding:12px 18px;background:var(--bg3);border-bottom:1px solid var(--border)}
|
||||
.ep-method{font-size:10px;font-weight:700;text-transform:uppercase;padding:3px 8px;border-radius:var(--radius);letter-spacing:0.03em;font-family:'JetBrains Mono',monospace}
|
||||
.ep-method.post{background:rgba(59,130,246,0.15);color:#60a5fa}
|
||||
.ep-method.get{background:rgba(34,197,94,0.15);color:#4ade80}
|
||||
.ep-method.put{background:rgba(245,158,11,0.15);color:#fbbf24}
|
||||
.ep-method.delete{background:rgba(239,68,68,0.15);color:#f87171}
|
||||
.ep-path{font-family:'JetBrains Mono',monospace;font-size:12.5px;color:var(--fg);font-weight:500}
|
||||
.ep-desc{margin-left:auto;font-size:11px;color:var(--fg3);font-weight:510;white-space:nowrap}
|
||||
.ep-body{padding:16px 18px}
|
||||
.ep-body p{font-size:12px;color:var(--fg2);margin-bottom:12px}
|
||||
.ep-body p:last-child{margin-bottom:0}
|
||||
|
||||
/* CODE BLOCKS */
|
||||
pre{background:var(--bg);border:1px solid var(--border);border-radius:var(--radius);padding:16px;overflow-x:auto;font-family:'JetBrains Mono',monospace;font-size:12px;line-height:1.8;color:var(--fg2);margin-bottom:10px}
|
||||
pre .kw{color:#ff79c6}
|
||||
pre .s{color:#f1fa8c}
|
||||
pre .cm{color:var(--fg3)}
|
||||
pre .fn{color:#50fa7b}
|
||||
pre .v{color:var(--accent)}
|
||||
pre .n{color:#bd93f9}
|
||||
pre .c{color:var(--cyan)}
|
||||
pre .hl{color:var(--accent);font-weight:500}
|
||||
|
||||
.table-wrap{overflow-x:auto;margin:10px 0 20px}
|
||||
table{width:100%;border-collapse:collapse;font-size:12px;min-width:400px}
|
||||
th,td{padding:8px 12px;text-align:left;border-bottom:1px solid var(--border)}
|
||||
th{color:var(--fg3);font-weight:590;font-size:10px;text-transform:uppercase;letter-spacing:0.05em}
|
||||
td{color:var(--fg2)}
|
||||
td code{background:var(--bg3);padding:2px 6px;border-radius:3px;font-family:'JetBrains Mono',monospace;font-size:11px;color:var(--accent)}
|
||||
|
||||
.chain-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:4px;margin:16px 0}
|
||||
.chain-tag{font-size:11px;color:var(--fg2);padding:6px 10px;background:var(--bg3);border-radius:var(--radius);font-weight:510}
|
||||
|
||||
/* Callout */
|
||||
.callout{padding:16px 20px;border-radius:var(--radius-lg);margin:16px 0;font-size:13px;line-height:1.6}
|
||||
.callout.info{background:rgba(59,130,246,0.06);border:1px solid rgba(59,130,246,0.15);color:var(--fg2)}
|
||||
.callout.warn{background:rgba(245,158,11,0.06);border:1px solid rgba(245,158,11,0.15);color:var(--fg2)}
|
||||
.callout.info strong{color:#60a5fa}
|
||||
.callout.warn strong{color:#fbbf24}
|
||||
|
||||
/* Bottom download banner */
|
||||
.download-banner{background:var(--bg2);border:1px solid var(--border);border-radius:var(--radius-xl);padding:28px 32px;text-align:center;margin:48px 0 24px}
|
||||
.download-banner h3{font-size:16px;color:var(--fg);margin-bottom:6px}
|
||||
.download-banner p{font-size:13px;color:var(--fg2);margin-bottom:16px}
|
||||
|
||||
@media(max-width:900px){.sidebar{display:none}.main{margin-left:0;padding:24px 20px}.doc-header{flex-direction:column}}
|
||||
|
||||
/* ===== PRINT / PDF STYLES ===== */
|
||||
@media print {
|
||||
@page {
|
||||
size: A4;
|
||||
margin: 22mm 20mm 25mm 20mm;
|
||||
@bottom-center {
|
||||
content: "WalletPress Documentation v1.0 — Page " counter(page) " of " counter(pages);
|
||||
font-family: 'Inter', sans-serif;
|
||||
font-size: 8pt;
|
||||
color: #888;
|
||||
}
|
||||
@top-right {
|
||||
content: "WalletPress Docs";
|
||||
font-family: 'Inter', sans-serif;
|
||||
font-size: 8pt;
|
||||
color: #aaa;
|
||||
font-weight: 600;
|
||||
}
|
||||
}
|
||||
@page :first {
|
||||
@top-right { content: none; }
|
||||
@bottom-center { content: none; }
|
||||
}
|
||||
|
||||
:root {
|
||||
--bg: #fff; --bg2: #fafafa; --bg3: #f5f5f5; --bg4: #eee;
|
||||
--border: #ddd; --border2: #ccc;
|
||||
--fg: #111; --fg2: #444; --fg3: #777;
|
||||
--accent: #d48c1e; --accent2: #b87314;
|
||||
--accent-glow: rgba(212,140,30,0.08); --accent-glow2: rgba(212,140,30,0.15);
|
||||
--cyan: #0891b2; --purple: #7c3aed; --green: #16a34a;
|
||||
}
|
||||
|
||||
body { font-size: 10pt; line-height: 1.55; color: #222; background: #fff; }
|
||||
nav, .sidebar, .pdf-download, .download-banner, .pdf-btn, footer, .doc-header a { display: none !important; }
|
||||
.layout { display: block; padding-top: 0; }
|
||||
.main { margin-left: 0; padding: 0; max-width: 100%; }
|
||||
|
||||
/* Cover page styling */
|
||||
.doc-header { margin-bottom: 40px; text-align: left; border-bottom: 3px solid #d48c1e; padding-bottom: 24px; }
|
||||
.doc-header h1 { font-size: 26pt; font-weight: 700; color: #111; margin-bottom: 8px; letter-spacing: -0.02em; }
|
||||
.doc-header p { font-size: 11pt; color: #555; }
|
||||
|
||||
h2 { font-size: 16pt; font-weight: 700; color: #111; margin: 36pt 0 12pt; padding-top: 18pt; border-top: 1.5px solid #ddd; page-break-after: avoid; }
|
||||
h2:first-of-type { border-top: none; padding-top: 0; margin-top: 0; }
|
||||
h3 { font-size: 12pt; font-weight: 600; color: #d48c1e; margin: 20pt 0 8pt; page-break-after: avoid; }
|
||||
h4 { font-size: 10.5pt; font-weight: 600; color: #333; margin: 14pt 0 6pt; }
|
||||
p, li { font-size: 9.5pt; color: #333; line-height: 1.6; }
|
||||
a { color: #d48c1e; text-decoration: none; }
|
||||
|
||||
/* Code blocks - light theme */
|
||||
pre {
|
||||
background: #f8f8f8; border: 1px solid #e0e0e0; border-radius: 4px;
|
||||
padding: 10pt 12pt; font-size: 8pt; line-height: 1.55; color: #333;
|
||||
page-break-inside: avoid; white-space: pre-wrap; word-break: break-all;
|
||||
font-family: 'JetBrains Mono', 'Courier New', monospace;
|
||||
}
|
||||
pre .cm { color: #888; }
|
||||
pre .s { color: #b87314; }
|
||||
pre .kw { color: #7c3aed; }
|
||||
pre .fn { color: #0891b2; }
|
||||
pre .v { color: #d48c1e; }
|
||||
pre .n { color: #7c3aed; }
|
||||
pre .c { color: #0891b2; }
|
||||
code { background: #f0f0f0; padding: 1px 5px; border-radius: 3px; font-size: 8.5pt; color: #d48c1e; font-family: 'JetBrains Mono', monospace; }
|
||||
|
||||
/* Tables */
|
||||
.table-wrap { margin: 10pt 0 16pt; }
|
||||
table { font-size: 8.5pt; border-collapse: collapse; width: 100%; page-break-inside: avoid; }
|
||||
th, td { padding: 6pt 8pt; text-align: left; border-bottom: 1px solid #ddd; }
|
||||
th { color: #555; font-weight: 600; font-size: 8pt; text-transform: uppercase; letter-spacing: 0.04em; background: #fafafa; }
|
||||
td { color: #333; }
|
||||
td code { background: #f0f0f0; font-size: 8pt; }
|
||||
|
||||
/* Endpoint cards */
|
||||
.endpoint { background: #fafafa; border: 1px solid #e0e0e0; border-radius: 4px; margin-bottom: 10pt; page-break-inside: avoid; }
|
||||
.ep-header { padding: 8pt 12pt; background: #f5f5f5; border-bottom: 1px solid #e0e0e0; display: flex; align-items: center; gap: 8pt; }
|
||||
.ep-method { font-size: 7.5pt; padding: 2pt 6pt; border-radius: 3px; font-weight: 700; }
|
||||
.ep-method.post { background: #eff6ff; color: #2563eb; }
|
||||
.ep-method.get { background: #f0fdf4; color: #16a34a; }
|
||||
.ep-method.put { background: #fffbeb; color: #d97706; }
|
||||
.ep-method.delete { background: #fef2f2; color: #dc2626; }
|
||||
.ep-path { font-size: 9pt; color: #111; font-weight: 600; }
|
||||
.ep-desc { font-size: 8pt; color: #888; }
|
||||
.ep-body { padding: 10pt 12pt; }
|
||||
.ep-body p { font-size: 8.5pt; margin-bottom: 8pt; }
|
||||
|
||||
/* Callouts */
|
||||
.callout { padding: 10pt 14pt; border-radius: 4px; margin: 10pt 0; font-size: 9pt; border-left: 3px solid; }
|
||||
.callout.info { background: #eff6ff; border-color: #60a5fa; color: #1e40af; }
|
||||
.callout.warn { background: #fffbeb; border-color: #f59e0b; color: #92400e; }
|
||||
.callout.info strong { color: #2563eb; }
|
||||
.callout.warn strong { color: #d97706; }
|
||||
|
||||
/* Chain grid */
|
||||
.chain-grid { display: block; margin: 10pt 0; }
|
||||
.chain-tag { display: inline-block; font-size: 8pt; color: #555; padding: 2pt 6pt; background: #f5f5f5; border: 1px solid #e0e0e0; border-radius: 3px; margin: 2pt; }
|
||||
|
||||
/* Page breaks */
|
||||
h2 { page-break-before: always; }
|
||||
h2#quickstart, h2#what-you-get { page-break-before: avoid; }
|
||||
pre, table, .endpoint, .callout { page-break-inside: avoid; }
|
||||
h3, h4 { page-break-after: avoid; }
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<nav>
|
||||
<div class="nav-inner">
|
||||
<a href="/index.html" class="logo"><span class="logo-dot"></span>WalletPress Docs</a>
|
||||
<div class="nav-links">
|
||||
<a href="/index.html">Home</a>
|
||||
<a href="/features.html">Features</a>
|
||||
<a href="/docs.html" class="active">Docs</a>
|
||||
<a href="/about.html">About</a>
|
||||
<a href="/buy.html" class="nav-cta">Buy — $49</a>
|
||||
</div>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<div class="layout">
|
||||
<aside class="sidebar">
|
||||
<h3>Getting Started</h3>
|
||||
<a href="#quickstart">Quickstart</a>
|
||||
<a href="#what-you-get">What You Get</a>
|
||||
<a href="#chains">Supported Chains</a>
|
||||
<a href="#architecture">Architecture</a>
|
||||
<a href="#security">Security Model</a>
|
||||
<a href="#encryption">Encryption Modes</a>
|
||||
|
||||
<h3>CLI Reference</h3>
|
||||
<a href="#cli">Overview</a>
|
||||
<a href="#cli-generate">generate</a>
|
||||
<a href="#cli-list">list</a>
|
||||
<a href="#cli-import">import</a>
|
||||
<a href="#cli-validate">validate</a>
|
||||
<a href="#cli-balances">balances</a>
|
||||
<a href="#cli-gas">gas</a>
|
||||
<a href="#cli-paper">paper</a>
|
||||
<a href="#cli-export">export</a>
|
||||
<a href="#cli-rotate">rotate</a>
|
||||
<a href="#cli-chain">chain</a>
|
||||
<a href="#cli-stats">stats</a>
|
||||
<a href="#cli-hd">hd</a>
|
||||
<a href="#cli-bulk">bulk</a>
|
||||
|
||||
<h3>REST API</h3>
|
||||
<a href="#api-base">Base URL & Auth</a>
|
||||
<a href="#api-core">Core Endpoints</a>
|
||||
<a href="#api-security">Security Endpoints</a>
|
||||
<a href="#api-operations">Operations</a>
|
||||
<a href="#api-enterprise">Enterprise</a>
|
||||
|
||||
<h3>Deployment</h3>
|
||||
<a href="#deploy">Docker Compose</a>
|
||||
<a href="#deploy-config">Configuration</a>
|
||||
<a href="#deploy-verify">Verification</a>
|
||||
|
||||
<h3>Downloads</h3>
|
||||
<a href="#downloads" style="color:var(--accent)">📄 PDF & Resources</a>
|
||||
</aside>
|
||||
|
||||
<main class="main">
|
||||
|
||||
<div class="doc-header">
|
||||
<div>
|
||||
<h1>WalletPress Documentation</h1>
|
||||
<p>Complete reference for the WalletPress 30-chain wallet generation engine. CLI, REST API, deployment, and security.</p>
|
||||
<p style="font-size:12px;color:var(--fg3);margin-top:4px">Base URL: <code>http://localhost:8000/api/v1/chain-vault</code> · v1.0.0 · 86 API routes</p>
|
||||
</div>
|
||||
<div class="pdf-download">
|
||||
<a href="/walletpress-docs.pdf" class="pdf-btn pdf-btn-lg" download>
|
||||
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M21 15v4a2 2 0 01-2 2H5a2 2 0 01-2-2v-4"/><polyline points="7 10 12 15 17 10"/><line x1="12" y1="15" x2="12" y2="3"/></svg>
|
||||
Download PDF
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- QUICKSTART -->
|
||||
<h2 id="quickstart">Quickstart</h2>
|
||||
<p>WalletPress runs as a Docker Compose stack. After purchasing, you get the full source code as a <code>.tar.gz</code> archive.</p>
|
||||
<pre><span class="cm"># 1. Extract</span>
|
||||
tar xzf walletpress-1.0.0.tar.gz && <span class="fn">cd</span> walletpress
|
||||
|
||||
<span class="cm"># 2. Start (one command)</span>
|
||||
docker compose up -d
|
||||
|
||||
<span class="cm"># 3. Verify the API is running</span>
|
||||
curl http://localhost:8000/api/v1/chain-vault/healthz
|
||||
|
||||
<span class="cm"># 4. Generate your first wallet</span>
|
||||
vault-package generate eth --count 3
|
||||
|
||||
<span class="cm"># Or via REST API</span>
|
||||
curl -X POST http://localhost:8000/api/v1/chain-vault/generate \
|
||||
-H <span class="s">"Content-Type: application/json"</span> \
|
||||
-d <span class="s">'{"chain":"eth","count":1}'</span></pre>
|
||||
|
||||
<!-- WHAT YOU GET -->
|
||||
<h2 id="what-you-get">What's Included</h2>
|
||||
<div class="table-wrap"><table>
|
||||
<tr><th>Component</th><th>Description</th><th>Lines</th></tr>
|
||||
<tr><td><code>wallet_factory.py</code></td><td>Core engine: 30-chain generation, encryption, keccak verification</td><td>~950</td></tr>
|
||||
<tr><td><code>wallet_factory_router.py</code></td><td>86 REST API endpoints, vault management, authentication</td><td>~850</td></tr>
|
||||
<tr><td><code>wallet_features.py</code></td><td>Multi-chain generation, validation, key management</td><td>501</td></tr>
|
||||
<tr><td><code>wallet_phase2.py</code></td><td>Advanced features: balances, RPC, proofs, sweep</td><td>589</td></tr>
|
||||
<tr><td><code>wallet_enhancements.py</code></td><td>HD wallets, paper wallets, import, webhooks, bulk ops</td><td>221</td></tr>
|
||||
<tr><td><code>wallet_premium.py</code></td><td>API keys, tx builder, alerts, multisig, gas dashboard</td><td>376</td></tr>
|
||||
<tr><td><code>wallet_enterprise.py</code></td><td>Bulk 1000, unlinkable wallets, auto-funding, batch proofs</td><td>~400</td></tr>
|
||||
<tr><td><code>shamir.py</code></td><td>Shamir's Secret Sharing over GF(256) — pure Python</td><td>~200</td></tr>
|
||||
<tr><td><code>wallet_killer.py</code></td><td>Mnemonic recovery, chain adder, wallet DNA, plugins</td><td>563</td></tr>
|
||||
<tr><td><code>wallet_rbac.py</code></td><td>Role-based access control for multi-user deployments</td><td>138</td></tr>
|
||||
<tr><td><code>Dockerfile + compose.yaml</code></td><td>Containerized deployment with health checks</td><td>—</td></tr>
|
||||
<tr><td><code>vault-package</code> CLI</td><td>Bash CLI with SSH auto-tunnel, 14 commands</td><td>—</td></tr>
|
||||
</table></div>
|
||||
|
||||
<!-- CHAINS -->
|
||||
<h2 id="chains">Supported Chains (30 Total)</h2>
|
||||
<p>Every major blockchain family. Addresses derived using chain-native cryptography — Keccak256 for EVM, ed25519 for Solana, secp256k1 for Bitcoin.</p>
|
||||
<div class="chain-grid">
|
||||
<div class="chain-tag">Bitcoin (Legacy)</div><div class="chain-tag">Bitcoin (SegWit)</div><div class="chain-tag">Bitcoin (Native SW)</div>
|
||||
<div class="chain-tag">Ethereum</div><div class="chain-tag">Base</div><div class="chain-tag">Polygon</div>
|
||||
<div class="chain-tag">Arbitrum</div><div class="chain-tag">Optimism</div><div class="chain-tag">Avalanche</div>
|
||||
<div class="chain-tag">BSC</div><div class="chain-tag">Fantom</div><div class="chain-tag">Gnosis</div>
|
||||
<div class="chain-tag">Solana</div><div class="chain-tag">TRON</div><div class="chain-tag">Dogecoin</div>
|
||||
<div class="chain-tag">Litecoin</div><div class="chain-tag">Bitcoin Cash</div><div class="chain-tag">Dash</div>
|
||||
<div class="chain-tag">Zcash</div><div class="chain-tag">Cardano</div><div class="chain-tag">NEAR</div>
|
||||
<div class="chain-tag">Sui</div><div class="chain-tag">Aptos</div><div class="chain-tag">XRP</div>
|
||||
<div class="chain-tag">Polkadot</div><div class="chain-tag">Cosmos</div><div class="chain-tag">Algorand</div>
|
||||
<div class="chain-tag">Tezos</div><div class="chain-tag">Monero</div><div class="chain-tag">TON</div>
|
||||
</div>
|
||||
<p style="font-size:11px;color:var(--fg3);margin-top:8px">13 chain families: Bitcoin, EVM (9 L1/L2), Solana, TRON, Doge-family (4), Privacy (2), Cardano, NEAR, Sui, Aptos, XRPL, Polkadot, Cosmos, Algorand, Tezos, Monero, TON.</p>
|
||||
|
||||
<!-- ARCHITECTURE -->
|
||||
<h2 id="architecture">Architecture</h2>
|
||||
<pre><span class="cm">┌─────────────────────────────────────────┐</span>
|
||||
<span class="cm">│ Docker Compose │</span>
|
||||
<span class="cm">│ ┌─────────────┐ ┌──────────────────┐ │</span>
|
||||
<span class="cm">│ │ FastAPI │ │ Encrypted Vault │ │</span>
|
||||
<span class="cm">│ │ Port :8000 │◀─│ (Fernet + AES) │ │</span>
|
||||
<span class="cm">│ │ 86 Routes │ │ Volume-mounted │ │</span>
|
||||
<span class="cm">│ └──────┬───────┘ └──────────────────┘ │</span>
|
||||
<span class="cm">│ │ │</span>
|
||||
<span class="cm">│ ┌──────▼──────────────────────────────┐ │</span>
|
||||
<span class="cm">│ │ Wallet Factory Engine │ │</span>
|
||||
<span class="cm">│ │ eth-hash · coincurve · ecdsa · │ │</span>
|
||||
<span class="cm">│ │ bip_utils · PyNaCl · base58 · │ │</span>
|
||||
<span class="cm">│ │ monero · cryptography │ │</span>
|
||||
<span class="cm">│ └─────────────────────────────────────┘ │</span>
|
||||
<span class="cm">│ 30 Chains · 13 Families │</span>
|
||||
<span class="cm">└─────────────────────────────────────────┘</span></pre>
|
||||
|
||||
<h3>Key Design Decisions</h3>
|
||||
<ul>
|
||||
<li><strong>Keccak256 for EVM</strong> — Not SHA3-256. Ethereum uses Keccak with different padding. We use <code>eth-hash</code> for correct address derivation.</li>
|
||||
<li><strong>On-chain verification</strong> — Every address derived by the factory is independently verified against each chain's canonical library (eth-keys, coincurve, PyNaCl, etc.).</li>
|
||||
<li><strong>Zero external dependencies at runtime</strong> — No API calls, no cloud services, no telemetry. The container is fully self-contained.</li>
|
||||
<li><strong>Volume-persisted vault</strong> — Wallet data stored on a Docker volume, surviving container restarts and upgrades.</li>
|
||||
</ul>
|
||||
|
||||
<!-- SECURITY -->
|
||||
<h2 id="security">Security Model</h2>
|
||||
<div class="callout warn"><strong>IMPORTANT:</strong> Private keys are cryptographic secrets. Follow these guidelines to protect your wallets.</div>
|
||||
<ul>
|
||||
<li><strong>Never expose port 8000 publicly</strong> — Run behind nginx reverse proxy with TLS or keep local-only.</li>
|
||||
<li><strong>Enable API key authentication</strong> — Set <code>ADMIN_API_KEY</code> in your environment. All vault endpoints then require <code>X-API-Key</code> header.</li>
|
||||
<li><strong>Use client-side encryption</strong> — Keys can be encrypted in your browser/CLI before reaching the server (zero-knowledge).</li>
|
||||
<li><strong>Enable Fernet encryption</strong> — Auto-enabled on first run. All private keys encrypted at rest in the vault JSON.</li>
|
||||
<li><strong>Rotate keys regularly</strong> — Use <code>/rotate</code> endpoint or <code>vault-package rotate</code>. Full audit trail tracks every rotation.</li>
|
||||
<li><strong>Use RBAC for multi-user</strong> — Role-based access: admin, operator, viewer roles with granular permissions.</li>
|
||||
</ul>
|
||||
|
||||
<h3>Cryptographic Standards</h3>
|
||||
<div class="table-wrap"><table>
|
||||
<tr><th>Component</th><th>Algorithm</th><th>Standard</th></tr>
|
||||
<tr><td>EVM / TRON</td><td>Keccak256 (secp256k1)</td><td>Ethereum Yellow Paper</td></tr>
|
||||
<tr><td>Bitcoin / Doge-family</td><td>secp256k1 + RIPEMD-160</td><td>BIP32/39/44/84</td></tr>
|
||||
<tr><td>Solana</td><td>ed25519 (Curve25519)</td><td>SLIP-0010</td></tr>
|
||||
<tr><td>Cosmos / Polkadot</td><td>sr25519 / ed25519</td><td>Substrate</td></tr>
|
||||
<tr><td>NEAR / Sui / Aptos</td><td>ed25519</td><td>BIP44</td></tr>
|
||||
<tr><td>Vault encryption</td><td>Fernet (AES-128-CBC + HMAC-SHA256)</td><td>Python cryptography</td></tr>
|
||||
<tr><td>Shamir MPC</td><td>Shamir's Secret Sharing GF(256)</td><td>Threshold cryptography</td></tr>
|
||||
</table></div>
|
||||
|
||||
<!-- ENCRYPTION -->
|
||||
<h2 id="encryption">Encryption Modes</h2>
|
||||
<div class="table-wrap"><table>
|
||||
<tr><th>Mode</th><th>Description</th><th>Security Level</th><th>Use Case</th></tr>
|
||||
<tr><td><strong>None</strong></td><td>Keys stored as plaintext in vault</td><td>Low</td><td>Testnets, development</td></tr>
|
||||
<tr><td><strong>Server-side (Fernet)</strong></td><td>Keys encrypted with auto-generated key. Vault stored encrypted on disk.</td><td>Medium</td><td>Production, single-user</td></tr>
|
||||
<tr><td><strong>Client-side (AES-256-GCM)</strong></td><td>Keys encrypted with user passphrase before transmission. Server never sees plaintext.</td><td>High</td><td>Multi-user, shared infra</td></tr>
|
||||
<tr><td><strong>Shamir MPC</strong></td><td>Key split into N shares. Need threshold M to reconstruct. No single point of failure.</td><td>Highest</td><td>Enterprise, custody</td></tr>
|
||||
</table></div>
|
||||
|
||||
<!-- CLI REFERENCE -->
|
||||
<h2 id="cli">CLI Reference</h2>
|
||||
<p>The <code>vault-package</code> CLI auto-detects whether it's running on your server or remotely. On remote machines it tunnels through SSH automatically.</p>
|
||||
|
||||
<h3 id="cli-generate">generate</h3>
|
||||
<p>Generate wallets on any chain.</p>
|
||||
<pre><span class="cm"># Generate 5 Ethereum wallets</span>
|
||||
vault-package generate eth --count 5
|
||||
|
||||
<span class="cm"># With labels</span>
|
||||
vault-package generate sol --count 10 --label airdrop-batch-1
|
||||
|
||||
<span class="cm"># Include private keys (CAUTION)</span>
|
||||
vault-package generate btc --count 3 --include-keys
|
||||
|
||||
<span class="cm"># JSON output for scripting</span>
|
||||
vault-package generate eth --count 1 --json</pre>
|
||||
|
||||
<h3 id="cli-list">list</h3>
|
||||
<pre>vault-package list <span class="cm"># All wallets</span>
|
||||
vault-package list --chain eth <span class="cm"># Filter by chain</span>
|
||||
vault-package list --limit 100 <span class="cm"># Paginate</span></pre>
|
||||
|
||||
<h3 id="cli-import">import</h3>
|
||||
<pre>vault-package import eth 0xabc123... --label <span class="s">"cold-storage"</span></pre>
|
||||
|
||||
<h3 id="cli-validate">validate</h3>
|
||||
<pre>vault-package validate eth 0x847ca23452c3418358be201d41f6ed7ea8bcd95a
|
||||
<span class="cm"># → Valid: True</span></pre>
|
||||
|
||||
<h3 id="cli-balances">balances</h3>
|
||||
<pre>vault-package balances <span class="cm"># Check all vault wallet balances</span></pre>
|
||||
|
||||
<h3 id="cli-gas">gas</h3>
|
||||
<pre>vault-package gas <span class="cm"># Gas prices across all 30 chains</span></pre>
|
||||
|
||||
<h3 id="cli-paper">paper</h3>
|
||||
<pre>vault-package paper a1b2c3d4 <span class="cm"># Generate printable wallet</span>
|
||||
vault-package paper a1b2c3d4 -o ~/out.html <span class="cm"># Custom output path</span></pre>
|
||||
|
||||
<h3 id="cli-export">export</h3>
|
||||
<pre>vault-package export <span class="cm"># Export vault to JSON</span>
|
||||
vault-package export --csv <span class="cm"># Export as CSV</span></pre>
|
||||
|
||||
<h3 id="cli-rotate">rotate</h3>
|
||||
<pre>vault-package rotate a1b2c3d4 <span class="cm"># Rotate a specific wallet key</span>
|
||||
vault-package rotate --chain eth <span class="cm"># Rotate all ETH wallets</span></pre>
|
||||
|
||||
<h3 id="cli-chain">chain</h3>
|
||||
<pre>vault-package chain <span class="cm"># Table of all 30 chains</span>
|
||||
vault-package chain --json <span class="cm"># JSON output</span></pre>
|
||||
|
||||
<h3 id="cli-stats">stats</h3>
|
||||
<pre>vault-package stats <span class="cm"># Vault stats: count, chains, encryption</span></pre>
|
||||
|
||||
<h3 id="cli-hd">hd</h3>
|
||||
<pre>vault-package hd <span class="s">"abandon abandon abandon ..."</span> --label <span class="s">"main-hd"</span></pre>
|
||||
|
||||
<h3 id="cli-bulk">bulk</h3>
|
||||
<pre>vault-package bulk eth --count 1000 <span class="cm"># Generate 1,000 wallets</span>
|
||||
vault-package bulk --status batch-abc123 <span class="cm"># Check bulk job status</span></pre>
|
||||
|
||||
<!-- REST API -->
|
||||
<h2 id="api-base">REST API — Base URL & Authentication</h2>
|
||||
<p>All endpoints are under <code>/api/v1/chain-vault/</code>. The API serves JSON on port 8000.</p>
|
||||
<div class="callout info"><strong>Auth:</strong> If <code>ADMIN_API_KEY</code> is set, include <code>X-API-Key: your-key</code> header on all requests. Without it, the vault is open to localhost-only access.</div>
|
||||
|
||||
<h3 id="api-core">Core Endpoints</h3>
|
||||
<div class="endpoint"><div class="ep-header"><span class="ep-method post">POST</span><span class="ep-path">/generate</span><span class="ep-desc">Generate wallets</span></div><div class="ep-body"><p>Generate one or more wallets on any chain. Supports batch labels.</p><pre><span class="kw">{</span><span class="s">"chain"</span>:<span class="s">"eth"</span>,<span class="s">"count"</span>:<span class="n">3</span>,<span class="s">"include_private_key"</span>:<span class="kw">false</span>,<span class="s">"label"</span>:<span class="s">"my-batch"</span><span class="kw">}</span></pre></div></div>
|
||||
|
||||
<div class="endpoint"><div class="ep-header"><span class="ep-method get">GET</span><span class="ep-path">/vault</span><span class="ep-desc">List all wallets</span></div><div class="ep-body"><p>Returns all wallets in the vault. Supports <code>?chain=eth</code> and <code>?limit=100</code> query params.</p></div></div>
|
||||
|
||||
<div class="endpoint"><div class="ep-header"><span class="ep-method get">GET</span><span class="ep-path">/vault/{id}</span><span class="ep-desc">Get wallet by ID</span></div><div class="ep-body"><p>Returns a single wallet with full details. Private key only included if <code>?include_key=true</code> and auth is valid.</p></div></div>
|
||||
|
||||
<div class="endpoint"><div class="ep-header"><span class="ep-method post">POST</span><span class="ep-path">/import</span><span class="ep-desc">Import existing wallet</span></div><div class="ep-body"><p>Import a wallet by private key hex. Validates the key against chain format before storing.</p><pre><span class="kw">{</span><span class="s">"chain"</span>:<span class="s">"eth"</span>,<span class="s">"private_key_hex"</span>:<span class="s">"abc123..."</span>,<span class="s">"label"</span>:<span class="s">"imported"</span><span class="kw">}</span></pre></div></div>
|
||||
|
||||
<div class="endpoint"><div class="ep-header"><span class="ep-method get">GET</span><span class="ep-path">/chains</span><span class="ep-desc">List all 30 chains</span></div><div class="ep-body"><p>Returns chain metadata: name, symbol, family, address format, derivation path.</p></div></div>
|
||||
|
||||
<div class="endpoint"><div class="ep-header"><span class="ep-method get">GET</span><span class="ep-path">/stats</span><span class="ep-desc">Vault statistics</span></div><div class="ep-body"><p>Returns generation count, chain breakdown, encryption status, vault health.</p></div></div>
|
||||
|
||||
<div class="endpoint"><div class="ep-header"><span class="ep-method post">POST</span><span class="ep-path">/validate</span><span class="ep-desc">Validate address</span></div><div class="ep-body"><p>Validate an address against its chain format rules. Returns <code>{"valid": true/false}</code>.</p><pre><span class="kw">{</span><span class="s">"chain"</span>:<span class="s">"eth"</span>,<span class="s">"address"</span>:<span class="s">"0x847ca..."</span><span class="kw">}</span></pre></div></div>
|
||||
|
||||
<div class="endpoint"><div class="ep-header"><span class="ep-method post">POST</span><span class="ep-path">/rotate</span><span class="ep-desc">Rotate wallet keys</span></div><div class="ep-body"><p>Rotate keys for a specific wallet or all wallets on a chain. Audit trail logged.</p><pre><span class="kw">{</span><span class="s">"wallet_id"</span>:<span class="s">"a1b2c3d4"</span><span class="kw">}</span></pre></div></div>
|
||||
|
||||
<div class="endpoint"><div class="ep-header"><span class="ep-method get">GET</span><span class="ep-path">/export</span><span class="ep-desc">Export vault</span></div><div class="ep-body"><p>Export vault data. <code>?format=csv</code> for CSV, default is JSON.</p></div></div>
|
||||
|
||||
<h3 id="api-security">Security & Key Management</h3>
|
||||
<div class="endpoint"><div class="ep-header"><span class="ep-method post">POST</span><span class="ep-path">/split-key</span><span class="ep-desc">Shamir MPC split</span></div><div class="ep-body"><p>Split a private key into N shares using Shamir's Secret Sharing. Default: 3 shares, threshold 2. Pure Python GF(256) implementation.</p><pre><span class="kw">{</span><span class="s">"private_key_hex"</span>:<span class="s">"64-char-hex"</span>,<span class="s">"shares"</span>:<span class="n">3</span>,<span class="s">"threshold"</span>:<span class="n">2</span><span class="kw">}</span></pre></div></div>
|
||||
|
||||
<div class="endpoint"><div class="ep-header"><span class="ep-method post">POST</span><span class="ep-path">/reconstruct-key</span><span class="ep-desc">Reconstruct from shares</span></div><div class="ep-body"><p>Reconstruct a private key from N shares. Any threshold number of shares works.</p><pre><span class="kw">{</span><span class="s">"shares"</span>:[<span class="s">"share1..."</span>,<span class="s">"share2..."</span>]<span class="kw">}</span></pre></div></div>
|
||||
|
||||
<div class="endpoint"><div class="ep-header"><span class="ep-method get">GET</span><span class="ep-path">/audit-trail</span><span class="ep-desc">View audit log</span></div><div class="ep-body"><p>Returns all wallet operations: generation, rotation, import, export with timestamps.</p></div></div>
|
||||
|
||||
<div class="endpoint"><div class="ep-header"><span class="ep-method get">GET</span><span class="ep-path">/health-score/{id}</span><span class="ep-desc">Wallet health score</span></div><div class="ep-body"><p>Returns a health score for a wallet based on key age, rotation status, and encryption state.</p></div></div>
|
||||
|
||||
<h3 id="api-operations">Operations</h3>
|
||||
<div class="endpoint"><div class="ep-header"><span class="ep-method get">GET</span><span class="ep-path">/balances</span><span class="ep-desc">Check all balances</span></div><div class="ep-body"><p>Returns balances for all vault wallets grouped by chain. Uses live RPC for EVM chains.</p></div></div>
|
||||
|
||||
<div class="endpoint"><div class="ep-header"><span class="ep-method get">GET</span><span class="ep-path">/gas</span><span class="ep-desc">Gas dashboard</span></div><div class="ep-body"><p>Gas prices for all 30 chains. Live RPC for 7 EVM chains, static estimates for 23 non-EVM chains.</p></div></div>
|
||||
|
||||
<div class="endpoint"><div class="ep-header"><span class="ep-method post">POST</span><span class="ep-path">/hd-wallet</span><span class="ep-desc">HD wallet from mnemonic</span></div><div class="ep-body"><p>Generate deterministic wallets from a BIP39 mnemonic.</p><pre><span class="kw">{</span><span class="s">"mnemonic"</span>:<span class="s">"abandon abandon ..."</span>,<span class="s">"label"</span>:<span class="s">"hd-main"</span><span class="kw">}</span></pre></div></div>
|
||||
|
||||
<div class="endpoint"><div class="ep-header"><span class="ep-method get">GET</span><span class="ep-path">/rpc-chains</span><span class="ep-desc">RPC health check</span></div><div class="ep-body"><p>Returns which chains have live RPC endpoints and their latency.</p></div></div>
|
||||
|
||||
<div class="endpoint"><div class="ep-header"><span class="ep-method post">POST</span><span class="ep-path">/paper</span><span class="ep-desc">Generate paper wallet</span></div><div class="ep-body"><p>Generate an HTML paper wallet with QR codes for a wallet ID.</p><pre><span class="kw">{</span><span class="s">"wallet_id"</span>:<span class="s">"a1b2c3d4"</span><span class="kw">}</span></pre></div></div>
|
||||
|
||||
<div class="endpoint"><div class="ep-header"><span class="ep-method post">POST</span><span class="ep-path">/link/proof</span><span class="ep-desc">Generate ownership proof</span></div><div class="ep-body"><p>Generate a cryptographic proof of wallet ownership (signed message).</p></div></div>
|
||||
|
||||
<h3 id="api-enterprise">Enterprise</h3>
|
||||
<div class="endpoint"><div class="ep-header"><span class="ep-method post">POST</span><span class="ep-path">/generate/bulk</span><span class="ep-desc">Bulk 1,000 wallets</span></div><div class="ep-body"><p>Generate up to 1,000 wallets in a background thread. Returns batch ID. Poll <code>GET /generate/bulk/{id}</code> for status.</p><pre><span class="kw">{</span><span class="s">"chain"</span>:<span class="s">"eth"</span>,<span class="s">"count"</span>:<span class="n">1000</span>,<span class="s">"label"</span>:<span class="s">"airdrop"</span><span class="kw">}</span></pre></div></div>
|
||||
|
||||
<div class="endpoint"><div class="ep-header"><span class="ep-method post">POST</span><span class="ep-path">/generate/unlinkable</span><span class="ep-desc">Unlinkable wallets</span></div><div class="ep-body"><p>Generate N wallets with independent entropy. No common seed. Cryptographically provable independence.</p><pre><span class="kw">{</span><span class="s">"chain"</span>:<span class="s">"eth"</span>,<span class="s">"count"</span>:<span class="n">10</span><span class="kw">}</span></pre></div></div>
|
||||
|
||||
<div class="endpoint"><div class="ep-header"><span class="ep-method post">POST</span><span class="ep-path">/proof/sign</span><span class="ep-desc">Batch proof signing</span></div><div class="ep-body"><p>Sign a message with N wallet keys in a single API call. Returns Merkle-like proof hash.</p></div></div>
|
||||
|
||||
<div class="endpoint"><div class="ep-header"><span class="ep-method post">POST</span><span class="ep-path">/funding-plans</span><span class="ep-desc">Auto-funding plans</span></div><div class="ep-body"><p>Create auto-funding rules: "when a wallet is generated, fund it with X ETH from master wallet."</p></div></div>
|
||||
|
||||
<div class="endpoint"><div class="ep-header"><span class="ep-method post">POST</span><span class="ep-path">/tx/build</span><span class="ep-desc">Build transaction</span></div><div class="ep-body"><p>Build and sign a raw transaction. Specify recipient, amount, gas.</p><pre><span class="kw">{</span><span class="s">"wallet_id"</span>:<span class="s">"a1b"</span>,<span class="s">"to"</span>:<span class="s">"0xdef..."</span>,<span class="s">"amount_wei"</span>:<span class="s">"1000000000000000000"</span><span class="kw">}</span></pre></div></div>
|
||||
|
||||
<!-- DEPLOYMENT -->
|
||||
<h2 id="deploy">Deployment</h2>
|
||||
<p>WalletPress ships as a self-contained Docker Compose project. Requirements: Linux server, Docker Engine 20.10+, 1GB+ RAM, 5GB+ disk.</p>
|
||||
<pre><span class="cm"># 1. Extract the archive</span>
|
||||
tar xzf walletpress-1.0.0.tar.gz && <span class="fn">cd</span> walletpress
|
||||
|
||||
<span class="cm"># 2. Configure (optional — see below)</span>
|
||||
<span class="fn">export</span> <span class="v">ADMIN_API_KEY</span>=your-secure-api-key
|
||||
|
||||
<span class="cm"># 3. Start the stack</span>
|
||||
docker compose up -d
|
||||
|
||||
<span class="cm"># 4. Check logs</span>
|
||||
docker compose logs -f backend
|
||||
|
||||
<span class="cm"># 5. Verify health</span>
|
||||
curl http://localhost:8000/api/v1/chain-vault/healthz</pre>
|
||||
|
||||
<h3 id="deploy-config">Configuration</h3>
|
||||
<div class="table-wrap"><table>
|
||||
<tr><th>Variable</th><th>Required</th><th>Default</th><th>Description</th></tr>
|
||||
<tr><td><code>ADMIN_API_KEY</code></td><td>Recommended</td><td><em>none</em></td><td>API key for vault endpoints. If unset, localhost-only access.</td></tr>
|
||||
<tr><td><code>VAULT_DIR</code></td><td>No</td><td><code>/app/.rmi/wallets</code></td><td>Path to vault data directory (volume-mounted).</td></tr>
|
||||
<tr><td><code>LOG_LEVEL</code></td><td>No</td><td><code>INFO</code></td><td>Python logging level: DEBUG, INFO, WARNING, ERROR.</td></tr>
|
||||
<tr><td><code>PORT</code></td><td>No</td><td><code>8000</code></td><td>API listen port.</td></tr>
|
||||
</table></div>
|
||||
|
||||
<h3 id="deploy-verify">Post-Deployment Verification</h3>
|
||||
<pre><span class="cm"># Health check</span>
|
||||
curl http://localhost:8000/api/v1/chain-vault/healthz
|
||||
<span class="cm"># → {"status":"ok","service":"wallet-factory","version":"1.0.0"}</span>
|
||||
|
||||
<span class="cm"># Generate a test wallet</span>
|
||||
curl -X POST http://localhost:8000/api/v1/chain-vault/generate \
|
||||
-H <span class="s">"Content-Type: application/json"</span> \
|
||||
-d <span class="s">'{"chain":"eth","count":1}'</span>
|
||||
|
||||
<span class="cm"># Check chains</span>
|
||||
curl http://localhost:8000/api/v1/chain-vault/chains | jq <span class="s">'.total_chains'</span>
|
||||
<span class="cm"># → 30</span></pre>
|
||||
|
||||
<!-- DOWNLOADS -->
|
||||
<h2 id="downloads">Downloads & Resources</h2>
|
||||
|
||||
<div class="download-banner">
|
||||
<h3>📄 WalletPress Documentation PDF</h3>
|
||||
<p>Complete reference manual — all CLI commands, API endpoints, deployment guide, and security model. Download and keep offline.</p>
|
||||
<a href="/walletpress/walletpress-docs.pdf" class="pdf-btn pdf-btn-lg" download style="display:inline-flex">
|
||||
<svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M21 15v4a2 2 0 01-2 2H5a2 2 0 01-2-2v-4"/><polyline points="7 10 12 15 17 10"/><line x1="12" y1="15" x2="12" y2="3"/></svg>
|
||||
Download PDF (2.1 MB)
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="table-wrap" style="margin-top:24px">
|
||||
<table>
|
||||
<tr><th>Resource</th><th>Format</th><th>Size</th><th>Download</th></tr>
|
||||
<tr>
|
||||
<td>Complete Documentation</td>
|
||||
<td>PDF</td>
|
||||
<td>~2.1 MB</td>
|
||||
<td><a href="/walletpress/walletpress-docs.pdf" download>walletpress-docs.pdf</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>API Reference (this page)</td>
|
||||
<td>HTML</td>
|
||||
<td>—</td>
|
||||
<td><a href="/docs.html">docs.html</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Quickstart Cheat Sheet</td>
|
||||
<td>Coming soon</td>
|
||||
<td>—</td>
|
||||
<td>—</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<p style="margin-top:48px;padding-top:20px;border-top:1px solid var(--border);color:var(--fg3);font-size:12px">
|
||||
<a href="/index.html">← Back to WalletPress</a> · Need help? <a href="mailto:support@walletpress.cc">support@walletpress.cc</a>
|
||||
</p>
|
||||
|
||||
</main>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
455
marketing/features.html
Normal file
455
marketing/features.html
Normal file
|
|
@ -0,0 +1,455 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Features — WalletPress · 30-Chain Wallet Generator</title>
|
||||
<meta name="description" content="Everything WalletPress can do — multi-chain generation, encrypted vault, HD wallets, bulk generation, paper wallets, key rotation, Shamir MPC, and more.">
|
||||
<meta name="robots" content="noindex">
|
||||
<link rel="icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><text y='.9em' font-size='90'>🔐</text></svg>">
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:opsz,wght@14..32,300;14..32,400;14..32,510;14..32,590;14..32,700&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet">
|
||||
<style>
|
||||
:root {
|
||||
--bg: #08090a;
|
||||
--bg2: #0c0d0f;
|
||||
--bg3: #121317;
|
||||
--bg4: #181a1f;
|
||||
--border: rgba(255,255,255,0.06);
|
||||
--border2: rgba(255,255,255,0.09);
|
||||
--fg: #f7f8f8;
|
||||
--fg2: #9ca0a8;
|
||||
--fg3: #5f636b;
|
||||
--accent: #f0a030;
|
||||
--accent2: #d48c1e;
|
||||
--accent-glow: rgba(240,160,48,0.12);
|
||||
--accent-glow2: rgba(240,160,48,0.2);
|
||||
--cyan: #22d3ee;
|
||||
--purple: #8b5cf6;
|
||||
--green: #22c55e;
|
||||
--red: #ef4444;
|
||||
--radius: 6px;
|
||||
--radius-lg: 12px;
|
||||
--radius-xl: 16px;
|
||||
--radius-pill: 9999px;
|
||||
--nav-h: 52px;
|
||||
}
|
||||
*,*::before,*::after{margin:0;padding:0;box-sizing:border-box}
|
||||
html{scroll-behavior:smooth;-webkit-text-size-adjust:100%}
|
||||
body{font-family:'Inter',system-ui,-apple-system,sans-serif;background:var(--bg);color:var(--fg);line-height:1.5;-webkit-font-smoothing:antialiased;font-feature-settings:'cv01','ss03';overflow-x:hidden}
|
||||
::selection{background:rgba(240,160,48,0.3);color:var(--fg)}
|
||||
img,svg{display:block;max-width:100%}
|
||||
|
||||
.reveal{opacity:0;transform:translateY(24px);transition:opacity .6s ease-out,transform .6s ease-out}
|
||||
.reveal.visible{opacity:1;transform:translateY(0)}
|
||||
|
||||
/* NAV */
|
||||
nav{position:fixed;top:0;left:0;right:0;z-index:100;height:var(--nav-h);background:rgba(8,9,10,0.82);backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);border-bottom:1px solid var(--border)}
|
||||
.nav-inner{max-width:1200px;margin:0 auto;padding:0 20px;height:100%;display:flex;align-items:center;justify-content:space-between;gap:16px}
|
||||
.logo{display:flex;align-items:center;gap:8px;font-weight:700;font-size:18px;color:var(--fg);text-decoration:none;letter-spacing:-0.02em}
|
||||
.logo-dot{width:8px;height:8px;border-radius:50%;background:var(--accent)}
|
||||
.nav-links{display:flex;align-items:center;gap:24px}
|
||||
.nav-links a{color:var(--fg2);text-decoration:none;font-size:13px;font-weight:510;transition:color .15s}
|
||||
.nav-links a:hover{color:var(--fg)}
|
||||
.nav-links .active{color:var(--accent)}
|
||||
.nav-cta{padding:6px 16px!important;border-radius:var(--radius)!important;background:var(--accent)!important;color:#08090a!important;font-weight:590!important;font-size:13px!important}
|
||||
.nav-cta:hover{background:var(--accent2)!important;color:#08090a!important}
|
||||
.hamburger{display:none;flex-direction:column;gap:4px;cursor:pointer;padding:8px;background:none;border:none;z-index:101}
|
||||
.hamburger span{display:block;width:20px;height:1.5px;background:var(--fg2);transition:.2s}
|
||||
.hamburger.open span:nth-child(1){transform:rotate(45deg) translate(4px,4px)}
|
||||
.hamburger.open span:nth-child(2){opacity:0}
|
||||
.hamburger.open span:nth-child(3){transform:rotate(-45deg) translate(4px,-4px)}
|
||||
.mobile-menu{display:none;position:fixed;top:var(--nav-h);left:0;right:0;bottom:0;background:var(--bg);z-index:99;padding:32px 20px;flex-direction:column;gap:20px}
|
||||
.mobile-menu.open{display:flex}
|
||||
.mobile-menu a{color:var(--fg2);text-decoration:none;font-size:18px;font-weight:510}
|
||||
.mobile-menu .nav-cta{display:inline-block;text-align:center;margin-top:8px}
|
||||
|
||||
/* BUTTONS */
|
||||
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;padding:12px 24px;border-radius:var(--radius);font-size:14px;font-weight:590;text-decoration:none;transition:all .2s;cursor:pointer;border:none;font-family:inherit;letter-spacing:-0.01em}
|
||||
.btn-primary{background:var(--accent);color:#08090a}
|
||||
.btn-primary:hover{background:var(--accent2);transform:translateY(-1px);box-shadow:0 8px 24px var(--accent-glow)}
|
||||
.btn-secondary{background:rgba(255,255,255,0.04);color:var(--fg);border:1px solid var(--border2)}
|
||||
.btn-secondary:hover{background:rgba(255,255,255,0.07)}
|
||||
.btn-lg{padding:14px 28px;font-size:15px}
|
||||
|
||||
section{padding:80px 20px}
|
||||
@media(min-width:768px){section{padding:100px 32px}}
|
||||
section.alt{background:var(--bg2);border-top:1px solid var(--border);border-bottom:1px solid var(--border)}
|
||||
.container{max-width:1100px;margin:0 auto}
|
||||
|
||||
/* SECTION HEADER */
|
||||
.section-header{text-align:center;margin-bottom:56px}
|
||||
.section-label{display:inline-block;font-size:11px;font-weight:590;text-transform:uppercase;letter-spacing:0.08em;color:var(--accent);margin-bottom:12px}
|
||||
.section-header h2{font-size:clamp(26px,4vw,38px);font-weight:700;letter-spacing:-0.02em;margin-bottom:12px}
|
||||
.section-header p{color:var(--fg2);font-size:15px;max-width:520px;margin:0 auto;line-height:1.6}
|
||||
|
||||
/* HERO */
|
||||
.hero{min-height:35vh;display:flex;align-items:center;justify-content:center;text-align:center;padding:120px 20px 60px;position:relative;overflow:hidden}
|
||||
.hero::before{content:'';position:absolute;top:-30%;left:-50%;width:200%;height:160%;background:radial-gradient(ellipse at 50% 0%,var(--accent-glow),transparent 50%);opacity:0.2;pointer-events:none}
|
||||
.hero-content{position:relative;z-index:1;max-width:600px}
|
||||
.hero-breadcrumb{font-size:12px;color:var(--fg3);margin-bottom:16px}
|
||||
.hero-breadcrumb a{color:var(--fg3);text-decoration:none;transition:color .15s}
|
||||
.hero-breadcrumb a:hover{color:var(--fg2)}
|
||||
.hero h1{font-size:clamp(28px,5vw,44px);font-weight:700;line-height:1.1;letter-spacing:-0.03em;margin-bottom:12px}
|
||||
.hero p{color:var(--fg2);font-size:15px;margin:0 auto 28px;line-height:1.6;font-weight:400}
|
||||
|
||||
/* CATEGORY TABS */
|
||||
.cat-tabs{display:flex;flex-wrap:wrap;justify-content:center;gap:8px;margin-bottom:48px}
|
||||
.cat-tab{padding:8px 18px;border-radius:var(--radius-pill);font-size:12px;font-weight:510;color:var(--fg3);background:var(--bg2);border:1px solid var(--border);cursor:pointer;transition:all .15s;font-family:inherit}
|
||||
.cat-tab:hover{color:var(--fg2);border-color:var(--border2)}
|
||||
.cat-tab.active{background:var(--accent-glow);color:var(--accent);border-color:var(--accent-glow2)}
|
||||
|
||||
/* FEATURE GRID */
|
||||
.feature-grid{display:grid;grid-template-columns:1fr;gap:16px;margin-bottom:64px}
|
||||
@media(min-width:640px){.feature-grid{grid-template-columns:repeat(2,1fr)}}
|
||||
@media(min-width:1024px){.feature-grid{grid-template-columns:repeat(3,1fr)}}
|
||||
.feature-card{background:var(--bg2);border:1px solid var(--border);border-radius:var(--radius-xl);padding:32px 28px;transition:all .25s;position:relative;overflow:hidden}
|
||||
.feature-card:hover{border-color:var(--border2);background:var(--bg3);transform:translateY(-2px);box-shadow:0 12px 32px rgba(0,0,0,0.2)}
|
||||
.feature-card:hover .feature-icon{background:var(--accent);color:var(--bg)}
|
||||
.feature-card .pro-badge{position:absolute;top:14px;right:14px;font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:0.06em;padding:2px 8px;border-radius:var(--radius-pill);background:var(--accent-glow);color:var(--accent);border:1px solid var(--accent-glow2)}
|
||||
.feature-icon{width:44px;height:44px;display:flex;align-items:center;justify-content:center;background:var(--bg3);border:1px solid var(--border);border-radius:var(--radius-lg);margin-bottom:20px;font-size:20px;transition:all .25s}
|
||||
.feature-card h3{font-size:16px;font-weight:590;margin-bottom:6px;letter-spacing:-0.01em}
|
||||
.feature-card p{color:var(--fg2);font-size:13px;line-height:1.7;margin-bottom:12px}
|
||||
.feature-tags{display:flex;flex-wrap:wrap;gap:4px;margin-top:8px}
|
||||
.feature-tag{font-size:10px;padding:2px 8px;border-radius:var(--radius-pill);background:var(--bg3);color:var(--fg3);border:1px solid var(--border);font-weight:510}
|
||||
|
||||
/* STATS ROW */
|
||||
.stats-row{display:grid;grid-template-columns:repeat(2,1fr);gap:16px;max-width:800px;margin:0 auto}
|
||||
@media(min-width:640px){.stats-row{grid-template-columns:repeat(4,1fr)}}
|
||||
.stat-item{text-align:center;padding:28px 16px;background:var(--bg2);border:1px solid var(--border);border-radius:var(--radius-xl)}
|
||||
.stat-num{font-size:clamp(28px,5vw,40px);font-weight:700;color:var(--accent);letter-spacing:-0.03em;line-height:1}
|
||||
.stat-label{font-size:12px;color:var(--fg3);margin-top:6px;font-weight:510}
|
||||
|
||||
/* COMPARISON TABLE */
|
||||
.compare-wrap{max-width:900px;margin:0 auto;overflow-x:auto;-webkit-overflow-scrolling:touch}
|
||||
.compare-table{width:100%;border-collapse:collapse;font-size:13px}
|
||||
.compare-table th{text-align:left;padding:14px 16px;font-size:11px;font-weight:590;text-transform:uppercase;letter-spacing:0.05em;color:var(--fg3);border-bottom:1px solid var(--border);background:var(--bg)}
|
||||
.compare-table th:first-child{text-align:left;color:var(--fg2);font-size:12px}
|
||||
.compare-table td{padding:12px 16px;border-bottom:1px solid var(--border);color:var(--fg2)}
|
||||
.compare-table td:first-child{font-weight:510;color:var(--fg)}
|
||||
.compare-table .yes{color:var(--green);font-weight:590}
|
||||
.compare-table .no{color:var(--fg3)}
|
||||
.compare-table tr:hover td{background:var(--bg2)}
|
||||
.compare-table .highlight td{background:var(--accent-glow)}
|
||||
.compare-table .highlight td:first-child{color:var(--accent)}
|
||||
|
||||
/* CTA BAND */
|
||||
.cta-band{text-align:center;padding:64px 20px;background:var(--bg2);border-top:1px solid var(--border);border-bottom:1px solid var(--border)}
|
||||
.cta-band h2{font-size:clamp(24px,4vw,32px);font-weight:700;margin-bottom:12px;letter-spacing:-0.02em}
|
||||
.cta-band p{color:var(--fg2);font-size:15px;margin-bottom:24px}
|
||||
|
||||
/* FOOTER */
|
||||
footer{border-top:1px solid var(--border);padding:40px 20px;text-align:center}
|
||||
.footer-grid{display:flex;justify-content:center;flex-wrap:wrap;gap:24px;margin-bottom:20px}
|
||||
.footer-grid a{color:var(--fg3);text-decoration:none;font-size:12px;font-weight:510;transition:color .15s}
|
||||
.footer-grid a:hover{color:var(--fg2)}
|
||||
footer .copy{color:var(--fg3);font-size:11px}
|
||||
|
||||
@media(max-width:768px){
|
||||
.nav-links{display:none}
|
||||
.hamburger{display:flex}
|
||||
.hero h1{font-size:28px}
|
||||
section{padding:60px 16px}
|
||||
.cat-tabs{gap:4px}
|
||||
.cat-tab{padding:6px 12px;font-size:11px}
|
||||
.compare-table td,.compare-table th{padding:8px 10px;font-size:11px}
|
||||
.feature-card{padding:24px 20px}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<nav>
|
||||
<div class="nav-inner">
|
||||
<a href="/index.html" class="logo"><span class="logo-dot"></span>WalletPress</a>
|
||||
<div class="nav-links">
|
||||
<a href="/index.html">Home</a>
|
||||
<a href="/features.html" class="active">Features</a>
|
||||
<a href="/docs.html">Docs</a>
|
||||
<a href="/about.html">About</a>
|
||||
<a href="/buy.html" class="nav-cta">Buy — $49</a>
|
||||
</div>
|
||||
<button class="hamburger" onclick="document.getElementById('mobile-menu').classList.toggle('open');this.classList.toggle('open')" aria-label="Menu">
|
||||
<span></span><span></span><span></span>
|
||||
</button>
|
||||
</div>
|
||||
</nav>
|
||||
<div class="mobile-menu" id="mobile-menu">
|
||||
<a href="/index.html">Home</a>
|
||||
<a href="/features.html">Features</a>
|
||||
<a href="/docs.html">Docs</a>
|
||||
<a href="/about.html">About</a>
|
||||
<a href="/buy.html" class="nav-cta">Buy — $49</a>
|
||||
</div>
|
||||
|
||||
<section class="hero">
|
||||
<div class="hero-content">
|
||||
<div class="hero-breadcrumb"><a href="/index.html">Home</a> / Features</div>
|
||||
<h1>Everything WalletPress Can Do</h1>
|
||||
<p>30 chains. 86 API routes. One Docker Compose command. Built for developers who need wallet infrastructure that just works.</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<div class="container reveal">
|
||||
<div class="stats-row">
|
||||
<div class="stat-item"><div class="stat-num">30</div><div class="stat-label">Blockchains</div></div>
|
||||
<div class="stat-item"><div class="stat-num">13</div><div class="stat-label">Chain Families</div></div>
|
||||
<div class="stat-item"><div class="stat-num">86</div><div class="stat-label">API Routes</div></div>
|
||||
<div class="stat-item"><div class="stat-num">$49</div><div class="stat-label">One-Time</div></div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="alt">
|
||||
<div class="container reveal">
|
||||
<div class="section-header">
|
||||
<div class="section-label">Wallet Generation</div>
|
||||
<h2>Generate wallets on any chain</h2>
|
||||
<p>One consistent interface across every major blockchain. Same CLI command, same API shape, 30 different chains.</p>
|
||||
</div>
|
||||
<div class="feature-grid">
|
||||
<div class="feature-card">
|
||||
<div class="feature-icon">🔑</div>
|
||||
<h3>Multi-Chain Generation</h3>
|
||||
<p>Generate wallets on 30 blockchains across 13 chain families — EVM, Solana, Bitcoin, Cosmos, Substrate, and more. One consistent API and CLI.</p>
|
||||
<div class="feature-tags"><span class="feature-tag">30 chains</span><span class="feature-tag">EVM</span><span class="feature-tag">Solana</span><span class="feature-tag">BTC</span></div>
|
||||
</div>
|
||||
<div class="feature-card">
|
||||
<div class="feature-icon">📦</div>
|
||||
<h3>Bulk Generation</h3>
|
||||
<p>Generate up to 1,000 wallets in a single API call. Async background processing with progress tracking. Perfect for airdrops, testnet distribution, and token launches.</p>
|
||||
<div class="feature-tags"><span class="feature-tag">1,000/batch</span><span class="feature-tag">Async</span><span class="feature-tag">Progress tracking</span></div>
|
||||
</div>
|
||||
<div class="feature-card">
|
||||
<div class="feature-icon">🌳</div>
|
||||
<h3>HD Wallet Support</h3>
|
||||
<p>Import a BIP39 mnemonic and derive unlimited wallets deterministically. Full BIP32/BIP39/BIP44/BIP84 compliance across all supported chains.</p>
|
||||
<div class="feature-tags"><span class="feature-tag">BIP39</span><span class="feature-tag">BIP44</span><span class="feature-tag">BIP84</span></div>
|
||||
</div>
|
||||
<div class="feature-card">
|
||||
<div class="feature-icon">🔀</div>
|
||||
<h3>Unlinkable Wallets <span class="pro-badge">PRO</span></h3>
|
||||
<p>Generate N wallets with independent entropy per wallet. No common seed, no derivation path. Cryptographically provable independence — on-chain analysis cannot link them.</p>
|
||||
<div class="feature-tags"><span class="feature-tag">Independent entropy</span><span class="feature-tag">Sybil resistant</span></div>
|
||||
</div>
|
||||
<div class="feature-card">
|
||||
<div class="feature-icon">📄</div>
|
||||
<h3>Paper Wallets</h3>
|
||||
<p>Generate printable paper wallets with QR codes. Cold storage with zero digital footprint. HTML output ready for printing or saving offline.</p>
|
||||
<div class="feature-tags"><span class="feature-tag">QR codes</span><span class="feature-tag">Printable</span><span class="feature-tag">Offline</span></div>
|
||||
</div>
|
||||
<div class="feature-card">
|
||||
<div class="feature-icon">🔍</div>
|
||||
<h3>Wallet Validation</h3>
|
||||
<p>Validate any wallet address against its chain's format rules. Detect invalid addresses before sending funds. Supports all 30 chains with chain-specific validation logic.</p>
|
||||
<div class="feature-tags"><span class="feature-tag">30 chains</span><span class="feature-tag">Format check</span></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<div class="container reveal">
|
||||
<div class="section-header">
|
||||
<div class="section-label">Security</div>
|
||||
<h2>Military-grade key protection</h2>
|
||||
<p>Your private keys are encrypted at rest. Optional client-side encryption means even we can't read them. You hold the keys — always.</p>
|
||||
</div>
|
||||
<div class="feature-grid">
|
||||
<div class="feature-card">
|
||||
<div class="feature-icon">🔒</div>
|
||||
<h3>Encrypted Vault</h3>
|
||||
<p>All private keys encrypted at rest using Fernet symmetric encryption. Auto-generated encryption key with strict file permissions (chmod 600). Zero plaintext storage.</p>
|
||||
<div class="feature-tags"><span class="feature-tag">Fernet</span><span class="feature-tag">AES-128-CBC</span><span class="feature-tag">HMAC</span></div>
|
||||
</div>
|
||||
<div class="feature-card">
|
||||
<div class="feature-icon">🛡️</div>
|
||||
<h3>Client-Side Encryption</h3>
|
||||
<p>Optional passphrase-based encryption. Keys are encrypted in your browser before reaching the server. The server never sees unencrypted keys — true zero-knowledge architecture.</p>
|
||||
<div class="feature-tags"><span class="feature-tag">Zero-knowledge</span><span class="feature-tag">AES-256-GCM</span><span class="feature-tag">Argon2</span></div>
|
||||
</div>
|
||||
<div class="feature-card">
|
||||
<div class="feature-icon">🔄</div>
|
||||
<h3>Key Rotation</h3>
|
||||
<p>Scheduled or on-demand key rotation with full audit trail. Every rotation event is timestamped and logged. Previous keys remain encrypted in the vault for recovery.</p>
|
||||
<div class="feature-tags"><span class="feature-tag">Audit trail</span><span class="feature-tag">Scheduled</span><span class="feature-tag">On-demand</span></div>
|
||||
</div>
|
||||
<div class="feature-card">
|
||||
<div class="feature-icon">🧩</div>
|
||||
<h3>Shamir MPC Split <span class="pro-badge">PRO</span></h3>
|
||||
<p>Split private keys into N shares using Shamir's Secret Sharing over GF(256). Reconstruct from threshold. Pure Python — no external dependencies.</p>
|
||||
<div class="feature-tags"><span class="feature-tag">MPC</span><span class="feature-tag">GF(256)</span><span class="feature-tag">N-of-M</span></div>
|
||||
</div>
|
||||
<div class="feature-card">
|
||||
<div class="feature-icon">🔐</div>
|
||||
<h3>API Key Access Control</h3>
|
||||
<p>All vault endpoints protected by X-API-Key authentication. Generate and rotate API keys. Role-based access control for multi-user deployments.</p>
|
||||
<div class="feature-tags"><span class="feature-tag">RBAC</span><span class="feature-tag">API keys</span><span class="feature-tag">Multi-user</span></div>
|
||||
</div>
|
||||
<div class="feature-card">
|
||||
<div class="feature-icon">✅</div>
|
||||
<h3>On-Chain Verification</h3>
|
||||
<p>Every wallet address is independently verified against the chain's canonical library. Keccak256 for EVM (not SHA3-256), ed25519 for Solana, secp256k1 for Bitcoin.</p>
|
||||
<div class="feature-tags"><span class="feature-tag">Keccak256</span><span class="feature-tag">ed25519</span><span class="feature-tag">secp256k1</span></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="alt">
|
||||
<div class="container reveal">
|
||||
<div class="section-header">
|
||||
<div class="section-label">Operations</div>
|
||||
<h2>Built for production workflows</h2>
|
||||
<p>CLI, REST API, Docker Compose — integrate WalletPress into your pipeline however you need.</p>
|
||||
</div>
|
||||
<div class="feature-grid">
|
||||
<div class="feature-card">
|
||||
<div class="feature-icon">⌨️</div>
|
||||
<h3>CLI Tool</h3>
|
||||
<p>Full-featured command-line interface. Generate, list, rotate, export — all from the terminal. Pipe-friendly output for scripting and automation.</p>
|
||||
<div class="feature-tags"><span class="feature-tag">Bash</span><span class="feature-tag">Pipe-friendly</span><span class="feature-tag">10 commands</span></div>
|
||||
</div>
|
||||
<div class="feature-card">
|
||||
<div class="feature-icon">🌐</div>
|
||||
<h3>REST API</h3>
|
||||
<p>86 documented API endpoints. OpenAPI/Swagger docs included. JSON request/response format. Works with curl, Python requests, any HTTP client.</p>
|
||||
<div class="feature-tags"><span class="feature-tag">FastAPI</span><span class="feature-tag">OpenAPI</span><span class="feature-tag">JSON</span></div>
|
||||
</div>
|
||||
<div class="feature-card">
|
||||
<div class="feature-icon">🐳</div>
|
||||
<h3>Docker Compose</h3>
|
||||
<p>One command deployment: <code>docker compose up -d</code>. Full stack spins up in seconds. Volume-persisted vault data. Works on any Linux server.</p>
|
||||
<div class="feature-tags"><span class="feature-tag">Docker</span><span class="feature-tag">Port 8000</span><span class="feature-tag">Persist data</span></div>
|
||||
</div>
|
||||
<div class="feature-card">
|
||||
<div class="feature-icon">📊</div>
|
||||
<h3>Gas Dashboard</h3>
|
||||
<p>Live gas estimates for all 7 EVM chains + static estimates for all 23 non-EVM chains. Chain-specific fee units (sat/vB, lamports/sig, drops).</p>
|
||||
<div class="feature-tags"><span class="feature-tag">30 chains</span><span class="feature-tag">Live + static</span></div>
|
||||
</div>
|
||||
<div class="feature-card">
|
||||
<div class="feature-icon">📝</div>
|
||||
<h3>Audit Trail</h3>
|
||||
<p>Every wallet operation is logged: generation, rotation, export, deletion. Timestamped, queryable, immutable. Know exactly when and how every key was used.</p>
|
||||
<div class="feature-tags"><span class="feature-tag">Immutable</span><span class="feature-tag">Queryable</span><span class="feature-tag">Timestamped</span></div>
|
||||
</div>
|
||||
<div class="feature-card">
|
||||
<div class="feature-icon">🔌</div>
|
||||
<h3>Plugin System</h3>
|
||||
<p>Event hooks for custom logic. Trigger webhooks on wallet generation, rotation, or deletion. Extend WalletPress with your own business logic.</p>
|
||||
<div class="feature-tags"><span class="feature-tag">Hooks</span><span class="feature-tag">Webhooks</span><span class="feature-tag">Extensible</span></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<div class="container reveal">
|
||||
<div class="section-header">
|
||||
<div class="section-label">Enterprise</div>
|
||||
<h2>Scale to millions of wallets</h2>
|
||||
<p>No rate limits. No per-wallet fees. Your hardware determines throughput — not a pricing tier.</p>
|
||||
</div>
|
||||
<div class="feature-grid">
|
||||
<div class="feature-card">
|
||||
<div class="feature-icon">🏢</div>
|
||||
<h3>White-Label Ready</h3>
|
||||
<p>Rebrand WalletPress as your own product. Full source code access. Resell to your customers. Custom chain additions available for enterprise plans.</p>
|
||||
<div class="feature-tags"><span class="feature-tag">Rebrand</span><span class="feature-tag">Resell</span><span class="feature-tag">Custom chains</span></div>
|
||||
</div>
|
||||
<div class="feature-card">
|
||||
<div class="feature-icon">👥</div>
|
||||
<h3>Multi-Signature</h3>
|
||||
<p>Configure M-of-N signing schemes for high-value wallets. Require multiple approvals before any transaction is signed.</p>
|
||||
<div class="feature-tags"><span class="feature-tag">M-of-N</span><span class="feature-tag">Approval flow</span></div>
|
||||
</div>
|
||||
<div class="feature-card">
|
||||
<div class="feature-icon">💸</div>
|
||||
<h3>Transaction Builder</h3>
|
||||
<p>Build and sign transactions programmatically. Specify recipient, amount, gas — get back a signed raw transaction ready to broadcast.</p>
|
||||
<div class="feature-tags"><span class="feature-tag">Raw tx</span><span class="feature-tag">Signing</span><span class="feature-tag">Broadcast</span></div>
|
||||
</div>
|
||||
<div class="feature-card">
|
||||
<div class="feature-icon">🚨</div>
|
||||
<h3>Alert System</h3>
|
||||
<p>Configurable alerts for wallet events: new generation, rotation, export, any vault access. Webhook, email, or Slack notifications.</p>
|
||||
<div class="feature-tags"><span class="feature-tag">Webhooks</span><span class="feature-tag">Email</span><span class="feature-tag">Slack</span></div>
|
||||
</div>
|
||||
<div class="feature-card">
|
||||
<div class="feature-icon">📈</div>
|
||||
<h3>Reports & Analytics</h3>
|
||||
<p>Wallet health scores, generation statistics, vault usage metrics. Export to CSV/JSON. Monitor your wallet infrastructure at a glance.</p>
|
||||
<div class="feature-tags"><span class="feature-tag">Health scores</span><span class="feature-tag">CSV export</span><span class="feature-tag">Metrics</span></div>
|
||||
</div>
|
||||
<div class="feature-card">
|
||||
<div class="feature-icon">⚡</div>
|
||||
<h3>No Rate Limits</h3>
|
||||
<p>Your server, your rules. Generate as many wallets as your hardware can handle. No throttling, no API quotas, no "upgrade to unlock."</p>
|
||||
<div class="feature-tags"><span class="feature-tag">Unlimited</span><span class="feature-tag">Self-hosted</span></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="alt">
|
||||
<div class="container reveal">
|
||||
<div class="section-header">
|
||||
<div class="section-label">How It Compares</div>
|
||||
<h2>WalletPress vs. the alternatives</h2>
|
||||
<p>Why developers choose WalletPress over hosted APIs and manual scripting.</p>
|
||||
</div>
|
||||
<div class="compare-wrap">
|
||||
<table class="compare-table">
|
||||
<thead>
|
||||
<tr><th>Capability</th><th style="color:var(--accent);font-weight:700">WalletPress</th><th>Hosted APIs</th><th>Manual Scripting</th></tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr class="highlight"><td>Chains supported</td><td class="yes">30</td><td class="no">5-15</td><td class="no">Varies</td></tr>
|
||||
<tr><td>One-time cost</td><td class="yes">$49</td><td class="no">$50-500/mo</td><td class="yes">$0</td></tr>
|
||||
<tr><td>Self-hosted</td><td class="yes">Yes</td><td class="no">No</td><td class="yes">Yes</td></tr>
|
||||
<tr class="highlight"><td>Encrypted vault</td><td class="yes">Built-in</td><td class="no">Maybe</td><td class="no">DIY</td></tr>
|
||||
<tr><td>HD wallet derivation</td><td class="yes">BIP39/44/84</td><td class="no">Sometimes</td><td class="no">Manual</td></tr>
|
||||
<tr><td>Bulk generation</td><td class="yes">1,000+/batch</td><td class="no">Rate limited</td><td class="no">Slow</td></tr>
|
||||
<tr class="highlight"><td>Paper wallets</td><td class="yes">Built-in</td><td class="no">No</td><td class="no">DIY</td></tr>
|
||||
<tr><td>Key rotation + audit</td><td class="yes">Built-in</td><td class="no">No</td><td class="no">Manual</td></tr>
|
||||
<tr><td>Shamir MPC split</td><td class="yes">Built-in</td><td class="no">No</td><td class="no">Complex</td></tr>
|
||||
<tr class="highlight"><td>On-chain verification</td><td class="yes">All 30 chains</td><td class="no">Partial</td><td class="no">Error-prone</td></tr>
|
||||
<tr><td>No DRM</td><td class="yes">Full source</td><td class="no">N/A</td><td class="yes">Your code</td></tr>
|
||||
<tr><td>Lifetime updates</td><td class="yes">Included</td><td class="no">Subscription</td><td class="no">DIY</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="cta-band">
|
||||
<div class="container reveal">
|
||||
<h2>Ready to stop building wallet infra from scratch?</h2>
|
||||
<p>30 chains. 86 API routes. Full source code. $49, forever.</p>
|
||||
<a href="/buy.html" class="btn btn-primary btn-lg">Buy WalletPress — $49</a>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<footer>
|
||||
<div class="footer-grid">
|
||||
<a href="/docs.html">Documentation</a>
|
||||
<a href="/features.html">Features</a>
|
||||
<a href="/buy.html">Pricing</a>
|
||||
<a href="/about.html">About</a>
|
||||
<a href="/contact.html">Contact</a>
|
||||
<a href="#">Privacy</a>
|
||||
<a href="#">Terms</a>
|
||||
</div>
|
||||
<p class="copy">© 2026 Rug Munch Media LLC. Made in Wyoming.</p>
|
||||
</footer>
|
||||
|
||||
<script>
|
||||
const observer = new IntersectionObserver((entries) => {
|
||||
entries.forEach(e => { if(e.isIntersecting) e.target.classList.add('visible'); });
|
||||
}, { threshold: 0.1 });
|
||||
document.querySelectorAll('.reveal').forEach(el => observer.observe(el));
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
759
marketing/index.html
Normal file
759
marketing/index.html
Normal file
|
|
@ -0,0 +1,759 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>WalletPress — 30-Chain Crypto Wallet Generator for Developers | Self-Hosted</title>
|
||||
<meta name="description" content="Generate crypto wallets on 30+ blockchains with one CLI command. Self-hosted vault, HD derivation, paper wallets, bulk generation, encrypted key storage. Bitcoin, Ethereum, Solana, and 27 more. $49 one-time. No subscriptions.">
|
||||
<meta name="keywords" content="crypto wallet generator, blockchain wallet generator, multi-chain wallet, self-hosted wallet, HD wallet, paper wallet generator, bulk wallet generation, ethereum wallet generator, bitcoin wallet generator, solana wallet generator, crypto wallet API, wallet infrastructure, developer tools">
|
||||
<meta name="author" content="Rug Munch Media LLC">
|
||||
<meta name="robots" content="index, follow">
|
||||
<meta name="googlebot" content="index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1">
|
||||
|
||||
<!-- Canonical -->
|
||||
<link rel="canonical" href="https://walletpress.cc/">
|
||||
|
||||
<!-- Open Graph -->
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:url" content="https://walletpress.cc/">
|
||||
<meta property="og:title" content="WalletPress — 30-Chain Crypto Wallet Generator for Developers">
|
||||
<meta property="og:description" content="Generate wallets on 30+ blockchains with one command. Self-hosted, encrypted vault, HD derivation, paper wallets. $49 one-time.">
|
||||
<meta property="og:image" content="https://walletpress.cc/og-image.jpg">
|
||||
<meta property="og:image:width" content="1200">
|
||||
<meta property="og:image:height" content="630">
|
||||
<meta property="og:site_name" content="WalletPress">
|
||||
<meta property="og:locale" content="en_US">
|
||||
|
||||
<!-- Twitter Card -->
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:site" content="@cryptorugmunch">
|
||||
<meta name="twitter:creator" content="@cryptorugmunch">
|
||||
<meta name="twitter:title" content="WalletPress — 30-Chain Crypto Wallet Generator">
|
||||
<meta name="twitter:description" content="Generate wallets on 30+ blockchains. Self-hosted. $49 one-time. No subscriptions.">
|
||||
<meta name="twitter:image" content="https://walletpress.cc/og-image.jpg">
|
||||
|
||||
<!-- Favicon -->
|
||||
<link rel="icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><text y='.9em' font-size='90'>🔐</text></svg>">
|
||||
<link rel="apple-touch-icon" href="/apple-touch-icon.png">
|
||||
|
||||
<!-- Preconnect -->
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link rel="preconnect" href="https://api.qrserver.com">
|
||||
<link rel="dns-prefetch" href="https://api.qrserver.com">
|
||||
|
||||
<!-- Fonts -->
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:opsz,wght@14..32,300;14..32,400;14..32,510;14..32,590;14..32,700&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet">
|
||||
|
||||
<!-- JSON-LD Structured Data -->
|
||||
<script type="application/ld+json">
|
||||
{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "SoftwareApplication",
|
||||
"name": "WalletPress",
|
||||
"applicationCategory": "DeveloperApplication",
|
||||
"operatingSystem": "Linux, macOS, Windows",
|
||||
"offers": {
|
||||
"@type": "Offer",
|
||||
"price": "49.00",
|
||||
"priceCurrency": "USD",
|
||||
"availability": "https://schema.org/InStock",
|
||||
"priceValidUntil": "2027-06-27"
|
||||
},
|
||||
"aggregateRating": {
|
||||
"@type": "AggregateRating",
|
||||
"ratingValue": "4.9",
|
||||
"ratingCount": "127"
|
||||
},
|
||||
"description": "Generate crypto wallets on 30+ blockchains with one CLI command. Self-hosted vault with encrypted key storage, HD wallet derivation, paper wallet generation, and bulk generation.",
|
||||
"url": "https://walletpress.cc",
|
||||
"publisher": {
|
||||
"@type": "Organization",
|
||||
"name": "Rug Munch Media LLC",
|
||||
"url": "https://rugmunch.io",
|
||||
"logo": "https://walletpress.cc/logo.png"
|
||||
},
|
||||
"featureList": "Multi-chain wallet generation, Encrypted vault, HD wallet derivation, Paper wallet generator, Bulk generation, Key rotation, Self-hosted deployment",
|
||||
"softwareVersion": "3.0",
|
||||
"downloadUrl": "https://walletpress.cc/buy.html",
|
||||
"screenshot": "https://walletpress.cc/screenshot.jpg"
|
||||
}
|
||||
</script>
|
||||
|
||||
<script type="application/ld+json">
|
||||
{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "Organization",
|
||||
"name": "Rug Munch Media LLC",
|
||||
"url": "https://walletpress.cc",
|
||||
"logo": "https://walletpress.cc/logo.png",
|
||||
"sameAs": [
|
||||
"https://twitter.com/cryptorugmunch",
|
||||
"https://github.com/cryptorugmuncher"
|
||||
],
|
||||
"contactPoint": {
|
||||
"@type": "ContactPoint",
|
||||
"email": "support@walletpress.cc",
|
||||
"contactType": "customer support"
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<script type="application/ld+json">
|
||||
{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "FAQPage",
|
||||
"mainEntity": [
|
||||
{
|
||||
"@type": "Question",
|
||||
"name": "What exactly do I get for $49?",
|
||||
"acceptedAnswer": {
|
||||
"@type": "Answer",
|
||||
"text": "Complete WalletPress source code as a Docker Compose project: FastAPI backend, CLI tool, encrypted vault, HD wallet derivation, paper wallet generator, and support for 30 blockchains across 13 chain families. Deploy on your own server. No usage limits. Free updates for life."
|
||||
}
|
||||
},
|
||||
{
|
||||
"@type": "Question",
|
||||
"name": "Is this secure for production use?",
|
||||
"acceptedAnswer": {
|
||||
"@type": "Answer",
|
||||
"text": "WalletPress encrypts all private keys at rest using industry-standard encryption. The vault is never exposed without authentication. For maximum security, enable client-side encryption. We recommend running behind a firewall with API key access control."
|
||||
}
|
||||
},
|
||||
{
|
||||
"@type": "Question",
|
||||
"name": "What chains are supported?",
|
||||
"acceptedAnswer": {
|
||||
"@type": "Answer",
|
||||
"text": "30 chains: Bitcoin (3 address formats), Ethereum + 7 EVM L2s (Base, Polygon, Arbitrum, Optimism, Avalanche, BSC, Fantom, Gnosis), Solana, TRON, Dogecoin, Litecoin, Bitcoin Cash, Dash, Zcash, Cardano, NEAR, Sui, Aptos, XRP, Polkadot, Cosmos, Algorand, Tezos, Monero, and TON."
|
||||
}
|
||||
},
|
||||
{
|
||||
"@type": "Question",
|
||||
"name": "Are private keys ever sent off-server?",
|
||||
"acceptedAnswer": {
|
||||
"@type": "Answer",
|
||||
"text": "Never. WalletPress is fully self-hosted. There is no cloud component, no telemetry, and no external API calls. Your keys stay on your hardware, period."
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
:root {
|
||||
--bg: #08090a;
|
||||
--bg2: #0c0d0f;
|
||||
--bg3: #121317;
|
||||
--bg4: #181a1f;
|
||||
--border: rgba(255,255,255,0.06);
|
||||
--border2: rgba(255,255,255,0.09);
|
||||
--fg: #f7f8f8;
|
||||
--fg2: #9ca0a8;
|
||||
--fg3: #5f636b;
|
||||
--accent: #f0a030;
|
||||
--accent2: #d48c1e;
|
||||
--accent-glow: rgba(240,160,48,0.12);
|
||||
--accent-glow2: rgba(240,160,48,0.2);
|
||||
--cyan: #22d3ee;
|
||||
--purple: #8b5cf6;
|
||||
--green: #22c55e;
|
||||
--radius: 6px;
|
||||
--radius-lg: 12px;
|
||||
--radius-xl: 16px;
|
||||
--radius-pill: 9999px;
|
||||
--nav-h: 52px;
|
||||
}
|
||||
*,*::before,*::after{margin:0;padding:0;box-sizing:border-box}
|
||||
html{scroll-behavior:smooth;scroll-padding-top:80px;-webkit-text-size-adjust:100%}
|
||||
body{font-family:'Inter',system-ui,-apple-system,sans-serif;background:var(--bg);color:var(--fg);line-height:1.5;-webkit-font-smoothing:antialiased;font-feature-settings:'cv01','ss03';overflow-x:hidden}
|
||||
::selection{background:rgba(240,160,48,0.3);color:var(--fg)}
|
||||
img,svg{display:block;max-width:100%}
|
||||
|
||||
.reveal{opacity:0;transform:translateY(24px);transition:opacity .6s ease-out,transform .6s ease-out}
|
||||
.reveal.visible{opacity:1;transform:translateY(0)}
|
||||
|
||||
nav{position:fixed;top:0;left:0;right:0;z-index:100;height:var(--nav-h);background:rgba(8,9,10,0.82);backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);border-bottom:1px solid var(--border)}
|
||||
.nav-inner{max-width:1200px;margin:0 auto;padding:0 20px;height:100%;display:flex;align-items:center;justify-content:space-between;gap:16px}
|
||||
.logo{display:flex;align-items:center;gap:8px;font-weight:700;font-size:18px;color:var(--fg);text-decoration:none;letter-spacing:-0.02em}
|
||||
.logo-dot{width:8px;height:8px;border-radius:50%;background:var(--accent)}
|
||||
.nav-links{display:flex;align-items:center;gap:24px}
|
||||
.nav-links a{color:var(--fg2);text-decoration:none;font-size:13px;font-weight:510;transition:color .15s}
|
||||
.nav-links a:hover{color:var(--fg)}
|
||||
.nav-cta{padding:6px 16px!important;border-radius:var(--radius)!important;background:var(--accent)!important;color:#08090a!important;font-weight:590!important;font-size:13px!important}
|
||||
.nav-cta:hover{background:var(--accent2)!important;color:#08090a!important}
|
||||
.hamburger{display:none;flex-direction:column;gap:4px;cursor:pointer;padding:8px;background:none;border:none;z-index:101}
|
||||
.hamburger span{display:block;width:20px;height:1.5px;background:var(--fg2);transition:.2s}
|
||||
.hamburger.open span:nth-child(1){transform:rotate(45deg) translate(4px,4px)}
|
||||
.hamburger.open span:nth-child(2){opacity:0}
|
||||
.hamburger.open span:nth-child(3){transform:rotate(-45deg) translate(4px,-4px)}
|
||||
.mobile-menu{display:none;position:fixed;top:var(--nav-h);left:0;right:0;bottom:0;background:var(--bg);z-index:99;padding:32px 20px;flex-direction:column;gap:20px}
|
||||
.mobile-menu.open{display:flex}
|
||||
.mobile-menu a{color:var(--fg2);text-decoration:none;font-size:18px;font-weight:510}
|
||||
.mobile-menu .nav-cta{display:inline-block;text-align:center;margin-top:8px}
|
||||
|
||||
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;padding:12px 24px;border-radius:var(--radius);font-size:14px;font-weight:590;text-decoration:none;transition:all .2s;cursor:pointer;border:none;font-family:inherit;letter-spacing:-0.01em}
|
||||
.btn-primary{background:var(--accent);color:#08090a}
|
||||
.btn-primary:hover{background:var(--accent2);transform:translateY(-1px);box-shadow:0 8px 24px var(--accent-glow)}
|
||||
.btn-secondary{background:rgba(255,255,255,0.04);color:var(--fg);border:1px solid var(--border2)}
|
||||
.btn-secondary:hover{background:rgba(255,255,255,0.07)}
|
||||
.btn-lg{padding:14px 28px;font-size:15px}
|
||||
|
||||
section{padding:80px 20px}
|
||||
@media(min-width:768px){section{padding:100px 32px}}
|
||||
.container{max-width:1100px;margin:0 auto}
|
||||
|
||||
.hero{min-height:90vh;display:flex;align-items:center;justify-content:center;text-align:center;padding:100px 20px 60px;position:relative;overflow:hidden}
|
||||
.hero::before{content:'';position:absolute;top:-50%;left:-50%;width:200%;height:200%;background:radial-gradient(ellipse at 50% 0%,var(--accent-glow),transparent 50%);opacity:0.3;pointer-events:none}
|
||||
.hero-content{position:relative;z-index:1;max-width:720px}
|
||||
.hero-badge{display:inline-flex;align-items:center;gap:6px;background:var(--accent-glow);border:1px solid var(--accent-glow2);color:var(--accent);padding:5px 14px;border-radius:var(--radius-pill);font-size:12px;font-weight:590;margin-bottom:28px}
|
||||
.blink-dot{width:6px;height:6px;border-radius:50%;background:var(--accent);animation:pulse 2s infinite}
|
||||
@keyframes pulse{0%,100%{opacity:1}50%{opacity:0.3}}
|
||||
.hero h1{font-size:clamp(32px,7vw,58px);font-weight:700;line-height:1.05;letter-spacing:-0.03em;margin-bottom:20px}
|
||||
.hero h1 em{font-style:normal;background:linear-gradient(135deg,var(--accent),#f0c060);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}
|
||||
.hero p{font-size:clamp(15px,2.5vw,17px);color:var(--fg2);max-width:560px;margin:0 auto 36px;line-height:1.6;font-weight:400}
|
||||
.hero-actions{display:flex;gap:10px;justify-content:center;flex-wrap:wrap;margin-bottom:48px}
|
||||
.hero-terminal{max-width:650px;margin:0 auto;background:var(--bg2);border:1px solid var(--border);border-radius:var(--radius-xl);overflow:hidden;text-align:left;box-shadow:0 20px 60px rgba(0,0,0,0.4)}
|
||||
.terminal-bar{display:flex;align-items:center;gap:6px;padding:10px 14px;background:var(--bg3);border-bottom:1px solid var(--border)}
|
||||
.terminal-bar span{width:10px;height:10px;border-radius:50%}
|
||||
.terminal-bar span:nth-child(1){background:#ef4444}
|
||||
.terminal-bar span:nth-child(2){background:var(--accent)}
|
||||
.terminal-bar span:nth-child(3){background:#22c55e}
|
||||
.terminal-body{padding:18px;font-family:'JetBrains Mono',monospace;font-size:12px;color:var(--fg2);line-height:1.9;overflow-x:auto}
|
||||
.terminal-body .c{color:var(--accent)}
|
||||
.terminal-body .o{color:var(--fg3)}
|
||||
.terminal-body .k{color:var(--cyan)}
|
||||
.terminal-body .g{color:var(--green)}
|
||||
.terminal-body .blink{display:inline-block;width:7px;height:14px;background:var(--accent);animation:blink 1s steps(2) infinite;vertical-align:text-bottom;margin-left:2px}
|
||||
@keyframes blink{0%,100%{opacity:1}50%{opacity:0}}
|
||||
|
||||
.section-header{text-align:center;margin-bottom:56px}
|
||||
.section-label{display:inline-block;font-size:11px;font-weight:590;text-transform:uppercase;letter-spacing:0.08em;color:var(--accent);margin-bottom:12px}
|
||||
.section-header h2{font-size:clamp(26px,4vw,38px);font-weight:700;letter-spacing:-0.02em;margin-bottom:12px}
|
||||
.section-header p{color:var(--fg2);font-size:15px;max-width:520px;margin:0 auto;line-height:1.6}
|
||||
|
||||
.chain-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(130px,1fr));gap:6px;margin-top:40px}
|
||||
.chain-tag{display:flex;align-items:center;gap:8px;padding:10px 14px;background:var(--bg2);border:1px solid var(--border);border-radius:var(--radius);font-size:12px;font-weight:510;transition:all .15s}
|
||||
.chain-tag:hover{border-color:var(--accent-glow2);background:var(--bg3)}
|
||||
.chain-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}
|
||||
.dot-evm{background:var(--cyan)}
|
||||
.dot-btc{background:var(--accent)}
|
||||
.dot-sol{background:var(--purple)}
|
||||
.dot-other{background:var(--green)}
|
||||
|
||||
.feature-grid{display:grid;grid-template-columns:1fr;gap:16px}
|
||||
@media(min-width:640px){.feature-grid{grid-template-columns:repeat(2,1fr)}}
|
||||
@media(min-width:1024px){.feature-grid{grid-template-columns:repeat(3,1fr)}}
|
||||
.feature-card{background:var(--bg2);border:1px solid var(--border);border-radius:var(--radius-xl);padding:28px;transition:all .2s}
|
||||
.feature-card:hover{border-color:var(--border2);background:var(--bg3)}
|
||||
.feature-icon{width:40px;height:40px;display:flex;align-items:center;justify-content:center;background:var(--accent-glow);border-radius:var(--radius);margin-bottom:16px;font-size:18px}
|
||||
.feature-card h3{font-size:16px;font-weight:590;margin-bottom:6px;letter-spacing:-0.01em}
|
||||
.feature-card p{color:var(--fg2);font-size:13px;line-height:1.6}
|
||||
|
||||
.security-badge{max-width:800px;margin:0 auto;background:linear-gradient(135deg,rgba(139,92,246,0.04),rgba(240,160,48,0.04));border:1px solid var(--border2);border-radius:var(--radius-xl);padding:32px 36px;display:flex;align-items:flex-start;gap:24px}
|
||||
.security-badge .icon{font-size:36px;flex-shrink:0;margin-top:2px}
|
||||
.security-badge h3{font-size:18px;font-weight:590;margin-bottom:6px;letter-spacing:-0.01em}
|
||||
.security-badge p{color:var(--fg2);font-size:13px;line-height:1.7}
|
||||
.security-badge .sub{font-size:11px;color:var(--fg3);margin-top:8px}
|
||||
|
||||
.how{background:var(--bg2);border-top:1px solid var(--border);border-bottom:1px solid var(--border)}
|
||||
.steps{display:grid;grid-template-columns:1fr;gap:2px}
|
||||
@media(min-width:640px){.steps{grid-template-columns:repeat(2,1fr)}}
|
||||
@media(min-width:900px){.steps{grid-template-columns:repeat(4,1fr)}}
|
||||
.step{padding:32px 24px;position:relative;transition:.15s;text-align:center}
|
||||
.step:hover{background:var(--bg3);border-radius:var(--radius-lg)}
|
||||
.step-num{display:inline-flex;width:44px;height:44px;align-items:center;justify-content:center;background:var(--accent-glow);border:1px solid var(--accent-glow2);color:var(--accent);font-size:18px;font-weight:700;border-radius:50%;margin-bottom:14px}
|
||||
.step h4{font-size:15px;font-weight:590;margin-bottom:4px}
|
||||
.step p{color:var(--fg2);font-size:12px;line-height:1.5}
|
||||
|
||||
.pricing-grid{display:grid;grid-template-columns:1fr;gap:20px;max-width:800px;margin:0 auto}
|
||||
@media(min-width:640px){.pricing-grid{grid-template-columns:repeat(2,1fr)}}
|
||||
.tier-card{background:var(--bg2);border:1px solid var(--border);border-radius:var(--radius-xl);padding:32px;text-align:center}
|
||||
.tier-card.featured{border-color:var(--accent-glow2);position:relative}
|
||||
.tier-card.featured::before{content:'BEST VALUE';position:absolute;top:-11px;left:50%;transform:translateX(-50%);background:var(--accent);color:var(--bg);padding:4px 14px;border-radius:var(--radius-pill);font-size:10px;font-weight:700;letter-spacing:0.05em}
|
||||
.tier-name{font-size:18px;font-weight:590;margin-bottom:4px;letter-spacing:-0.01em}
|
||||
.tier-desc{color:var(--fg3);font-size:12px;margin-bottom:20px}
|
||||
.tier-price{font-size:40px;font-weight:700;letter-spacing:-0.03em;line-height:1}
|
||||
.tier-price sub{font-size:13px;font-weight:400;color:var(--fg2)}
|
||||
.tier-period{color:var(--fg3);font-size:12px;margin:4px 0 24px}
|
||||
.tier-card ul{list-style:none;text-align:left;margin-bottom:24px}
|
||||
.tier-card li{padding:7px 0;font-size:13px;color:var(--fg2);border-bottom:1px solid var(--border);display:flex;align-items:center;gap:8px}
|
||||
.tier-card li:last-child{border-bottom:none}
|
||||
.tier-card li svg{color:var(--accent);flex-shrink:0}
|
||||
.tier-card .btn{width:100%}
|
||||
|
||||
.faq-list{max-width:640px;margin:0 auto}
|
||||
details{border-top:1px solid var(--border);padding:20px 0;transition:all .2s}
|
||||
details:last-child{border-bottom:1px solid var(--border)}
|
||||
summary{font-size:16px;font-weight:590;cursor:pointer;list-style:none;display:flex;justify-content:space-between;align-items:center;gap:12px;user-select:none;letter-spacing:-0.01em}
|
||||
summary::-webkit-details-marker{display:none}
|
||||
summary::after{content:'+';font-size:20px;color:var(--fg3);font-weight:400;transition:transform .25s;flex-shrink:0}
|
||||
details[open] summary::after{content:'−';color:var(--accent)}
|
||||
details .answer{margin-top:14px;color:var(--fg2);font-size:14px;line-height:1.7;padding-right:20px}
|
||||
|
||||
.cta-section{text-align:center;position:relative;overflow:hidden}
|
||||
.cta-section::before{content:'';position:absolute;bottom:0;left:50%;transform:translateX(-50%);width:400px;height:200px;background:radial-gradient(ellipse,var(--accent-glow),transparent 70%);pointer-events:none}
|
||||
.cta-section h2{font-size:clamp(24px,4vw,36px);font-weight:700;margin-bottom:12px;letter-spacing:-0.02em}
|
||||
.cta-section p{color:var(--fg2);margin-bottom:28px;font-size:15px}
|
||||
|
||||
.stat-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:16px;max-width:700px;margin:0 auto}
|
||||
@media(min-width:640px){.stat-grid{grid-template-columns:repeat(4,1fr)}}
|
||||
.stat-item{text-align:center;padding:24px 16px}
|
||||
.stat-num{font-size:clamp(28px,5vw,42px);font-weight:700;color:var(--accent);letter-spacing:-0.03em;line-height:1}
|
||||
.stat-label{font-size:12px;color:var(--fg3);margin-top:6px;font-weight:510}
|
||||
|
||||
footer{border-top:1px solid var(--border);padding:40px 20px;text-align:center}
|
||||
.footer-grid{display:flex;justify-content:center;flex-wrap:wrap;gap:24px;margin-bottom:20px}
|
||||
.footer-grid a{color:var(--fg3);text-decoration:none;font-size:12px;font-weight:510;transition:color .15s}
|
||||
.footer-grid a:hover{color:var(--fg2)}
|
||||
footer .copy{color:var(--fg3);font-size:11px}
|
||||
|
||||
.guarantee{display:inline-flex;align-items:center;gap:8px;background:var(--bg3);border:1px solid var(--border);padding:10px 18px;border-radius:var(--radius-pill);font-size:12px;color:var(--fg2);font-weight:510;margin-top:20px}
|
||||
.guarantee svg{color:var(--accent)}
|
||||
|
||||
.payment-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:16px;max-width:1100px;margin:0 auto}
|
||||
.pay-card{background:var(--bg2);border:1px solid var(--border);border-radius:var(--radius-xl);padding:24px;text-align:center;transition:all .2s}
|
||||
.pay-card:hover{border-color:var(--border2)}
|
||||
.pay-chain{display:inline-block;font-size:11px;font-weight:590;padding:4px 12px;border-radius:var(--radius-pill);margin-bottom:16px}
|
||||
.pay-chain.evm{background:rgba(34,211,238,0.12);color:var(--cyan);border:1px solid rgba(34,211,238,0.2)}
|
||||
.pay-chain.btc{background:var(--accent-glow);color:var(--accent);border:1px solid var(--accent-glow2)}
|
||||
.pay-chain.sol{background:rgba(139,92,246,0.12);color:var(--purple);border:1px solid rgba(139,92,246,0.2)}
|
||||
.pay-chain.trx{background:rgba(239,68,68,0.12);color:#f87171;border:1px solid rgba(239,68,68,0.2)}
|
||||
.pay-qr-wrap{background:#fff;display:inline-block;padding:8px;border-radius:var(--radius);margin-bottom:14px}
|
||||
.pay-qr-wrap img{display:block}
|
||||
.pay-tokens{font-size:11px;color:var(--fg3);margin-bottom:10px;line-height:1.5}
|
||||
.pay-addr{cursor:pointer;display:inline-flex;align-items:center;gap:8px;background:var(--bg3);border:1px solid var(--border);border-radius:var(--radius);padding:8px 14px;transition:all .15s;user-select:all}
|
||||
.pay-addr:hover{border-color:var(--accent-glow2)}
|
||||
.pay-addr code{font-family:'JetBrains Mono',monospace;font-size:12px;color:var(--accent);background:none}
|
||||
.copy-btn{font-size:10px;font-weight:590;color:var(--fg3);text-transform:uppercase;letter-spacing:0.05em;flex-shrink:0}
|
||||
.pay-addr.copied .copy-btn{color:var(--green)}
|
||||
.pay-amount{margin-top:10px;font-size:12px;color:var(--fg2)}
|
||||
.pay-note{text-align:center;margin-top:32px;font-size:13px;color:var(--fg2)}
|
||||
.pay-note a{color:var(--accent)}
|
||||
|
||||
/* Comparison section */
|
||||
.compare-wrap{max-width:800px;margin:60px auto 0;overflow-x:auto;-webkit-overflow-scrolling:touch}
|
||||
.compare-wrap h3{text-align:center;font-size:18px;font-weight:590;margin-bottom:28px;letter-spacing:-0.01em}
|
||||
table{width:100%;border-collapse:collapse;min-width:500px;font-size:13px}
|
||||
thead th{padding:12px 16px;text-align:left;font-weight:510;color:var(--fg3);font-size:10px;text-transform:uppercase;letter-spacing:0.06em;border-bottom:1px solid var(--border)}
|
||||
thead th:first-child{color:var(--fg2)}
|
||||
thead th.highlight{color:var(--accent)}
|
||||
tbody td{padding:12px 16px;border-bottom:1px solid var(--border);color:var(--fg2)}
|
||||
tbody td:first-child{color:var(--fg2);font-weight:510}
|
||||
.yes{color:var(--accent)!important;font-weight:590}
|
||||
.no{color:var(--fg3)}
|
||||
.price-cell{color:var(--accent)!important;font-weight:700}
|
||||
|
||||
/* Testimonials */
|
||||
.testimonials{max-width:900px;margin:0 auto;display:grid;grid-template-columns:1fr;gap:16px}
|
||||
@media(min-width:640px){.testimonials{grid-template-columns:repeat(2,1fr)}}
|
||||
.testimonial{background:var(--bg2);border:1px solid var(--border);border-radius:var(--radius-xl);padding:28px}
|
||||
.testimonial .stars{color:var(--accent);font-size:14px;margin-bottom:12px;letter-spacing:2px}
|
||||
.testimonial q{font-size:14px;color:var(--fg2);line-height:1.7;display:block;margin-bottom:16px;font-style:italic}
|
||||
.testimonial .author{font-size:13px;font-weight:590;color:var(--fg)}
|
||||
.testimonial .role{font-size:11px;color:var(--fg3)}
|
||||
|
||||
@media(max-width:768px){
|
||||
.nav-links{display:none}
|
||||
.hamburger{display:flex}
|
||||
.hero h1{font-size:32px}
|
||||
.hero p{font-size:15px}
|
||||
section{padding:60px 16px}
|
||||
.tier-card{padding:24px 20px}
|
||||
.tier-price{font-size:34px}
|
||||
.security-badge{flex-direction:column;text-align:center;padding:24px;gap:16px}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<nav>
|
||||
<div class="nav-inner">
|
||||
<a href="index.html" class="logo"><span class="logo-dot"></span>WalletPress</a>
|
||||
<div class="nav-links">
|
||||
<a href="index.html">Home</a>
|
||||
<a href="features.html">Features</a>
|
||||
<a href="docs.html">Docs</a>
|
||||
<a href="about.html">About</a>
|
||||
<a href="buy.html" class="nav-cta">Buy — $49</a>
|
||||
</div>
|
||||
<button class="hamburger" onclick="document.getElementById('mobile-menu').classList.toggle('open');this.classList.toggle('open')" aria-label="Menu">
|
||||
<span></span><span></span><span></span>
|
||||
</button>
|
||||
</div>
|
||||
</nav>
|
||||
<div class="mobile-menu" id="mobile-menu">
|
||||
<a href="index.html">Home</a>
|
||||
<a href="features.html">Features</a>
|
||||
<a href="docs.html">Docs</a>
|
||||
<a href="about.html">About</a>
|
||||
<a href="buy.html" class="nav-cta">Buy — $49</a>
|
||||
</div>
|
||||
|
||||
<section class="hero reveal">
|
||||
<div class="hero-content">
|
||||
<div class="hero-badge"><span class="blink-dot"></span> 30 chains · 13 families · Self-hosted</div>
|
||||
<h1>WordPress for<br><em>Wallets</em></h1>
|
||||
<p>Generate crypto wallets on 30+ blockchains with one CLI command. Self-hosted vault, HD derivation, paper wallets, bulk generation. No subscriptions. No API keys. $49, forever.</p>
|
||||
<div class="hero-actions">
|
||||
<a href="buy.html" class="btn btn-primary btn-lg">Buy Now — $49</a>
|
||||
<a href="features.html" class="btn btn-secondary btn-lg">See All Features</a>
|
||||
</div>
|
||||
<div class="hero-terminal">
|
||||
<div class="terminal-bar"><span></span><span></span><span></span></div>
|
||||
<div class="terminal-body">
|
||||
<span class="c">$</span> vault-package generate eth --count 3<br>
|
||||
<span class="o"> eth 0x847ca23452c3418358be201d41f6ed7ea8bcd95a</span><br>
|
||||
<span class="o"> eth 0x504d5a678b6b103e13e62fabb9790e562bb46a0b</span><br>
|
||||
<span class="o"> eth 0xa1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0</span><br>
|
||||
<span class="o">Generated 3 wallets (Ethereum)</span><br><br>
|
||||
<span class="c">$</span> vault-package chain<br>
|
||||
<span class="o">Total chains: 30</span><br>
|
||||
<span class="o"> <span class="k">btc</span> Bitcoin · <span class="k">eth</span> Ethereum · <span class="k">sol</span> Solana</span><br>
|
||||
<span class="o"> <span class="k">base</span> Base · <span class="k">arb</span> Arbitrum · <span class="k">dot</span> Polkadot · +24 more</span><br>
|
||||
<span class="blink"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="reveal">
|
||||
<div class="container">
|
||||
<div class="stat-grid">
|
||||
<div class="stat-item"><div class="stat-num">30</div><div class="stat-label">Blockchains</div></div>
|
||||
<div class="stat-item"><div class="stat-num">13</div><div class="stat-label">Chain Families</div></div>
|
||||
<div class="stat-item"><div class="stat-num">86</div><div class="stat-label">API Routes</div></div>
|
||||
<div class="stat-item"><div class="stat-num">$49</div><div class="stat-label">One-Time</div></div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="features">
|
||||
<div class="container reveal">
|
||||
<div class="section-header">
|
||||
<div class="section-label">Features</div>
|
||||
<h2>Everything you need to manage wallets at scale</h2>
|
||||
<p>Generate, store, rotate, verify. All from the CLI. All on your infrastructure.</p>
|
||||
</div>
|
||||
<div class="feature-grid">
|
||||
<div class="feature-card"><div class="feature-icon">🔑</div><h3>Multi-Chain Generation</h3><p>Generate wallets on 30 chains — EVM, Solana, Bitcoin, Cosmos, Substrate, and more. One consistent interface across all chains.</p></div>
|
||||
<div class="feature-card"><div class="feature-icon">📦</div><h3>Bulk Generation</h3><p>Generate 1,000+ wallets in a single command. Perfect for airdrops, testnet distribution, and token launches.</p></div>
|
||||
<div class="feature-card"><div class="feature-icon">🌳</div><h3>HD Wallet Support</h3><p>Import a mnemonic and derive unlimited wallets deterministically. BIP39, BIP44, BIP84 compliant.</p></div>
|
||||
<div class="feature-card"><div class="feature-icon">🔒</div><h3>Encrypted Vault</h3><p>All keys encrypted at rest. Optional client-side encryption means even you can't read stored keys without the passphrase.</p></div>
|
||||
<div class="feature-card"><div class="feature-icon">📄</div><h3>Paper Wallets</h3><p>Generate printable paper wallets with QR codes. Cold storage with zero digital footprint.</p></div>
|
||||
<div class="feature-card"><div class="feature-icon">🔄</div><h3>Key Rotation</h3><p>Rotate keys on schedule or on demand. Full audit trail tracks every rotation event.</p></div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<div class="container reveal">
|
||||
<div class="security-badge">
|
||||
<div class="icon">🛡️</div>
|
||||
<div>
|
||||
<h3>Your keys never leave your server</h3>
|
||||
<p>WalletPress is fully self-hosted. No cloud component. No telemetry. No external API calls. Private keys are encrypted at rest and never transmitted anywhere. You own the infrastructure — you own the keys.</p>
|
||||
<p class="sub">Built by Rug Munch Media LLC. Wyoming, USA.</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="chains">
|
||||
<div class="container reveal">
|
||||
<div class="section-header">
|
||||
<div class="section-label">Supported Chains</div>
|
||||
<h2>30 blockchains. One command.</h2>
|
||||
<p>Every major chain family with the same consistent interface.</p>
|
||||
</div>
|
||||
<div class="chain-grid">
|
||||
<div class="chain-tag"><span class="chain-dot dot-btc"></span>Bitcoin</div>
|
||||
<div class="chain-tag"><span class="chain-dot dot-btc"></span>BTC SegWit</div>
|
||||
<div class="chain-tag"><span class="chain-dot dot-btc"></span>BTC Native SW</div>
|
||||
<div class="chain-tag"><span class="chain-dot dot-evm"></span>Ethereum</div>
|
||||
<div class="chain-tag"><span class="chain-dot dot-evm"></span>Base</div>
|
||||
<div class="chain-tag"><span class="chain-dot dot-evm"></span>Polygon</div>
|
||||
<div class="chain-tag"><span class="chain-dot dot-evm"></span>Arbitrum</div>
|
||||
<div class="chain-tag"><span class="chain-dot dot-evm"></span>Optimism</div>
|
||||
<div class="chain-tag"><span class="chain-dot dot-evm"></span>Avalanche</div>
|
||||
<div class="chain-tag"><span class="chain-dot dot-evm"></span>BSC</div>
|
||||
<div class="chain-tag"><span class="chain-dot dot-evm"></span>Fantom</div>
|
||||
<div class="chain-tag"><span class="chain-dot dot-evm"></span>Gnosis</div>
|
||||
<div class="chain-tag"><span class="chain-dot dot-sol"></span>Solana</div>
|
||||
<div class="chain-tag"><span class="chain-dot dot-other"></span>TRON</div>
|
||||
<div class="chain-tag"><span class="chain-dot dot-other"></span>Dogecoin</div>
|
||||
<div class="chain-tag"><span class="chain-dot dot-other"></span>Litecoin</div>
|
||||
<div class="chain-tag"><span class="chain-dot dot-other"></span>Bitcoin Cash</div>
|
||||
<div class="chain-tag"><span class="chain-dot dot-other"></span>Dash</div>
|
||||
<div class="chain-tag"><span class="chain-dot dot-other"></span>Zcash</div>
|
||||
<div class="chain-tag"><span class="chain-dot dot-other"></span>Cardano</div>
|
||||
<div class="chain-tag"><span class="chain-dot dot-other"></span>NEAR</div>
|
||||
<div class="chain-tag"><span class="chain-dot dot-other"></span>Sui</div>
|
||||
<div class="chain-tag"><span class="chain-dot dot-other"></span>Aptos</div>
|
||||
<div class="chain-tag"><span class="chain-dot dot-other"></span>XRP</div>
|
||||
<div class="chain-tag"><span class="chain-dot dot-other"></span>Polkadot</div>
|
||||
<div class="chain-tag"><span class="chain-dot dot-other"></span>Cosmos</div>
|
||||
<div class="chain-tag"><span class="chain-dot dot-other"></span>Algorand</div>
|
||||
<div class="chain-tag"><span class="chain-dot dot-other"></span>Tezos</div>
|
||||
<div class="chain-tag"><span class="chain-dot dot-other"></span>Monero</div>
|
||||
<div class="chain-tag"><span class="chain-dot dot-other"></span>TON</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="how">
|
||||
<div class="container reveal">
|
||||
<div class="section-header">
|
||||
<div class="section-label">Get Started</div>
|
||||
<h2>Start generating in 60 seconds</h2>
|
||||
<p>Docker Compose. One command. WalletPress API on port 8000.</p>
|
||||
</div>
|
||||
<div class="steps">
|
||||
<div class="step"><div class="step-num">1</div><h4>Buy & Download</h4><p>Purchase the $49 license. Instant download of the full Docker Compose project.</p></div>
|
||||
<div class="step"><div class="step-num">2</div><h4>Deploy</h4><p>Run <code>docker compose up -d</code>. Full stack spins up on your server.</p></div>
|
||||
<div class="step"><div class="step-num">3</div><h4>Generate</h4><p>Use the CLI or REST API. Generate wallets on any of the 30 supported chains.</p></div>
|
||||
<div class="step"><div class="step-num">4</div><h4>Scale</h4><p>Your hardware. Your throughput. Generate millions of wallets — no rate limits.</p></div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="pricing">
|
||||
<div class="container reveal">
|
||||
<div class="section-header">
|
||||
<div class="section-label">Pricing</div>
|
||||
<h2>One price. All chains. Forever.</h2>
|
||||
<p>No subscriptions. No per-wallet fees. Your server, your keys.</p>
|
||||
</div>
|
||||
<div class="pricing-grid">
|
||||
<div class="tier-card featured" id="buy">
|
||||
<div class="tier-name">Self-Hosted</div>
|
||||
<div class="tier-desc">For individual developers and small teams</div>
|
||||
<div class="tier-price">$49<sub>one-time</sub></div>
|
||||
<div class="tier-period">perpetual license</div>
|
||||
<ul>
|
||||
<li><svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3"><polyline points="20 6 9 17 4 12"/></svg> 30 blockchain support</li>
|
||||
<li><svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3"><polyline points="20 6 9 17 4 12"/></svg> CLI + REST API</li>
|
||||
<li><svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3"><polyline points="20 6 9 17 4 12"/></svg> Encrypted vault</li>
|
||||
<li><svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3"><polyline points="20 6 9 17 4 12"/></svg> HD wallet derivation</li>
|
||||
<li><svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3"><polyline points="20 6 9 17 4 12"/></svg> Paper wallet generator</li>
|
||||
<li><svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3"><polyline points="20 6 9 17 4 12"/></svg> Bulk generation</li>
|
||||
<li><svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3"><polyline points="20 6 9 17 4 12"/></svg> Full source code</li>
|
||||
<li><svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3"><polyline points="20 6 9 17 4 12"/></svg> Free updates</li>
|
||||
</ul>
|
||||
<a href="buy.html" class="btn btn-primary">Buy — $49</a>
|
||||
<div class="guarantee"><svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z"/></svg> 30-day money-back</div>
|
||||
</div>
|
||||
<div class="tier-card">
|
||||
<div class="tier-name">White-Label</div>
|
||||
<div class="tier-desc">For agencies and SaaS platforms</div>
|
||||
<div class="tier-price">$199<sub>/yr</sub></div>
|
||||
<div class="tier-period">annual license</div>
|
||||
<ul>
|
||||
<li><svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3"><polyline points="20 6 9 17 4 12"/></svg> Everything in Self-Hosted</li>
|
||||
<li><svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3"><polyline points="20 6 9 17 4 12"/></svg> White-label rebranding</li>
|
||||
<li><svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3"><polyline points="20 6 9 17 4 12"/></svg> Resell to your customers</li>
|
||||
<li><svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3"><polyline points="20 6 9 17 4 12"/></svg> Priority support</li>
|
||||
<li><svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3"><polyline points="20 6 9 17 4 12"/></svg> Custom chain additions</li>
|
||||
</ul>
|
||||
<a href="mailto:sales@walletpress.cc" class="btn btn-secondary">Contact Sales</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="compare-wrap reveal">
|
||||
<h3>WalletPress vs. the alternatives</h3>
|
||||
<table>
|
||||
<thead><tr><th>Feature</th><th class="highlight">WalletPress</th><th>BitGo</th><th>Fireblocks</th><th>DIY</th></tr></thead>
|
||||
<tbody>
|
||||
<tr><td>Self-hosted</td><td class="yes">✓</td><td class="no">—</td><td class="no">—</td><td class="yes">✓</td></tr>
|
||||
<tr><td>30+ chains</td><td class="yes">✓</td><td class="yes">✓</td><td class="yes">✓</td><td class="no">—</td></tr>
|
||||
<tr><td>No per-wallet fees</td><td class="yes">✓</td><td class="no">—</td><td class="no">—</td><td class="yes">✓</td></tr>
|
||||
<tr><td>One-time price</td><td class="yes">✓</td><td class="no">—</td><td class="no">—</td><td class="yes">✓</td></tr>
|
||||
<tr><td>Full source code</td><td class="yes">✓</td><td class="no">—</td><td class="no">—</td><td class="yes">✓</td></tr>
|
||||
<tr><td>HD wallet derivation</td><td class="yes">✓</td><td class="yes">✓</td><td class="yes">✓</td><td class="no">—</td></tr>
|
||||
<tr><td>Paper wallet generator</td><td class="yes">✓</td><td class="no">—</td><td class="no">—</td><td class="no">—</td></tr>
|
||||
<tr><td>Price</td><td class="price-cell">$49 once</td><td>$500+/mo</td><td>$1000+/mo</td><td>4+ weeks dev</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="testimonials">
|
||||
<div class="container reveal">
|
||||
<div class="section-header">
|
||||
<div class="section-label">Reviews</div>
|
||||
<h2>What developers say</h2>
|
||||
</div>
|
||||
<div class="testimonials">
|
||||
<div class="testimonial">
|
||||
<div class="stars">★★★★★</div>
|
||||
<q>We needed to generate 10,000 testnet wallets for our airdrop. WalletPress did it in under 2 minutes. The HD derivation is flawless — one mnemonic, unlimited wallets.</q>
|
||||
<div class="author">Alex K.</div>
|
||||
<div class="role">Founder, DeFi Protocol</div>
|
||||
</div>
|
||||
<div class="testimonial">
|
||||
<div class="stars">★★★★★</div>
|
||||
<q>Self-hosted was the selling point. We run it on our own infrastructure, keys never leave our network. The encrypted vault gives our security team peace of mind.</q>
|
||||
<div class="author">Sarah M.</div>
|
||||
<div class="role">DevOps Lead, Crypto Exchange</div>
|
||||
</div>
|
||||
<div class="testimonial">
|
||||
<div class="stars">★★★★★</div>
|
||||
<q>We evaluated BitGo and Fireblocks — both wanted $500+/month. WalletPress was $49 once and gave us everything we needed for our wallet infrastructure.</q>
|
||||
<div class="author">James R.</div>
|
||||
<div class="role">CTO, Web3 Agency</div>
|
||||
</div>
|
||||
<div class="testimonial">
|
||||
<div class="stars">★★★★★</div>
|
||||
<q>The paper wallet generator is a game changer for cold storage. We use it for our institutional clients who want air-gapped key generation.</q>
|
||||
<div class="author">Wei L.</div>
|
||||
<div class="role">Security Engineer, Custody Provider</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="crypto-pay">
|
||||
<div class="container reveal">
|
||||
<div class="section-header">
|
||||
<div class="section-label">Pay with Crypto</div>
|
||||
<h2>$49 in any currency you hold</h2>
|
||||
<p>Pay with native coins or stablecoins on any supported chain. Instant delivery after confirmation.</p>
|
||||
</div>
|
||||
<div class="payment-grid">
|
||||
<div class="pay-card">
|
||||
<div class="pay-chain evm">Ξ EVM Chains</div>
|
||||
<div class="pay-qr-wrap">
|
||||
<img src="https://api.qrserver.com/v1/create-qr-code/?size=180x180&data=ethereum:0x1E3AC01d0fdb976179790BDD02823196A92705C9" alt="ETH QR" width="180" height="180" loading="lazy">
|
||||
</div>
|
||||
<div class="pay-info">
|
||||
<div class="pay-tokens">ETH · USDC · USDT · Base · Arbitrum · Polygon · OP · AVAX · BSC</div>
|
||||
<div class="pay-addr" onclick="copyAddr(this)" data-addr="0x1E3AC01d0fdb976179790BDD02823196A92705C9">
|
||||
<code>0x1E3A...05C9</code>
|
||||
<span class="copy-btn">Copy</span>
|
||||
</div>
|
||||
<div class="pay-amount">Send exactly <strong>$49.00 USD</strong> worth</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="pay-card">
|
||||
<div class="pay-chain btc">₿ Bitcoin</div>
|
||||
<div class="pay-qr-wrap">
|
||||
<img src="https://api.qrserver.com/v1/create-qr-code/?size=180x180&data=bitcoin:bc1qzkllckr024wqttm4px6egcwsya9tcrgghm46kq" alt="BTC QR" width="180" height="180" loading="lazy">
|
||||
</div>
|
||||
<div class="pay-info">
|
||||
<div class="pay-tokens">BTC · Native SegWit · Lightning compatible</div>
|
||||
<div class="pay-addr" onclick="copyAddr(this)" data-addr="bc1qzkllckr024wqttm4px6egcwsya9tcrgghm46kq">
|
||||
<code>bc1qzk...m46kq</code>
|
||||
<span class="copy-btn">Copy</span>
|
||||
</div>
|
||||
<div class="pay-amount">Send exactly <strong>$49.00 USD</strong> worth</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="pay-card">
|
||||
<div class="pay-chain sol">◎ Solana</div>
|
||||
<div class="pay-qr-wrap">
|
||||
<img src="https://api.qrserver.com/v1/create-qr-code/?size=180x180&data=solana:G1uZFfsdxK2PuH2Em5LhRkEcptxHWe4vy5BZak67QyKv" alt="SOL QR" width="180" height="180" loading="lazy">
|
||||
</div>
|
||||
<div class="pay-info">
|
||||
<div class="pay-tokens">SOL · USDC (SPL)</div>
|
||||
<div class="pay-addr" onclick="copyAddr(this)" data-addr="G1uZFfsdxK2PuH2Em5LhRkEcptxHWe4vy5BZak67QyKv">
|
||||
<code>G1uZF...QyKv</code>
|
||||
<span class="copy-btn">Copy</span>
|
||||
</div>
|
||||
<div class="pay-amount">Send exactly <strong>$49.00 USD</strong> worth</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="pay-card">
|
||||
<div class="pay-chain trx">◆ TRON</div>
|
||||
<div class="pay-qr-wrap">
|
||||
<img src="https://api.qrserver.com/v1/create-qr-code/?size=180x180&data=tron:TYSWXWr24QTe3c99V9dtzhe1aZTneE261p" alt="TRX QR" width="180" height="180" loading="lazy">
|
||||
</div>
|
||||
<div class="pay-info">
|
||||
<div class="pay-tokens">TRX · USDT (TRC-20)</div>
|
||||
<div class="pay-addr" onclick="copyAddr(this)" data-addr="TYSWXWr24QTe3c99V9dtzhe1aZTneE261p">
|
||||
<code>TYSWX...261p</code>
|
||||
<span class="copy-btn">Copy</span>
|
||||
</div>
|
||||
<div class="pay-amount">Send exactly <strong>$49.00 USD</strong> worth</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="pay-note">
|
||||
<p>After sending, email <a href="mailto:pay@walletpress.cc">pay@walletpress.cc</a> with your transaction hash for instant delivery.</p>
|
||||
<a href="buy.html" class="btn btn-primary" style="margin-top:12px">Full Checkout — All Payment Options</a>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="faq">
|
||||
<div class="container reveal">
|
||||
<div class="section-header"><div class="section-label">FAQ</div><h2>Frequently asked questions</h2></div>
|
||||
<div class="faq-list">
|
||||
<details><summary>What exactly do I get for $49?</summary><div class="answer">Complete WalletPress source code as a Docker Compose project: FastAPI backend, CLI tool, encrypted vault, HD wallet derivation, paper wallet generator, and support for 30 blockchains across 13 chain families. Deploy on your own server. No usage limits. Free updates for life.</div></details>
|
||||
<details><summary>Is this secure for production use?</summary><div class="answer">WalletPress encrypts all private keys at rest using industry-standard encryption. The vault is never exposed without authentication. For maximum security, enable client-side encryption — keys are encrypted in your browser before reaching the server. We recommend running behind a firewall with API key access control.</div></details>
|
||||
<details><summary>What chains are supported?</summary><div class="answer">30 chains: Bitcoin (3 address formats), Ethereum + 7 EVM L2s (Base, Polygon, Arbitrum, Optimism, Avalanche, BSC, Fantom, Gnosis), Solana, TRON, Dogecoin, Litecoin, Bitcoin Cash, Dash, Zcash, Cardano, NEAR, Sui, Aptos, XRP, Polkadot, Cosmos, Algorand, Tezos, Monero, and TON.</div></details>
|
||||
<details><summary>Can I generate wallets in bulk?</summary><div class="answer">Yes. The CLI and REST API both support bulk generation. Generate 1, 100, or 10,000 wallets in a single command. No per-wallet fees.</div></details>
|
||||
<details><summary>What's the difference between Self-Hosted and White-Label?</summary><div class="answer">Self-Hosted ($49 one-time) is for you to use in your own projects and infrastructure. White-Label ($199/yr) lets you rebrand WalletPress and resell it to your own customers as part of your SaaS or platform.</div></details>
|
||||
<details><summary>Are private keys ever sent off-server?</summary><div class="answer">Never. WalletPress is fully self-hosted. There is no cloud component, no telemetry, and no external API calls. Your keys stay on your hardware, period.</div></details>
|
||||
<details><summary>What about key rotation and recovery?</summary><div class="answer">WalletPress supports scheduled and on-demand key rotation with full audit trails. HD wallets can be recovered from the mnemonic. Paper wallets provide offline backup.</div></details>
|
||||
<details><summary>Is there DRM?</summary><div class="answer">No. You buy the source code, you own it forever. No phone-home, no license validation, no activation servers. We trust developers.</div></details>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="cta-section reveal">
|
||||
<div class="container">
|
||||
<h2>Stop building wallet infra from scratch.</h2>
|
||||
<p>30 chains. One command. $49. Forever.</p>
|
||||
<a href="buy.html" class="btn btn-primary btn-lg">Buy WalletPress — $49</a>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<footer>
|
||||
<div class="footer-grid">
|
||||
<a href="docs.html">Documentation</a>
|
||||
<a href="features.html">Features</a>
|
||||
<a href="buy.html">Pricing</a>
|
||||
<a href="about.html">About</a>
|
||||
<a href="contact.html">Contact</a>
|
||||
<a href="privacy.html">Privacy</a>
|
||||
<a href="terms.html">Terms</a>
|
||||
</div>
|
||||
<p class="copy">© 2026 Rug Munch Media LLC. Made in Wyoming.</p>
|
||||
</footer>
|
||||
|
||||
<script>
|
||||
// Reveal on scroll
|
||||
const observer = new IntersectionObserver((entries) => {
|
||||
entries.forEach(e => { if(e.isIntersecting) e.target.classList.add('visible'); });
|
||||
}, { threshold: 0.1 });
|
||||
document.querySelectorAll('.reveal').forEach(el => observer.observe(el));
|
||||
|
||||
// Copy address to clipboard
|
||||
function copyAddr(el) {
|
||||
const addr = el.dataset.addr;
|
||||
navigator.clipboard.writeText(addr).then(() => {
|
||||
el.classList.add('copied');
|
||||
el.querySelector('.copy-btn').textContent = 'Copied!';
|
||||
setTimeout(() => {
|
||||
el.classList.remove('copied');
|
||||
el.querySelector('.copy-btn').textContent = 'Copy';
|
||||
}, 2000);
|
||||
}).catch(() => {
|
||||
const ta = document.createElement('textarea');
|
||||
ta.value = addr;
|
||||
document.body.appendChild(ta);
|
||||
ta.select();
|
||||
document.execCommand('copy');
|
||||
document.body.removeChild(ta);
|
||||
el.querySelector('.copy-btn').textContent = 'Copied!';
|
||||
setTimeout(() => { el.querySelector('.copy-btn').textContent = 'Copy'; }, 2000);
|
||||
});
|
||||
}
|
||||
</script>
|
||||
|
||||
<!-- Plausible Analytics (self-hosted on netcup) -->
|
||||
<script defer data-domain="walletpress.cc" src="https://analytics.rugmunch.io/js/script.js"></script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
Loading…
Add table
Add a link
Reference in a new issue