964 lines
32 KiB
HTML
964 lines
32 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<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>">
|
|
<title>rStack - Open-Source, Self-Hosted Tools for Communities</title>
|
|
<style>
|
|
* { margin: 0; padding: 0; box-sizing: border-box; }
|
|
|
|
body {
|
|
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
|
|
background: linear-gradient(135deg, #0f172a 0%, #1e293b 100%);
|
|
color: #e2e8f0;
|
|
min-height: 100vh;
|
|
}
|
|
|
|
/* ── Hero ─────────────────────────────────────── */
|
|
|
|
.hero {
|
|
text-align: center;
|
|
padding: 6rem 1.5rem 4rem;
|
|
max-width: 720px;
|
|
margin: 0 auto;
|
|
}
|
|
|
|
.hero h1 {
|
|
font-size: 3.5rem;
|
|
margin-bottom: 0.5rem;
|
|
background: linear-gradient(135deg, #14b8a6, #7c3aed, #f97316);
|
|
-webkit-background-clip: text;
|
|
-webkit-text-fill-color: transparent;
|
|
letter-spacing: -0.02em;
|
|
}
|
|
|
|
.hero .tagline {
|
|
font-size: 1.3rem;
|
|
color: #94a3b8;
|
|
margin-bottom: 1.5rem;
|
|
line-height: 1.6;
|
|
}
|
|
|
|
.hero .description {
|
|
font-size: 1rem;
|
|
color: #64748b;
|
|
line-height: 1.7;
|
|
max-width: 560px;
|
|
margin: 0 auto 2.5rem;
|
|
}
|
|
|
|
.hero .description .hl {
|
|
color: #00d4ff;
|
|
font-weight: 600;
|
|
}
|
|
|
|
/* ── Pillars ──────────────────────────────────── */
|
|
|
|
.pillars {
|
|
display: grid;
|
|
grid-template-columns: repeat(3, 1fr);
|
|
gap: 1rem;
|
|
max-width: 720px;
|
|
margin: 0 auto 4rem;
|
|
padding: 0 1.5rem;
|
|
}
|
|
|
|
.pillar {
|
|
background: rgba(255,255,255,0.04);
|
|
border: 1px solid rgba(255,255,255,0.08);
|
|
border-radius: 12px;
|
|
padding: 1.5rem 1rem;
|
|
text-align: center;
|
|
}
|
|
|
|
.pillar-icon { font-size: 1.75rem; margin-bottom: 0.5rem; }
|
|
.pillar-title { font-weight: 600; font-size: 0.95rem; margin-bottom: 0.25rem; }
|
|
.pillar-desc { font-size: 0.82rem; color: #64748b; line-height: 1.4; }
|
|
|
|
/* ── App Grid ─────────────────────────────────── */
|
|
|
|
.apps-section {
|
|
max-width: 900px;
|
|
margin: 0 auto;
|
|
padding: 0 1.5rem 5rem;
|
|
}
|
|
|
|
.apps-section h2 {
|
|
text-align: center;
|
|
font-size: 1.75rem;
|
|
margin-bottom: 0.5rem;
|
|
background: linear-gradient(90deg, #00d4ff, #7c3aed);
|
|
-webkit-background-clip: text;
|
|
-webkit-text-fill-color: transparent;
|
|
}
|
|
|
|
.apps-section .section-desc {
|
|
text-align: center;
|
|
color: #64748b;
|
|
font-size: 0.95rem;
|
|
margin-bottom: 2.5rem;
|
|
}
|
|
|
|
.app-grid {
|
|
display: grid;
|
|
grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
|
|
gap: 1rem;
|
|
}
|
|
|
|
.app-card {
|
|
background: rgba(255,255,255,0.04);
|
|
border: 1px solid rgba(255,255,255,0.08);
|
|
border-radius: 14px;
|
|
padding: 1.5rem;
|
|
text-decoration: none;
|
|
color: inherit;
|
|
transition: border-color 0.2s, transform 0.2s;
|
|
display: flex;
|
|
flex-direction: column;
|
|
}
|
|
|
|
.app-card:hover {
|
|
border-color: rgba(0, 212, 255, 0.35);
|
|
transform: translateY(-2px);
|
|
}
|
|
|
|
.app-header {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 0.75rem;
|
|
margin-bottom: 0.75rem;
|
|
}
|
|
|
|
.app-emoji { font-size: 1.75rem; }
|
|
|
|
.app-name {
|
|
font-size: 1.1rem;
|
|
font-weight: 700;
|
|
color: #f1f5f9;
|
|
}
|
|
|
|
.app-domain {
|
|
font-size: 0.75rem;
|
|
color: #475569;
|
|
font-weight: 400;
|
|
}
|
|
|
|
.app-desc {
|
|
font-size: 0.88rem;
|
|
color: #94a3b8;
|
|
line-height: 1.6;
|
|
flex: 1;
|
|
}
|
|
|
|
.app-tag {
|
|
display: inline-block;
|
|
margin-top: 0.75rem;
|
|
font-size: 0.72rem;
|
|
color: #64748b;
|
|
background: rgba(255,255,255,0.05);
|
|
padding: 0.2rem 0.6rem;
|
|
border-radius: 4px;
|
|
text-transform: uppercase;
|
|
letter-spacing: 0.05em;
|
|
align-self: flex-start;
|
|
}
|
|
|
|
/* ── Full-Width Sections ──────────────────────── */
|
|
|
|
.section-full {
|
|
width: 100%;
|
|
padding: 5rem 1.5rem;
|
|
}
|
|
|
|
.section-full.alt-bg {
|
|
background: rgba(255,255,255,0.015);
|
|
}
|
|
|
|
.section-inner {
|
|
max-width: 900px;
|
|
margin: 0 auto;
|
|
}
|
|
|
|
.section-divider {
|
|
width: 60px;
|
|
height: 2px;
|
|
background: linear-gradient(90deg, #14b8a6, #7c3aed);
|
|
margin: 0 auto 2.5rem;
|
|
border-radius: 2px;
|
|
}
|
|
|
|
.section-inner h2 {
|
|
text-align: center;
|
|
font-size: 2rem;
|
|
margin-bottom: 0.75rem;
|
|
background: linear-gradient(90deg, #00d4ff, #7c3aed);
|
|
-webkit-background-clip: text;
|
|
-webkit-text-fill-color: transparent;
|
|
}
|
|
|
|
.section-desc {
|
|
text-align: center;
|
|
color: #94a3b8;
|
|
font-size: 1.05rem;
|
|
line-height: 1.7;
|
|
max-width: 600px;
|
|
margin: 0 auto 2.5rem;
|
|
}
|
|
|
|
.hl {
|
|
color: #00d4ff;
|
|
font-weight: 600;
|
|
}
|
|
|
|
/* ── EncryptID Cards ──────────────────────────── */
|
|
|
|
.eid-grid {
|
|
display: grid;
|
|
grid-template-columns: repeat(2, 1fr);
|
|
gap: 1.25rem;
|
|
margin-bottom: 2.5rem;
|
|
}
|
|
|
|
.eid-card {
|
|
background: rgba(255,255,255,0.04);
|
|
border: 1px solid rgba(124,58,237,0.15);
|
|
border-radius: 14px;
|
|
padding: 1.75rem;
|
|
text-align: left;
|
|
}
|
|
|
|
.eid-card-icon {
|
|
font-size: 1.5rem;
|
|
margin-bottom: 0.5rem;
|
|
}
|
|
|
|
.eid-card h3 {
|
|
font-size: 1.05rem;
|
|
color: #e2e8f0;
|
|
margin-bottom: 0.6rem;
|
|
}
|
|
|
|
.eid-card p {
|
|
color: #94a3b8;
|
|
font-size: 0.9rem;
|
|
line-height: 1.7;
|
|
}
|
|
|
|
/* ── Architecture Diagram ─────────────────────── */
|
|
|
|
.flow-box {
|
|
background: rgba(255,255,255,0.03);
|
|
border: 1px solid rgba(255,255,255,0.08);
|
|
border-radius: 16px;
|
|
padding: 1.75rem;
|
|
}
|
|
|
|
.flow-box pre {
|
|
font-family: 'SF Mono', 'Fira Code', 'Consolas', monospace;
|
|
font-size: 0.78rem;
|
|
color: #94a3b8;
|
|
line-height: 1.5;
|
|
text-align: left;
|
|
overflow-x: auto;
|
|
white-space: pre;
|
|
}
|
|
|
|
/* ── Unlock Grid ──────────────────────────────── */
|
|
|
|
.unlock-grid {
|
|
display: grid;
|
|
grid-template-columns: repeat(2, 1fr);
|
|
gap: 1.25rem;
|
|
}
|
|
|
|
.unlock-card {
|
|
background: rgba(255,255,255,0.04);
|
|
border: 1px solid rgba(255,255,255,0.08);
|
|
border-radius: 14px;
|
|
padding: 1.75rem;
|
|
text-align: left;
|
|
}
|
|
|
|
.unlock-card h3 {
|
|
font-size: 1rem;
|
|
color: #e2e8f0;
|
|
margin-bottom: 0.6rem;
|
|
}
|
|
|
|
.unlock-card p {
|
|
color: #94a3b8;
|
|
font-size: 0.9rem;
|
|
line-height: 1.7;
|
|
}
|
|
|
|
/* ── EncryptID Link ───────────────────────────── */
|
|
|
|
.encryptid-link {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: 0.5rem;
|
|
padding: 0.65rem 1.5rem;
|
|
background: linear-gradient(90deg, rgba(0,212,255,0.15), rgba(124,58,237,0.15));
|
|
border: 1px solid rgba(124,58,237,0.35);
|
|
border-radius: 8px;
|
|
color: #c4b5fd;
|
|
text-decoration: none;
|
|
font-weight: 600;
|
|
font-size: 0.9rem;
|
|
transition: transform 0.2s, border-color 0.2s;
|
|
}
|
|
|
|
.encryptid-link:hover {
|
|
transform: translateY(-2px);
|
|
border-color: rgba(124,58,237,0.6);
|
|
}
|
|
|
|
/* ── Footer ───────────────────────────────────── */
|
|
|
|
footer {
|
|
text-align: center;
|
|
padding: 2rem 1.5rem 3rem;
|
|
color: #475569;
|
|
font-size: 0.82rem;
|
|
border-top: 1px solid rgba(255,255,255,0.05);
|
|
}
|
|
|
|
footer a {
|
|
color: #64748b;
|
|
text-decoration: none;
|
|
}
|
|
|
|
footer a:hover { color: #94a3b8; }
|
|
|
|
@media (max-width: 600px) {
|
|
.hero h1 { font-size: 2.5rem; }
|
|
.pillars { grid-template-columns: 1fr; }
|
|
.app-grid { grid-template-columns: 1fr; }
|
|
.eid-grid { grid-template-columns: 1fr; }
|
|
.unlock-grid { grid-template-columns: 1fr; }
|
|
.section-inner h2 { font-size: 1.5rem; }
|
|
}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
|
|
<!-- Nav -->
|
|
<nav style="border-bottom:1px solid rgba(255,255,255,0.08);padding:1rem 0;">
|
|
<div style="max-width:900px;margin:0 auto;padding:0 1.5rem;display:flex;align-items:center;justify-content:space-between;">
|
|
<a href="/" style="display:flex;align-items:center;gap:0.5rem;text-decoration:none;color:#e2e8f0;">
|
|
<span style="font-size:1.1rem;font-weight:600;">rStack</span>
|
|
</a>
|
|
<div style="display:flex;align-items:center;gap:1rem;">
|
|
<a href="#app-grid" style="color:#94a3b8;text-decoration:none;font-size:0.875rem;transition:color 0.2s;" onmouseover="this.style.color='#e2e8f0'" onmouseout="this.style.color='#94a3b8'">Demo</a>
|
|
<a href="https://rspace.online" style="color:#94a3b8;text-decoration:none;font-size:0.875rem;transition:color 0.2s;" onmouseover="this.style.color='#e2e8f0'" onmouseout="this.style.color='#94a3b8'">Create Space</a>
|
|
<a href="https://encryptid.jeffemmett.com" style="color:#94a3b8;text-decoration:none;font-size:0.875rem;transition:color 0.2s;" onmouseover="this.style.color='#e2e8f0'" onmouseout="this.style.color='#94a3b8'">Sign In</a>
|
|
</div>
|
|
</div>
|
|
</nav>
|
|
|
|
<div class="hero">
|
|
<h1>rStack</h1>
|
|
<p class="tagline">Open-source, self-hosted tools for communities.</p>
|
|
<p class="description">
|
|
The <span class="hl">r-Stack</span> is a suite of <span class="hl">open-source</span>,
|
|
interoperable applications you can run on your own server. No vendor lock-in, no
|
|
platform fees, no terms of service that change overnight. Unified by
|
|
<span class="hl">EncryptID</span> passkey auth, every tool shares the same sync layer
|
|
so your community's data flows freely between apps — and stays yours.
|
|
</p>
|
|
</div>
|
|
|
|
<div class="pillars">
|
|
<div class="pillar">
|
|
<div class="pillar-icon">📖</div>
|
|
<div class="pillar-title">Open Source</div>
|
|
<div class="pillar-desc">Every app is source-available. Read the code, fork it, contribute back.</div>
|
|
</div>
|
|
<div class="pillar">
|
|
<div class="pillar-icon">🏠</div>
|
|
<div class="pillar-title">Self-Hosted</div>
|
|
<div class="pillar-desc">Run the whole stack on your own server. Your data never touches ours.</div>
|
|
</div>
|
|
<div class="pillar">
|
|
<div class="pillar-icon">🔗</div>
|
|
<div class="pillar-title">Interoperable</div>
|
|
<div class="pillar-desc">Shared data layer means a vote in rVote can reference a budget in rFunds.</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="apps-section">
|
|
<h2>The Apps</h2>
|
|
<p class="section-desc">Each tool is independent but stronger together. Log in once, use them all.</p>
|
|
|
|
<div class="app-grid">
|
|
<a href="https://rspace.online" class="app-card">
|
|
<div class="app-header">
|
|
<span class="app-emoji">🌌</span>
|
|
<div>
|
|
<div class="app-name">rSpace</div>
|
|
<div class="app-domain">rspace.online</div>
|
|
</div>
|
|
</div>
|
|
<div class="app-desc">Collaborative spatial canvas. The integration hub where all r-Stack tools come together on a shared, infinite workspace.</div>
|
|
<span class="app-tag">canvas & dashboard</span>
|
|
</a>
|
|
|
|
<a href="https://rvote.online" class="app-card">
|
|
<div class="app-header">
|
|
<span class="app-emoji">🗳</span>
|
|
<div>
|
|
<div class="app-name">rVote</div>
|
|
<div class="app-domain">rvote.online</div>
|
|
</div>
|
|
</div>
|
|
<div class="app-desc">Community governance and decision-making. Create polls, weighted votes, and conviction-style proposals.</div>
|
|
<span class="app-tag">governance</span>
|
|
</a>
|
|
|
|
<a href="https://rwallet.online" class="app-card">
|
|
<div class="app-header">
|
|
<span class="app-emoji">💰</span>
|
|
<div>
|
|
<div class="app-name">rWallet</div>
|
|
<div class="app-domain">rwallet.online</div>
|
|
</div>
|
|
</div>
|
|
<div class="app-desc">Community treasury management. Track shared resources, contributions, and funding flows with Web3-ready smart wallets.</div>
|
|
<span class="app-tag">treasury</span>
|
|
</a>
|
|
|
|
<a href="https://rfunds.online" class="app-card">
|
|
<div class="app-header">
|
|
<span class="app-emoji">📊</span>
|
|
<div>
|
|
<div class="app-name">rFunds</div>
|
|
<div class="app-domain">rfunds.online</div>
|
|
</div>
|
|
</div>
|
|
<div class="app-desc">Budget tracking and expense management. Split costs, allocate funds, and maintain transparent community finances.</div>
|
|
<span class="app-tag">budgets & expenses</span>
|
|
</a>
|
|
|
|
<a href="https://rmaps.online" class="app-card">
|
|
<div class="app-header">
|
|
<span class="app-emoji">🗺</span>
|
|
<div>
|
|
<div class="app-name">rMaps</div>
|
|
<div class="app-domain">rmaps.online</div>
|
|
</div>
|
|
</div>
|
|
<div class="app-desc">Collaborative mapping and geospatial data. Pin locations, plan routes, and visualize your community across the world.</div>
|
|
<span class="app-tag">mapping</span>
|
|
</a>
|
|
|
|
<a href="https://rfiles.online" class="app-card">
|
|
<div class="app-header">
|
|
<span class="app-emoji">📁</span>
|
|
<div>
|
|
<div class="app-name">rFiles</div>
|
|
<div class="app-domain">rfiles.online</div>
|
|
</div>
|
|
</div>
|
|
<div class="app-desc">End-to-end encrypted file storage and sharing. Your community's documents, images, and media — owned by you.</div>
|
|
<span class="app-tag">storage</span>
|
|
</a>
|
|
|
|
<a href="https://rnotes.online" class="app-card">
|
|
<div class="app-header">
|
|
<span class="app-emoji">📝</span>
|
|
<div>
|
|
<div class="app-name">rNotes</div>
|
|
<div class="app-domain">rnotes.online</div>
|
|
</div>
|
|
</div>
|
|
<div class="app-desc">Collaborative note-taking and knowledge base. Real-time shared notebooks, checklists, and meeting notes.</div>
|
|
<span class="app-tag">notes & docs</span>
|
|
</a>
|
|
|
|
<a href="https://rtrips.online" class="app-card">
|
|
<div class="app-header">
|
|
<span class="app-emoji">✈</span>
|
|
<div>
|
|
<div class="app-name">rTrips</div>
|
|
<div class="app-domain">rtrips.online</div>
|
|
</div>
|
|
</div>
|
|
<div class="app-desc">Group trip planning. Itineraries, destinations, packing lists, and expenses — all linked across rMaps, rFunds, and rNotes.</div>
|
|
<span class="app-tag">travel</span>
|
|
</a>
|
|
|
|
<a href="https://rinbox.online" class="app-card">
|
|
<div class="app-header">
|
|
<span class="app-emoji">✉️</span>
|
|
<div>
|
|
<div class="app-name">rInbox</div>
|
|
<div class="app-domain">rinbox.online</div>
|
|
</div>
|
|
</div>
|
|
<div class="app-desc">Shared group inbox with multi-sig approval workflows. Self-hosted email for communities with entity extraction and graph-based discourse.</div>
|
|
<span class="app-tag">communication</span>
|
|
</a>
|
|
|
|
<a href="https://rnetwork.online" class="app-card">
|
|
<div class="app-header">
|
|
<span class="app-emoji">🕸</span>
|
|
<div>
|
|
<div class="app-name">rNetwork</div>
|
|
<div class="app-domain">rnetwork.online</div>
|
|
</div>
|
|
</div>
|
|
<div class="app-desc">Community directory and relationship mapping. See who's connected, discover collaborators, and grow your network.</div>
|
|
<span class="app-tag">people & connections</span>
|
|
</a>
|
|
|
|
<a href="https://rcart.online" class="app-card">
|
|
<div class="app-header">
|
|
<span class="app-emoji">🛒</span>
|
|
<div>
|
|
<div class="app-name">rCart</div>
|
|
<div class="app-domain">rcart.online</div>
|
|
</div>
|
|
</div>
|
|
<div class="app-desc">Group purchasing and crowdfunding. Pool resources, compare options, and fund community projects together.</div>
|
|
<span class="app-tag">commerce</span>
|
|
</a>
|
|
|
|
<a href="https://rtube.online" class="app-card">
|
|
<div class="app-header">
|
|
<span class="app-emoji">🎬</span>
|
|
<div>
|
|
<div class="app-name">rTube</div>
|
|
<div class="app-domain">rtube.online</div>
|
|
</div>
|
|
</div>
|
|
<div class="app-desc">Community video sharing and streaming. Host, curate, and discuss video content without platform algorithms or ads.</div>
|
|
<span class="app-tag">video</span>
|
|
</a>
|
|
|
|
<a href="https://rauctions.online" class="app-card">
|
|
<div class="app-header">
|
|
<span class="app-emoji">🔨</span>
|
|
<div>
|
|
<div class="app-name">rAuctions</div>
|
|
<div class="app-domain">rauctions.online</div>
|
|
</div>
|
|
</div>
|
|
<div class="app-desc">Cosmolocal auctions. List items, bid with USDC on Base, and settle peer-to-peer with EncryptID identity.</div>
|
|
<span class="app-tag">auctions</span>
|
|
</a>
|
|
|
|
<a href="https://rpubs.online" class="app-card">
|
|
<div class="app-header">
|
|
<span class="app-emoji">📖</span>
|
|
<div>
|
|
<div class="app-name">rPubs</div>
|
|
<div class="app-domain">rpubs.online</div>
|
|
</div>
|
|
</div>
|
|
<div class="app-desc">Drop in a document, get a print-ready pocket book. 4 formats, Typst typesetting, instant PDF generation.</div>
|
|
<span class="app-tag">publishing</span>
|
|
</a>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Self-Host -->
|
|
<div class="section-full alt-bg">
|
|
<div class="section-inner">
|
|
<div class="section-divider"></div>
|
|
<h2>Self-Host Your Stack</h2>
|
|
<p class="section-desc">
|
|
Every r-Stack app ships as a Docker container. Clone the repo, run
|
|
<span class="hl">docker compose up</span>, and the whole suite is live on
|
|
your hardware — a VPS, a home server, or a Raspberry Pi.
|
|
</p>
|
|
|
|
<div class="flow-box" style="margin-bottom: 2rem;">
|
|
<pre>
|
|
$ git clone https://git.rstack.online/rstack
|
|
$ cd rstack
|
|
$ cp .env.example .env # set your domain + secrets
|
|
$ docker compose up -d # that's it
|
|
|
|
✓ rSpace → space.yourdomain.org
|
|
✓ rNotes → notes.yourdomain.org
|
|
✓ rVote → vote.yourdomain.org
|
|
✓ rFunds → funds.yourdomain.org
|
|
✓ rFiles → files.yourdomain.org
|
|
✓ rMaps → maps.yourdomain.org
|
|
✓ EncryptID → id.yourdomain.org
|
|
...and every other app in the suite
|
|
</pre>
|
|
</div>
|
|
|
|
<div class="unlock-grid">
|
|
<div class="unlock-card">
|
|
<h3>Your server, your rules</h3>
|
|
<p>
|
|
No SaaS subscription, no per-seat pricing, no usage caps. Run the
|
|
entire stack for your 5-person co-op or your 500-person organization
|
|
on a single $10/month VPS. Scale by adding hardware, not by upgrading
|
|
a pricing tier.
|
|
</p>
|
|
</div>
|
|
|
|
<div class="unlock-card">
|
|
<h3>Data sovereignty by default</h3>
|
|
<p>
|
|
Your community's files, notes, votes, and financial records live on
|
|
disk you control. No third-party cloud provider can read, mine, or
|
|
accidentally leak your data. Backups are just files you copy.
|
|
</p>
|
|
</div>
|
|
|
|
<div class="unlock-card">
|
|
<h3>Fork and customize</h3>
|
|
<p>
|
|
Every app is open source. Need a custom voting algorithm? A different
|
|
map tile provider? A branded theme for your community? Fork the repo,
|
|
change what you need, and deploy. No permission required.
|
|
</p>
|
|
</div>
|
|
|
|
<div class="unlock-card">
|
|
<h3>No vendor, no kill switch</h3>
|
|
<p>
|
|
SaaS tools disappear when the company pivots or shuts down. Self-hosted
|
|
open-source tools keep running as long as you want them to. Your community's
|
|
infrastructure doesn't depend on anyone else's business model.
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- EncryptID Deep Dive -->
|
|
<div class="section-full">
|
|
<div class="section-inner">
|
|
<div class="section-divider"></div>
|
|
<h2>How EncryptID Works</h2>
|
|
<p class="section-desc">
|
|
A single identity layer that turns a fingerprint or face scan into
|
|
full-stack access — encrypted storage, signed votes, community
|
|
treasury, and more — without passwords, seed phrases, or cloud accounts.
|
|
</p>
|
|
|
|
<div class="eid-grid">
|
|
<div class="eid-card">
|
|
<div class="eid-card-icon">🔑</div>
|
|
<h3>Passkey Authentication</h3>
|
|
<p>
|
|
EncryptID is built on <span class="hl">WebAuthn passkeys</span> — the same
|
|
standard behind Face ID and fingerprint unlock on your phone. Your identity is
|
|
bound to your device's secure hardware (TPM or Secure Enclave), so there is
|
|
nothing to type, nothing to remember, and nothing that can be phished. Registration
|
|
and login are a single biometric prompt.
|
|
</p>
|
|
</div>
|
|
|
|
<div class="eid-card">
|
|
<div class="eid-card-icon">🏠</div>
|
|
<h3>Local-First Data Sovereignty</h3>
|
|
<p>
|
|
When you authenticate, EncryptID derives a full set of cryptographic keys
|
|
<span class="hl">entirely on your device</span> using HKDF. These keys
|
|
never leave your hardware. Your encryption key protects your files, your signing
|
|
key validates your votes, and your DID key proves your identity — all
|
|
without a central server ever seeing your private material. Data syncs
|
|
peer-to-peer via CRDTs; the server is just a relay, not an authority.
|
|
</p>
|
|
</div>
|
|
|
|
<div class="eid-card">
|
|
<div class="eid-card-icon">🛡</div>
|
|
<h3>Social Recovery</h3>
|
|
<p>
|
|
Lost your phone? No problem — and no seed phrase to dig out of a drawer.
|
|
EncryptID uses <span class="hl">guardian-based recovery</span>: you designate
|
|
trusted people (friends, family, community leaders) as guardians. If you lose
|
|
access, any 3 of your 5 guardians can approve recovery after a 48-hour
|
|
time-lock — giving you time to cancel if something seems wrong. Guardians
|
|
never see each other's identities or your private keys.
|
|
</p>
|
|
</div>
|
|
|
|
<div class="eid-card">
|
|
<div class="eid-card-icon">💳</div>
|
|
<h3>Wallet Abstraction</h3>
|
|
<p>
|
|
EncryptID integrates <span class="hl">Account Abstraction (ERC-4337)</span>
|
|
smart wallets, which means every user gets an on-chain wallet — without
|
|
ever seeing a wallet address, gas fee, or blockchain confirmation. Your passkey
|
|
<em>is</em> your wallet signer. A <span class="hl">paymaster</span> sponsors
|
|
transaction fees so users never need to hold ETH. Session keys allow daily
|
|
operations (voting, micro-payments, content uploads) with a single biometric
|
|
prompt per session rather than per action. Spending limits and time-locks
|
|
protect community treasuries.
|
|
</p>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="flow-box">
|
|
<pre>
|
|
You (fingerprint / face scan)
|
|
|
|
|
v
|
|
┌──────────────────────────────────────────────────────────┐
|
|
| EncryptID |
|
|
| |
|
|
| Layer 1: WebAuthn Passkey (hardware-backed) |
|
|
| | |
|
|
| Layer 2: Derived Keys (on-device, HKDF) |
|
|
| |── Encryption Key ── rFiles, rNotes, rSpace E2E |
|
|
| |── Signing Key ───── rVote ballots, authorship |
|
|
| └── DID Key ───────── portable identity |
|
|
| | |
|
|
| Layer 3: Smart Wallet (Account Abstraction) |
|
|
| |── Gasless transactions (paymaster-sponsored) |
|
|
| |── Session keys (one prompt per session) |
|
|
| └── Community treasury (multi-sig) |
|
|
| | |
|
|
| Layer 4: Cross-App SSO |
|
|
| └── One login for all r-Stack apps |
|
|
└──────────────────────────────────────────────────────────┘
|
|
|
|
|
v
|
|
rSpace · rVote · rWallet · rFunds · rMaps · rFiles · ...
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- What this unlocks -->
|
|
<div class="section-full alt-bg">
|
|
<div class="section-inner">
|
|
<div class="section-divider"></div>
|
|
<h2>What This Unlocks</h2>
|
|
<p class="section-desc">
|
|
Most blockchain tools assume users already know what a wallet is.
|
|
EncryptID removes that assumption entirely. Here's what becomes possible
|
|
when identity, encryption, and treasury are invisible infrastructure
|
|
rather than technical prerequisites.
|
|
</p>
|
|
|
|
<div class="unlock-grid">
|
|
<div class="unlock-card">
|
|
<h3>Community treasuries without crypto literacy</h3>
|
|
<p>
|
|
A neighbourhood association can pool funds, vote on how to spend them,
|
|
and track every transaction on an immutable ledger — all through
|
|
the same fingerprint login they use to unlock their phone. No one needs
|
|
to understand gas, private keys, or blockchain explorers. The wallet is
|
|
there, it's auditable, and it's invisible.
|
|
</p>
|
|
</div>
|
|
|
|
<div class="unlock-card">
|
|
<h3>Tamper-proof governance for any group</h3>
|
|
<p>
|
|
Co-ops, DAOs, strata councils, mutual aid networks — any group
|
|
that votes can use <span class="hl">rVote</span> with cryptographically
|
|
signed ballots that are verifiable but private. Because the signing key is
|
|
derived from a passkey, members don't need to manage keys or install
|
|
extensions. They just vote.
|
|
</p>
|
|
</div>
|
|
|
|
<div class="unlock-card">
|
|
<h3>Encrypted collaboration by default</h3>
|
|
<p>
|
|
Files shared in <span class="hl">rFiles</span>, notes in
|
|
<span class="hl">rNotes</span>, and canvases in
|
|
<span class="hl">rSpace</span> are end-to-end encrypted with keys
|
|
that only the community members hold. There's no admin backdoor, no
|
|
platform that can read your data, and no breach that exposes plaintext.
|
|
Privacy isn't a setting — it's the architecture.
|
|
</p>
|
|
</div>
|
|
|
|
<div class="unlock-card">
|
|
<h3>Portable identity across communities</h3>
|
|
<p>
|
|
Your EncryptID is a <span class="hl">DID (Decentralized Identifier)</span>
|
|
that you own. Join a new community, and your reputation, credentials, and
|
|
relationships can follow you — without creating a new account or
|
|
trusting a new platform with your data. Leave a community, and your
|
|
identity stays yours.
|
|
</p>
|
|
</div>
|
|
|
|
<div class="unlock-card">
|
|
<h3>Micro-payments and crowdfunding without fees</h3>
|
|
<p>
|
|
Paymaster-sponsored transactions mean a community can run a group
|
|
purchase in <span class="hl">rCart</span>, split expenses in
|
|
<span class="hl">rFunds</span>, or fund a project through
|
|
<span class="hl">rWallet</span> without any member paying gas fees.
|
|
The smart wallet batches operations, so what would be ten separate
|
|
transactions becomes one seamless action.
|
|
</p>
|
|
</div>
|
|
|
|
<div class="unlock-card">
|
|
<h3>Real ownership of community infrastructure</h3>
|
|
<p>
|
|
Because every app is <span class="hl">open source</span> and
|
|
<span class="hl">self-hosted</span>, communities aren't tenants on
|
|
someone else's platform. Fork the code, run it on your own hardware,
|
|
audit every line. The r-Stack is infrastructure that communities
|
|
<em>own</em>, not services they <em>rent</em>.
|
|
</p>
|
|
</div>
|
|
</div>
|
|
|
|
<div style="text-align: center; margin-top: 2.5rem;">
|
|
<a href="https://encryptid.jeffemmett.com" class="encryptid-link">
|
|
🔐 Explore EncryptID
|
|
</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Token Issuance -->
|
|
<div class="section-full">
|
|
<div class="section-inner">
|
|
<div class="section-divider"></div>
|
|
<h2>Community Token Issuance</h2>
|
|
<p class="section-desc">
|
|
Any r-Stack app can issue tokens to community members through the shared
|
|
CRDT data layer — no smart contract deployment, no gas fees, no
|
|
blockchain expertise required.
|
|
</p>
|
|
|
|
<div class="eid-grid">
|
|
<div class="eid-card" style="grid-column: 1 / -1;">
|
|
<div class="eid-card-icon">🪙</div>
|
|
<h3>BFT-CRDT Tokens</h3>
|
|
<p>
|
|
r-Stack tokens are built on <span class="hl">Byzantine Fault Tolerant CRDTs</span>
|
|
— the same conflict-free data structures that power real-time sync across
|
|
every app. Tokens are first-class objects in the shared data layer: they replicate
|
|
peer-to-peer, resolve conflicts automatically, and maintain a consistent ledger
|
|
across all participants without a central mint or blockchain validator. When your
|
|
community is ready to bridge to an on-chain asset, the CRDT ledger provides a
|
|
cryptographically verifiable history that can be anchored to any EVM chain
|
|
through the Account Abstraction wallet.
|
|
</p>
|
|
</div>
|
|
|
|
<div class="eid-card">
|
|
<div class="eid-card-icon">📋</div>
|
|
<h3>Issue by Email or EncryptID</h3>
|
|
<p>
|
|
A community admin adds members by <span class="hl">email address</span> or
|
|
<span class="hl">EncryptID account</span> to a distribution list. Hit issue,
|
|
and each member receives tokens in their r-Stack wallet instantly. Recipients
|
|
who haven't signed up yet get an invite link — their tokens are held in
|
|
escrow until they create a passkey, at which point the allocation transfers
|
|
automatically. No wallet addresses to copy-paste, no chain selection, no
|
|
confirmation dialogs.
|
|
</p>
|
|
</div>
|
|
|
|
<div class="eid-card">
|
|
<div class="eid-card-icon">🔄</div>
|
|
<h3>Works Across Every App</h3>
|
|
<p>
|
|
Because tokens live in the shared CRDT layer, every r-Stack app can read and
|
|
write them. <span class="hl">rVote</span> can weight votes by token holdings.
|
|
<span class="hl">rFunds</span> can allocate budgets proportionally.
|
|
<span class="hl">rWallet</span> can gate treasury access by membership tokens.
|
|
<span class="hl">rCart</span> can accept community tokens as payment. The
|
|
token is a primitive that flows through the entire stack, not a siloed balance
|
|
locked inside one app.
|
|
</p>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="flow-box">
|
|
<pre>
|
|
Community Admin
|
|
|
|
|
| 1. Add members (email or EncryptID)
|
|
v
|
|
┌──────────────────────────────────────────────────────┐
|
|
| Token Issuance (BFT-CRDT) |
|
|
| |
|
|
| 2. Define token: name, supply, distribution rules |
|
|
| 3. Issue → tokens replicate across CRDT mesh |
|
|
| 4. Members receive in r-Stack wallet instantly |
|
|
└──────────────────────────────────────────────────────┘
|
|
|
|
|
| Tokens are usable immediately across:
|
|
v
|
|
┌──────────┬──────────┬──────────┬──────────┐
|
|
| rVote | rFunds | rWallet | rCart |
|
|
| weighted | budget | treasury | payment |
|
|
| voting | shares | access | method |
|
|
└──────────┴──────────┴──────────┴──────────┘
|
|
|
|
|
| Optional: bridge to on-chain (ERC-20)
|
|
v
|
|
EVM Chain (via Account Abstraction wallet)
|
|
</pre>
|
|
</div>
|
|
|
|
<div class="unlock-grid" style="margin-top: 2rem;">
|
|
<div class="unlock-card">
|
|
<h3>Membership and access tokens</h3>
|
|
<p>
|
|
Issue a token that represents membership in your community space. Gate
|
|
access to private canvases, files, or voting channels. Revoke by removing
|
|
the token. No smart contract audit needed — the CRDT ledger
|
|
is the source of truth, and permissions propagate in real-time.
|
|
</p>
|
|
</div>
|
|
|
|
<div class="unlock-card">
|
|
<h3>Contribution credits</h3>
|
|
<p>
|
|
Reward members for participation: attending meetings, completing tasks,
|
|
contributing content. Credits accumulate in the CRDT ledger and can be
|
|
redeemed for governance weight in <span class="hl">rVote</span>, budget
|
|
allocation in <span class="hl">rFunds</span>, or community marketplace
|
|
purchases in <span class="hl">rCart</span>.
|
|
</p>
|
|
</div>
|
|
|
|
<div class="unlock-card">
|
|
<h3>Fundraising and grants</h3>
|
|
<p>
|
|
Create a project token, distribute to supporters, and track contributions
|
|
transparently. Supporters can see exactly how funds flow through
|
|
<span class="hl">rFunds</span> and vote on allocation through
|
|
<span class="hl">rVote</span>. The full history is auditable by
|
|
anyone holding the token.
|
|
</p>
|
|
</div>
|
|
|
|
<div class="unlock-card">
|
|
<h3>Bridge to on-chain when ready</h3>
|
|
<p>
|
|
Start with off-chain CRDT tokens for zero friction and zero cost.
|
|
When your community needs on-chain guarantees — for DeFi
|
|
composability, cross-community exchange, or regulatory compliance —
|
|
the CRDT ledger can be bridged to an <span class="hl">ERC-20</span>
|
|
token through the Account Abstraction wallet with a single action.
|
|
</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<footer>
|
|
<p>rStack — open source, self-hosted, community-owned</p>
|
|
<p style="margin-top: 0.5rem;">
|
|
<a href="https://rspace.online">rSpace</a> ·
|
|
<a href="https://encryptid.jeffemmett.com">EncryptID</a> ·
|
|
<a href="https://github.com/jeffemmett">GitHub</a>
|
|
</p>
|
|
</footer>
|
|
|
|
</body>
|
|
</html>
|