257 lines
15 KiB
HTML
257 lines
15 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>Install — Vault1984</title>
|
|
<meta name="description" content="Self-host Vault1984 in 30 seconds. One binary, no dependencies.">
|
|
<script src="https://cdn.tailwindcss.com"></script>
|
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=JetBrains+Mono:wght@400;500;600&display=swap" rel="stylesheet">
|
|
<script>
|
|
tailwind.config = {
|
|
theme: {
|
|
extend: {
|
|
colors: {
|
|
navy: { DEFAULT: '#0A1628', light: '#111f38', lighter: '#1a2d4f' },
|
|
accent: '#22C55E',
|
|
'accent-hover': '#16A34A',
|
|
danger: '#EF4444',
|
|
},
|
|
fontFamily: {
|
|
sans: ['Inter', 'system-ui', 'sans-serif'],
|
|
mono: ['JetBrains Mono', 'monospace'],
|
|
},
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
<style>
|
|
body { background-color: #0A1628; }
|
|
.gradient-text { background: linear-gradient(135deg, #22C55E 0%, #4ade80 100%); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; }
|
|
</style>
|
|
</head>
|
|
<body class="font-sans text-gray-300 antialiased">
|
|
|
|
<!-- Nav -->
|
|
<nav class="fixed top-0 w-full z-50 bg-navy/80 backdrop-blur-md border-b border-white/5">
|
|
<div class="max-w-7xl mx-auto px-6 h-16 flex items-center justify-between">
|
|
<a href="/" class="font-mono font-semibold text-xl text-white tracking-tight">vault<span class="text-accent">1984</span></a>
|
|
<div class="hidden md:flex items-center gap-6 text-sm">
|
|
<a href="#" class="text-gray-400 hover:text-white transition-colors">GitHub</a>
|
|
<a href="/install.html" class="text-white font-medium transition-colors">Self-host</a>
|
|
<a href="#" class="border border-gray-600 text-gray-300 hover:border-gray-400 hover:text-white px-4 py-1.5 rounded-lg transition-colors text-sm">Sign in</a>
|
|
<a href="/pricing.html" class="bg-accent hover:bg-accent-hover text-black font-medium px-4 py-1.5 rounded-lg transition-colors text-sm">Get hosted — $12/yr</a>
|
|
</div>
|
|
<button id="mobile-menu-btn" class="md:hidden text-gray-400">
|
|
<svg class="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16"/></svg>
|
|
</button>
|
|
</div>
|
|
<div id="mobile-menu" class="hidden md:hidden border-t border-white/5 bg-navy/95 backdrop-blur-md">
|
|
<div class="px-6 py-4 space-y-3">
|
|
<a href="#" class="block text-gray-400 hover:text-white">GitHub</a>
|
|
<a href="/install.html" class="block text-white font-medium">Self-host</a>
|
|
<a href="#" class="block text-gray-400 hover:text-white">Sign in</a>
|
|
<a href="/pricing.html" class="block bg-accent hover:bg-accent-hover text-black font-medium px-4 py-2 rounded-lg text-center">Get hosted — $12/yr</a>
|
|
</div>
|
|
</div>
|
|
</nav>
|
|
|
|
<!-- Header -->
|
|
<section class="pt-32 pb-12 px-6">
|
|
<div class="max-w-3xl mx-auto">
|
|
<h1 class="text-4xl md:text-5xl font-bold text-white mb-4">Self-host Vault1984</h1>
|
|
<p class="text-lg text-gray-400">One binary. No Docker. No Postgres. No Redis. Runs anywhere Go runs.</p>
|
|
</div>
|
|
</section>
|
|
|
|
<!-- Steps -->
|
|
<section class="pb-20 px-6">
|
|
<div class="max-w-3xl mx-auto space-y-12">
|
|
|
|
<!-- Step 1 -->
|
|
<div>
|
|
<div class="flex items-center gap-4 mb-4">
|
|
<span class="w-8 h-8 rounded-full bg-accent/10 text-accent text-sm font-semibold flex items-center justify-center flex-shrink-0">1</span>
|
|
<h2 class="text-xl font-bold text-white">Download the binary</h2>
|
|
</div>
|
|
<p class="text-gray-400 text-sm mb-4 ml-12">The install script detects your OS and architecture, downloads the latest release, and puts it in your PATH.</p>
|
|
<div class="bg-navy-light rounded-xl p-5 font-mono text-sm overflow-x-auto border border-white/5 ml-12">
|
|
<div><span class="text-accent">$</span> curl -fsSL vault1984.com/install.sh | sh</div>
|
|
</div>
|
|
<p class="text-gray-500 text-xs mt-3 ml-12">Or download a binary directly:</p>
|
|
<div class="ml-12 mt-3 flex flex-wrap gap-3">
|
|
<a href="https://github.com/vault1984/vault1984/releases/latest/download/vault1984-linux-amd64" class="inline-flex items-center gap-2 text-xs font-mono text-gray-400 hover:text-accent bg-navy rounded-lg px-3 py-2 border border-white/5 transition-colors">linux/amd64</a>
|
|
<a href="https://github.com/vault1984/vault1984/releases/latest/download/vault1984-darwin-arm64" class="inline-flex items-center gap-2 text-xs font-mono text-gray-400 hover:text-accent bg-navy rounded-lg px-3 py-2 border border-white/5 transition-colors">darwin/arm64</a>
|
|
<a href="https://github.com/vault1984/vault1984/releases/latest/download/vault1984-darwin-amd64" class="inline-flex items-center gap-2 text-xs font-mono text-gray-400 hover:text-accent bg-navy rounded-lg px-3 py-2 border border-white/5 transition-colors">darwin/amd64</a>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Step 2 -->
|
|
<div>
|
|
<div class="flex items-center gap-4 mb-4">
|
|
<span class="w-8 h-8 rounded-full bg-accent/10 text-accent text-sm font-semibold flex items-center justify-center flex-shrink-0">2</span>
|
|
<h2 class="text-xl font-bold text-white">Set your vault key</h2>
|
|
</div>
|
|
<p class="text-gray-400 text-sm mb-4 ml-12">The vault key encrypts your L1 data at rest. Set it as an environment variable. If you lose this key, L1 data cannot be recovered.</p>
|
|
<div class="bg-navy-light rounded-xl p-5 font-mono text-sm overflow-x-auto border border-white/5 ml-12">
|
|
<div><span class="text-gray-500"># Generate a random key</span></div>
|
|
<div><span class="text-accent">$</span> export VAULT_KEY=$(openssl rand -hex 32)</div>
|
|
<div class="mt-2"><span class="text-gray-500"># Save it somewhere safe (not in your vault...)</span></div>
|
|
<div><span class="text-accent">$</span> echo $VAULT_KEY >> ~/.vault1984-key</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Step 3 -->
|
|
<div>
|
|
<div class="flex items-center gap-4 mb-4">
|
|
<span class="w-8 h-8 rounded-full bg-accent/10 text-accent text-sm font-semibold flex items-center justify-center flex-shrink-0">3</span>
|
|
<h2 class="text-xl font-bold text-white">Run it</h2>
|
|
</div>
|
|
<p class="text-gray-400 text-sm mb-4 ml-12">That's it. The vault server starts on port 1984. A SQLite database is created automatically.</p>
|
|
<div class="bg-navy-light rounded-xl p-5 font-mono text-sm overflow-x-auto border border-white/5 ml-12">
|
|
<div><span class="text-accent">$</span> vault1984</div>
|
|
<div class="text-gray-500 mt-1">Vault1984 running on http://localhost:1984</div>
|
|
<div class="text-gray-500">Database: ~/.vault1984/vault.db</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Step 4 -->
|
|
<div>
|
|
<div class="flex items-center gap-4 mb-4">
|
|
<span class="w-8 h-8 rounded-full bg-accent/10 text-accent text-sm font-semibold flex items-center justify-center flex-shrink-0">4</span>
|
|
<h2 class="text-xl font-bold text-white">Configure MCP</h2>
|
|
</div>
|
|
<p class="text-gray-400 text-sm mb-4 ml-12">Point your AI assistant at the vault. Works with Claude Code, Cursor, Codex, or any MCP-compatible client.</p>
|
|
|
|
<div class="ml-12 space-y-4">
|
|
<div>
|
|
<div class="text-xs text-gray-500 mb-2">Claude Code (~/.claude/mcp.json)</div>
|
|
<div class="bg-navy-light rounded-xl p-5 font-mono text-sm overflow-x-auto border border-white/5">
|
|
<pre class="text-gray-300 leading-relaxed"><code>{
|
|
"mcpServers": {
|
|
"vault1984": {
|
|
"url": "http://localhost:1984/mcp",
|
|
"headers": {
|
|
"Authorization": "Bearer <span class="text-accent">YOUR_MCP_TOKEN</span>"
|
|
}
|
|
}
|
|
}
|
|
}</code></pre>
|
|
</div>
|
|
</div>
|
|
|
|
<div>
|
|
<div class="text-xs text-gray-500 mb-2">Cursor (.cursor/mcp.json)</div>
|
|
<div class="bg-navy-light rounded-xl p-5 font-mono text-sm overflow-x-auto border border-white/5">
|
|
<pre class="text-gray-300 leading-relaxed"><code>{
|
|
"mcpServers": {
|
|
"vault1984": {
|
|
"url": "http://localhost:1984/mcp",
|
|
"headers": {
|
|
"Authorization": "Bearer <span class="text-accent">YOUR_MCP_TOKEN</span>"
|
|
}
|
|
}
|
|
}
|
|
}</code></pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<p class="text-gray-500 text-xs mt-3 ml-12">Generate an MCP token from the web UI at http://localhost:1984 after first run.</p>
|
|
</div>
|
|
|
|
<!-- Step 5 -->
|
|
<div>
|
|
<div class="flex items-center gap-4 mb-4">
|
|
<span class="w-8 h-8 rounded-full bg-accent/10 text-accent text-sm font-semibold flex items-center justify-center flex-shrink-0">5</span>
|
|
<h2 class="text-xl font-bold text-white">Import your passwords</h2>
|
|
</div>
|
|
<p class="text-gray-400 text-sm mb-4 ml-12">Export from your current password manager, then import. The LLM classifier automatically suggests L1/L2 assignments for each field.</p>
|
|
<div class="bg-navy-light rounded-xl p-5 font-mono text-sm overflow-x-auto border border-white/5 ml-12">
|
|
<div><span class="text-gray-500"># Chrome CSV export</span></div>
|
|
<div><span class="text-accent">$</span> vault1984 import --format chrome passwords.csv</div>
|
|
<div class="mt-2"><span class="text-gray-500"># Firefox CSV export</span></div>
|
|
<div><span class="text-accent">$</span> vault1984 import --format firefox logins.csv</div>
|
|
<div class="mt-2"><span class="text-gray-500"># Bitwarden JSON export</span></div>
|
|
<div><span class="text-accent">$</span> vault1984 import --format bitwarden bitwarden-export.json</div>
|
|
<div class="mt-2"><span class="text-gray-500"># Proton Pass JSON export</span></div>
|
|
<div><span class="text-accent">$</span> vault1984 import --format protonpass protonpass-export.json</div>
|
|
<div class="mt-2"><span class="text-gray-500"># 1Password export</span></div>
|
|
<div><span class="text-accent">$</span> vault1984 import --format 1password 1password-export.json</div>
|
|
</div>
|
|
<p class="text-gray-500 text-xs mt-3 ml-12">Review the L1/L2 classification in the web UI before confirming. You can override any field's tier.</p>
|
|
</div>
|
|
|
|
<!-- Optional: systemd -->
|
|
<div class="border-t border-white/5 pt-12">
|
|
<h2 class="text-xl font-bold text-white mb-4">Running as a service (optional)</h2>
|
|
<p class="text-gray-400 text-sm mb-4">For always-on availability, run Vault1984 as a systemd service.</p>
|
|
<div class="bg-navy-light rounded-xl p-5 font-mono text-sm overflow-x-auto border border-white/5">
|
|
<div class="text-gray-500 mb-1">/etc/systemd/system/vault1984.service</div>
|
|
<pre class="text-gray-300 leading-relaxed"><code>[Unit]
|
|
Description=Vault1984
|
|
After=network.target
|
|
|
|
[Service]
|
|
Type=simple
|
|
User=vault1984
|
|
EnvironmentFile=/etc/vault1984/env
|
|
ExecStart=/usr/local/bin/vault1984
|
|
Restart=always
|
|
RestartSec=5
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target</code></pre>
|
|
</div>
|
|
<div class="bg-navy-light rounded-xl p-5 font-mono text-sm overflow-x-auto border border-white/5 mt-4">
|
|
<div><span class="text-accent">$</span> sudo systemctl enable --now vault1984</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Reverse proxy -->
|
|
<div class="border-t border-white/5 pt-12">
|
|
<h2 class="text-xl font-bold text-white mb-4">Exposing to the internet (optional)</h2>
|
|
<p class="text-gray-400 text-sm mb-4">Put Vault1984 behind a reverse proxy for TLS and remote access.</p>
|
|
<div class="bg-navy-light rounded-xl p-5 font-mono text-sm overflow-x-auto border border-white/5">
|
|
<div class="text-gray-500 mb-1">Caddyfile</div>
|
|
<pre class="text-gray-300 leading-relaxed"><code>vault.yourdomain.com {
|
|
reverse_proxy localhost:1984
|
|
}</code></pre>
|
|
</div>
|
|
<p class="text-gray-500 text-xs mt-3">Caddy handles TLS automatically via Let's Encrypt. Nginx and Traefik work too.</p>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<!-- Footer -->
|
|
<footer class="border-t border-white/5 py-12 px-6">
|
|
<div class="max-w-7xl mx-auto flex flex-col md:flex-row items-center justify-between gap-6">
|
|
<div class="flex items-center gap-6">
|
|
<a href="/" class="font-mono font-semibold text-lg text-white tracking-tight">vault<span class="text-accent">1984</span></a>
|
|
<div class="flex items-center gap-4 text-sm text-gray-500">
|
|
<a href="#" class="hover:text-gray-300 transition-colors">GitHub</a>
|
|
<a href="#" class="hover:text-gray-300 transition-colors">Discord</a>
|
|
<a href="#" class="hover:text-gray-300 transition-colors">X</a>
|
|
</div>
|
|
</div>
|
|
<div class="flex items-center gap-6 text-sm text-gray-500">
|
|
<a href="/privacy.html" class="hover:text-gray-300 transition-colors">Privacy</a>
|
|
<a href="/terms.html" class="hover:text-gray-300 transition-colors">Terms</a>
|
|
<span>MIT License</span>
|
|
</div>
|
|
</div>
|
|
<div class="max-w-7xl mx-auto mt-8 text-center text-xs text-gray-600">
|
|
Built for humans with AI assistants.
|
|
</div>
|
|
</footer>
|
|
|
|
<script>
|
|
document.getElementById('mobile-menu-btn').addEventListener('click', function() {
|
|
document.getElementById('mobile-menu').classList.toggle('hidden');
|
|
});
|
|
</script>
|
|
</body>
|
|
</html>
|