/ docs / ekko-overview.html
ekko-overview.html
  1  <!DOCTYPE html>
  2  <html lang="en">
  3  <head>
  4  <meta charset="UTF-8">
  5  <title>Ekko — Messaging Without Middlemen</title>
  6  <link rel="preconnect" href="https://fonts.googleapis.com">
  7  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
  8  <link href="https://fonts.googleapis.com/css2?family=Exo+2:wght@400;600;700&display=swap" rel="stylesheet">
  9  <style>
 10    @page {
 11      size: A4;
 12      margin: 2.5cm 2cm;
 13      @bottom-center {
 14        content: counter(page);
 15        font-size: 10px;
 16        color: #666;
 17      }
 18    }
 19    body {
 20      font-family: 'Exo 2', -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif;
 21      color: #1a1a2e;
 22      line-height: 1.65;
 23      font-size: 11pt;
 24      max-width: 100%;
 25    }
 26    h1 {
 27      font-size: 28pt;
 28      color: #0D0D18;
 29      text-align: center;
 30      margin-top: 3cm;
 31      margin-bottom: 0.5cm;
 32      letter-spacing: -0.5px;
 33    }
 34    .subtitle {
 35      text-align: center;
 36      font-size: 14pt;
 37      color: #555;
 38      margin-bottom: 2cm;
 39    }
 40    h2 {
 41      font-size: 18pt;
 42      color: #0D0D18;
 43      border-bottom: 2px solid #0D0D18;
 44      padding-bottom: 6px;
 45      margin-top: 1.5cm;
 46      page-break-after: avoid;
 47    }
 48    h3 {
 49      font-size: 13pt;
 50      color: #2a2a4a;
 51      margin-top: 0.8cm;
 52      page-break-after: avoid;
 53    }
 54    p, li {
 55      font-size: 11pt;
 56      margin-bottom: 0.3cm;
 57    }
 58    ul {
 59      padding-left: 1.2cm;
 60    }
 61    li {
 62      margin-bottom: 0.15cm;
 63    }
 64    strong {
 65      color: #0D0D18;
 66    }
 67    .highlight-box {
 68      background: #f0f4ff;
 69      border-left: 4px solid #3366cc;
 70      padding: 12px 16px;
 71      margin: 0.5cm 0;
 72      border-radius: 0 6px 6px 0;
 73      page-break-inside: avoid;
 74    }
 75    .highlight-box p {
 76      margin: 4px 0;
 77    }
 78    .warning-box {
 79      background: #fff8f0;
 80      border-left: 4px solid #cc7733;
 81      padding: 12px 16px;
 82      margin: 0.5cm 0;
 83      border-radius: 0 6px 6px 0;
 84      page-break-inside: avoid;
 85    }
 86    .transport-card {
 87      background: #fafafa;
 88      border: 1px solid #ddd;
 89      border-radius: 8px;
 90      padding: 16px 20px;
 91      margin: 0.5cm 0;
 92      page-break-inside: avoid;
 93    }
 94    .transport-card h3 {
 95      margin-top: 0;
 96      color: #0D0D18;
 97      font-size: 14pt;
 98    }
 99    .transport-card .how {
100      font-style: italic;
101      color: #444;
102      font-size: 10pt;
103      margin-top: 0.3cm;
104    }
105    table {
106      width: 100%;
107      border-collapse: collapse;
108      margin: 0.5cm 0;
109      font-size: 10pt;
110      page-break-inside: avoid;
111    }
112    th {
113      background: #0D0D18;
114      color: white;
115      padding: 8px 12px;
116      text-align: left;
117      font-weight: 600;
118    }
119    td {
120      padding: 7px 12px;
121      border-bottom: 1px solid #ddd;
122    }
123    tr:nth-child(even) td {
124      background: #f8f8f8;
125    }
126    .check { color: #22863a; font-weight: bold; }
127    .cross { color: #cb2431; }
128    .partial { color: #b08800; }
129    .cover-features {
130      display: flex;
131      flex-wrap: wrap;
132      gap: 8px;
133      justify-content: center;
134      margin: 1cm 0;
135    }
136    .cover-feature {
137      background: #0D0D18;
138      color: white;
139      padding: 6px 14px;
140      border-radius: 20px;
141      font-size: 9pt;
142      font-weight: 500;
143    }
144    .section-intro {
145      font-size: 12pt;
146      color: #333;
147      font-style: italic;
148      margin-bottom: 0.5cm;
149    }
150    .roadmap-item {
151      background: #f5f0ff;
152      border-left: 4px solid #7c3aed;
153      padding: 12px 16px;
154      margin: 0.5cm 0;
155      border-radius: 0 6px 6px 0;
156      page-break-inside: avoid;
157    }
158    /* Transport diagram */
159    .diagram-container {
160      text-align: center;
161      margin: 0.8cm 0;
162      page-break-inside: avoid;
163    }
164    .diagram-container svg {
165      max-width: 100%;
166    }
167    .page-break {
168      page-break-before: always;
169    }
170  </style>
171  </head>
172  <body>
173  
174  <!-- Cover Page -->
175  <h1>Ekko</h1>
176  <p class="subtitle">Messaging Without Middlemen</p>
177  
178  <div class="cover-features">
179    <span class="cover-feature">No Accounts</span>
180    <span class="cover-feature">No Servers</span>
181    <span class="cover-feature">No Metadata</span>
182    <span class="cover-feature">End-to-End Encrypted</span>
183    <span class="cover-feature">Offline Capable</span>
184    <span class="cover-feature">Cross-Platform</span>
185    <span class="cover-feature">Auditable Security</span>
186    <span class="cover-feature">Mesh Networking</span>
187  </div>
188  
189  <!-- Architecture Overview Diagram -->
190  <div class="diagram-container">
191  <svg viewBox="0 0 600 320" xmlns="http://www.w3.org/2000/svg">
192    <!-- Background -->
193    <rect width="600" height="320" fill="#fafafa" rx="12"/>
194  
195    <!-- Device A -->
196    <rect x="30" y="110" width="100" height="120" rx="12" fill="#0D0D18" stroke="#333" stroke-width="1.5"/>
197    <rect x="40" y="125" width="80" height="75" rx="4" fill="#1a1a3e"/>
198    <text x="80" y="165" text-anchor="middle" fill="#7cabf0" font-size="11" font-weight="600">Ekko</text>
199    <circle cx="80" cy="210" r="6" fill="none" stroke="#555" stroke-width="1.5"/>
200    <text x="80" y="250" text-anchor="middle" fill="#666" font-size="10">Your Device</text>
201  
202    <!-- Device B -->
203    <rect x="470" y="110" width="100" height="120" rx="12" fill="#0D0D18" stroke="#333" stroke-width="1.5"/>
204    <rect x="480" y="125" width="80" height="75" rx="4" fill="#1a1a3e"/>
205    <text x="520" y="165" text-anchor="middle" fill="#7cabf0" font-size="11" font-weight="600">Ekko</text>
206    <circle cx="520" cy="210" r="6" fill="none" stroke="#555" stroke-width="1.5"/>
207    <text x="520" y="250" text-anchor="middle" fill="#666" font-size="10">Contact's Device</text>
208  
209    <!-- Transport paths -->
210    <!-- BLE -->
211    <path d="M130 140 Q 300 90 470 140" fill="none" stroke="#3b82f6" stroke-width="2" stroke-dasharray="6,3"/>
212    <text x="300" y="100" text-anchor="middle" fill="#3b82f6" font-size="9" font-weight="600">Bluetooth</text>
213  
214    <!-- DHT -->
215    <path d="M130 160 Q 300 145 470 160" fill="none" stroke="#22c55e" stroke-width="2"/>
216    <text x="300" y="148" text-anchor="middle" fill="#16a34a" font-size="9" font-weight="600">DHT Network</text>
217  
218    <!-- Tor -->
219    <path d="M130 180 Q 300 190 470 180" fill="none" stroke="#a855f7" stroke-width="2"/>
220    <text x="300" y="195" text-anchor="middle" fill="#9333ea" font-size="9" font-weight="600">Tor Onion</text>
221  
222    <!-- iroh -->
223    <path d="M130 200 Q 300 225 470 200" fill="none" stroke="#f59e0b" stroke-width="2" stroke-dasharray="4,4"/>
224    <text x="300" y="228" text-anchor="middle" fill="#d97706" font-size="9" font-weight="600">iroh QUIC</text>
225  
226    <!-- Mesh -->
227    <path d="M130 220 Q 300 265 470 220" fill="none" stroke="#ef4444" stroke-width="2" stroke-dasharray="2,4"/>
228    <text x="300" y="268" text-anchor="middle" fill="#dc2626" font-size="9" font-weight="600">Mesh Relay</text>
229  
230    <!-- Title -->
231    <text x="300" y="30" text-anchor="middle" fill="#0D0D18" font-size="14" font-weight="700">Five Independent Communication Paths</text>
232    <text x="300" y="50" text-anchor="middle" fill="#666" font-size="10">No central server. No single point of failure.</text>
233  
234    <!-- Legend -->
235    <text x="300" y="300" text-anchor="middle" fill="#888" font-size="9">If one path is blocked, messages automatically use another.</text>
236  </svg>
237  </div>
238  
239  
240  <!-- Why Ekko Exists -->
241  <h2 class="page-break">Why Ekko Exists</h2>
242  
243  <p>Every mainstream messaging app &mdash; WhatsApp, Signal, iMessage, Telegram &mdash; relies on central servers operated by a single company. Even when messages are encrypted, the server still knows <em>who</em> you're talking to, <em>when</em>, and <em>how often</em>. If the company goes down, gets hacked, or is compelled by a government to hand over data, your communication is at risk.</p>
244  
245  <p>Ekko takes a fundamentally different approach: <strong>there is no server.</strong> Your messages travel through decentralized networks that no single entity controls. Your identity is a cryptographic key stored only on your device &mdash; not an email address, not a phone number, not a username tied to any service.</p>
246  
247  <div class="highlight-box">
248    <p><strong>Who is Ekko for?</strong></p>
249    <p>&bull; Journalists and activists operating in sensitive environments</p>
250    <p>&bull; Privacy-conscious individuals who don't want their social graph harvested</p>
251    <p>&bull; Communities with unreliable internet where Bluetooth and mesh networking keep communication alive</p>
252    <p>&bull; Anyone who believes messaging infrastructure shouldn't depend on the goodwill of a corporation</p>
253  </div>
254  
255  
256  <!-- Features -->
257  <h2>Current Features</h2>
258  
259  <h3>Messaging</h3>
260  <ul>
261    <li><strong>Encrypted text messaging</strong> &mdash; Every message is encrypted end-to-end with modern cryptography (ChaCha20-Poly1305). There is no Ekko server that could read your messages.</li>
262    <li><strong>File and photo sharing</strong> &mdash; Send documents, photos, and videos of any size. Large files are automatically chunked and reassembled.</li>
263    <li><strong>Group conversations</strong> &mdash; Create groups, add members, and send encrypted group messages. Group invitations require explicit acceptance.</li>
264    <li><strong>Message reactions</strong> &mdash; React to messages with emojis.</li>
265    <li><strong>GIF support</strong> &mdash; Built-in GIF picker for expressive conversations.</li>
266    <li><strong>Disappearing messages</strong> &mdash; Auto-delete after 5 minutes, 1 hour, 1 day, or 1 week.</li>
267  </ul>
268  
269  <h3>Identity and Contacts</h3>
270  <ul>
271    <li><strong>No accounts required</strong> &mdash; Your identity is generated on your device as a cryptographic keypair. Nothing to register.</li>
272    <li><strong>QR code contact exchange</strong> &mdash; Add contacts by scanning each other's QR codes in person.</li>
273    <li><strong>Nearby discovery</strong> &mdash; Find contacts via Bluetooth when you're in the same room.</li>
274    <li><strong>Profile sharing controls</strong> &mdash; Choose who sees your profile picture and display name.</li>
275    <li><strong>Contact verification</strong> &mdash; Unique fingerprints for verifying identity in person.</li>
276  </ul>
277  
278  <h3>Security</h3>
279  <ul>
280    <li><strong>Automatic encryption</strong> &mdash; Your database is encrypted with a randomly generated passphrase. Security is the default.</li>
281    <li><strong>Biometric unlock</strong> &mdash; Face ID or Touch ID support.</li>
282    <li><strong>Local-only storage</strong> &mdash; All data lives on your device. No cloud backup to subpoena.</li>
283    <li><strong>Backup and restore</strong> &mdash; Export your encrypted database for safekeeping.</li>
284  </ul>
285  
286  <h3>Platforms</h3>
287  <ul>
288    <li>iOS (iPhone and iPad)</li>
289    <li>Android</li>
290    <li>macOS (native desktop app)</li>
291    <li>Windows (in development)</li>
292  </ul>
293  
294  
295  <!-- Transports -->
296  <h2 class="page-break">How Messages Travel</h2>
297  
298  <p class="section-intro">Ekko uses five different communication paths. The app automatically selects the best available path &mdash; you don't need to configure anything.</p>
299  
300  <!-- Transport Selection Diagram -->
301  <h3>Automatic Transport Selection</h3>
302  <div class="diagram-container">
303  <svg viewBox="0 0 600 220" xmlns="http://www.w3.org/2000/svg">
304    <rect width="600" height="220" fill="#fafafa" rx="12"/>
305  
306    <!-- Flow -->
307    <rect x="20" y="50" width="110" height="40" rx="8" fill="#0D0D18"/>
308    <text x="75" y="74" text-anchor="middle" fill="white" font-size="10" font-weight="600">You send a message</text>
309  
310    <!-- Arrow -->
311    <line x1="130" y1="70" x2="160" y2="70" stroke="#666" stroke-width="1.5" marker-end="url(#arrowhead)"/>
312  
313    <!-- Decision -->
314    <polygon points="230,45 300,70 230,95 160,70" fill="#f0f4ff" stroke="#3366cc" stroke-width="1.5"/>
315    <text x="230" y="73" text-anchor="middle" fill="#3366cc" font-size="9" font-weight="600">Contact nearby?</text>
316  
317    <!-- Yes path -->
318    <line x1="230" y1="45" x2="230" y2="20" stroke="#22c55e" stroke-width="1.5"/>
319    <text x="240" y="36" fill="#22c55e" font-size="8">Yes</text>
320    <rect x="185" y="5" width="90" height="15" rx="4" fill="#22c55e"/>
321    <text x="230" y="15" text-anchor="middle" fill="white" font-size="8" font-weight="600">Bluetooth (instant)</text>
322  
323    <!-- No path -->
324    <line x1="300" y1="70" x2="330" y2="70" stroke="#666" stroke-width="1.5"/>
325    <text x="308" y="64" fill="#cb2431" font-size="8">No</text>
326  
327    <!-- Second decision -->
328    <polygon points="400,45 470,70 400,95 330,70" fill="#f5f0ff" stroke="#7c3aed" stroke-width="1.5"/>
329    <text x="400" y="68" text-anchor="middle" fill="#7c3aed" font-size="8" font-weight="600">Anonymous</text>
330    <text x="400" y="78" text-anchor="middle" fill="#7c3aed" font-size="8" font-weight="600">mode?</text>
331  
332    <!-- Yes - Tor -->
333    <line x1="400" y1="45" x2="400" y2="20" stroke="#a855f7" stroke-width="1.5"/>
334    <text x="410" y="36" fill="#a855f7" font-size="8">Yes</text>
335    <rect x="355" y="5" width="90" height="15" rx="4" fill="#a855f7"/>
336    <text x="400" y="15" text-anchor="middle" fill="white" font-size="8" font-weight="600">Tor (anonymous)</text>
337  
338    <!-- No - multiple -->
339    <line x1="470" y1="70" x2="500" y2="70" stroke="#666" stroke-width="1.5"/>
340    <text x="478" y="64" fill="#cb2431" font-size="8">No</text>
341  
342    <!-- All transports -->
343    <rect x="500" y="42" width="85" height="18" rx="4" fill="#22c55e"/>
344    <text x="542" y="54" text-anchor="middle" fill="white" font-size="8" font-weight="600">DHT (30s-5min)</text>
345  
346    <rect x="500" y="64" width="85" height="18" rx="4" fill="#f59e0b"/>
347    <text x="542" y="76" text-anchor="middle" fill="white" font-size="8" font-weight="600">iroh (seconds)</text>
348  
349    <rect x="500" y="86" width="85" height="18" rx="4" fill="#a855f7"/>
350    <text x="542" y="98" text-anchor="middle" fill="white" font-size="8" font-weight="600">Tor (5-15s setup)</text>
351  
352    <!-- Bottom note -->
353    <rect x="60" y="130" width="480" height="70" rx="8" fill="#fff8f0" stroke="#cc7733" stroke-width="1"/>
354    <text x="300" y="150" text-anchor="middle" fill="#0D0D18" font-size="10" font-weight="600">Plus: Mesh Relay via Bluetooth Gossip</text>
355    <text x="300" y="167" text-anchor="middle" fill="#555" font-size="9">When you meet someone via Bluetooth, your devices relay encrypted</text>
356    <text x="300" y="181" text-anchor="middle" fill="#555" font-size="9">messages for anyone &mdash; not just your contacts. Every device is a courier.</text>
357  
358    <!-- Arrow marker -->
359    <defs>
360      <marker id="arrowhead" markerWidth="8" markerHeight="6" refX="8" refY="3" orient="auto">
361        <polygon points="0 0, 8 3, 0 6" fill="#666"/>
362      </marker>
363    </defs>
364  </svg>
365  </div>
366  
367  <div class="transport-card">
368    <h3>Bluetooth (BLE) &mdash; Face-to-Face Messaging</h3>
369    <p>When you're physically near someone (within about 30 feet), Ekko sends messages directly over Bluetooth. No internet needed. This is the fastest path and works even if all networks are down.</p>
370    <p class="how">Your phone quietly advertises its presence. When a contact's phone is nearby, the two devices establish an encrypted tunnel and exchange messages instantly. The data never touches the internet.</p>
371  </div>
372  
373  <div class="transport-card">
374    <h3>Internet (DHT) &mdash; Decentralized Message Delivery</h3>
375    <p>When you're not nearby, Ekko uses a global peer-to-peer network called a Distributed Hash Table &mdash; the same kind of network that powers BitTorrent. Your encrypted messages are placed into this network, and your contacts pick them up when they come online.</p>
376    <p class="how">Think of it like a public bulletin board where messages are written in a code only the intended recipient can read. The bulletin board is maintained by thousands of independent computers worldwide &mdash; no single company runs it.</p>
377  </div>
378  
379  <div class="transport-card">
380    <h3>Onion Routing (Tor) &mdash; Anonymous Direct Connection</h3>
381    <p>For maximum privacy, Ekko can establish a direct connection through the Tor network. Your messages bounce through multiple encrypted layers so that neither you nor your contact reveal your location or IP address.</p>
382    <p class="how">Each device creates a hidden address (an "onion service") reachable only through the Tor network. Messages travel through three layers of encryption across different countries. Even if someone watches network traffic, they can't tell who's talking to whom.</p>
383  </div>
384  
385  <div class="transport-card">
386    <h3>Quick Relay (iroh) &mdash; NAT-Busting P2P</h3>
387    <p>Some networks (corporate firewalls, strict mobile carriers) block direct connections. Ekko uses a modern protocol called QUIC to punch through these barriers. If a direct link isn't possible, messages pass through a free relay &mdash; still encrypted end-to-end.</p>
388    <p class="how">Devices exchange endpoint IDs through the decentralized network, then connect directly using a protocol that's faster and more reliable than traditional connections. The relay only helps devices find each other &mdash; it never sees your message content.</p>
389  </div>
390  
391  <div class="transport-card">
392    <h3>Mesh Relay (BLE Gossip) &mdash; Store and Forward</h3>
393    <p>When two people meet via Bluetooth, their devices can also relay encrypted messages for anyone &mdash; not just their own contacts. If one person has internet and the other doesn't, the connected person forwards messages without being able to read them. Every Ekko device acts as a potential courier in a larger mesh network.</p>
394    <p class="how">After a normal Bluetooth exchange, devices enter "gossip mode" and share encrypted blobs meant for other people. The relay person can't decrypt these messages and doesn't even know who the intended recipients are. This extends Ekko's reach into areas with spotty connectivity and helps messages find their way to people you've never met.</p>
395  </div>
396  
397  
398  <!-- Latency Explanation -->
399  <h2 class="page-break">Why Messages Take Longer Than WhatsApp</h2>
400  
401  <p>If you're used to iMessage or WhatsApp, you'll notice that Ekko messages can take a few seconds &mdash; or sometimes minutes &mdash; to arrive. This is a deliberate trade-off.</p>
402  
403  <!-- Latency Comparison Diagram -->
404  <div class="diagram-container">
405  <svg viewBox="0 0 600 200" xmlns="http://www.w3.org/2000/svg">
406    <rect width="600" height="200" fill="#fafafa" rx="12"/>
407    <text x="300" y="25" text-anchor="middle" fill="#0D0D18" font-size="13" font-weight="700">Delivery Speed vs. Privacy Trade-off</text>
408  
409    <!-- Axes -->
410    <line x1="80" y1="45" x2="80" y2="170" stroke="#ccc" stroke-width="1"/>
411    <line x1="80" y1="170" x2="560" y2="170" stroke="#ccc" stroke-width="1"/>
412    <text x="320" y="192" text-anchor="middle" fill="#888" font-size="9">Privacy Protection</text>
413    <text x="30" y="110" text-anchor="middle" fill="#888" font-size="9" transform="rotate(-90,30,110)">Speed</text>
414  
415    <!-- Scale labels -->
416    <text x="100" y="183" fill="#aaa" font-size="8">Low</text>
417    <text x="535" y="183" fill="#aaa" font-size="8">High</text>
418    <text x="72" y="165" fill="#aaa" font-size="8" text-anchor="end">Slow</text>
419    <text x="72" y="55" fill="#aaa" font-size="8" text-anchor="end">Fast</text>
420  
421    <!-- Data points -->
422    <!-- iMessage -->
423    <circle cx="120" cy="60" r="18" fill="#007AFF" opacity="0.2" stroke="#007AFF" stroke-width="1.5"/>
424    <text x="120" y="63" text-anchor="middle" fill="#007AFF" font-size="8" font-weight="600">iMessage</text>
425  
426    <!-- WhatsApp -->
427    <circle cx="170" cy="65" r="18" fill="#25D366" opacity="0.2" stroke="#25D366" stroke-width="1.5"/>
428    <text x="170" y="68" text-anchor="middle" fill="#1da851" font-size="8" font-weight="600">WhatsApp</text>
429  
430    <!-- Signal -->
431    <circle cx="280" cy="70" r="18" fill="#3a76f0" opacity="0.2" stroke="#3a76f0" stroke-width="1.5"/>
432    <text x="280" y="73" text-anchor="middle" fill="#3a76f0" font-size="8" font-weight="600">Signal</text>
433  
434    <!-- Ekko BLE -->
435    <circle cx="420" cy="55" r="18" fill="#3b82f6" opacity="0.2" stroke="#3b82f6" stroke-width="1.5"/>
436    <text x="420" y="53" text-anchor="middle" fill="#3b82f6" font-size="7" font-weight="600">Ekko</text>
437    <text x="420" y="62" text-anchor="middle" fill="#3b82f6" font-size="7">(BLE)</text>
438  
439    <!-- Ekko iroh -->
440    <circle cx="460" cy="90" r="18" fill="#f59e0b" opacity="0.2" stroke="#f59e0b" stroke-width="1.5"/>
441    <text x="460" y="88" text-anchor="middle" fill="#d97706" font-size="7" font-weight="600">Ekko</text>
442    <text x="460" y="97" text-anchor="middle" fill="#d97706" font-size="7">(iroh)</text>
443  
444    <!-- Ekko Tor -->
445    <circle cx="520" cy="110" r="18" fill="#a855f7" opacity="0.2" stroke="#a855f7" stroke-width="1.5"/>
446    <text x="520" y="108" text-anchor="middle" fill="#9333ea" font-size="7" font-weight="600">Ekko</text>
447    <text x="520" y="117" text-anchor="middle" fill="#9333ea" font-size="7">(Tor)</text>
448  
449    <!-- Ekko DHT -->
450    <circle cx="490" cy="140" r="18" fill="#22c55e" opacity="0.2" stroke="#22c55e" stroke-width="1.5"/>
451    <text x="490" y="138" text-anchor="middle" fill="#16a34a" font-size="7" font-weight="600">Ekko</text>
452    <text x="490" y="147" text-anchor="middle" fill="#16a34a" font-size="7">(DHT)</text>
453  </svg>
454  </div>
455  
456  <h3>Centralized Apps Have a Speed Advantage &mdash; at a Cost</h3>
457  
458  <p>WhatsApp and iMessage route every message through company-owned servers in data centers with dedicated, always-on connections. When you send a message, it goes to Apple's or Meta's server in milliseconds, and the server pushes it to the recipient instantly.</p>
459  
460  <div class="warning-box">
461    <p><strong>But this speed comes with trade-offs:</strong></p>
462    <p>&bull; The company knows your social graph &mdash; who you talk to, when, and how often</p>
463    <p>&bull; Single point of failure &mdash; if the server goes down, no one can communicate</p>
464    <p>&bull; Censorship vulnerability &mdash; governments can pressure one company to block users</p>
465    <p>&bull; Trust requirement &mdash; you must trust the company won't change its privacy policies</p>
466  </div>
467  
468  <h3>Ekko Takes a Different Path &mdash; Literally</h3>
469  
470  <p>Ekko messages travel through decentralized networks with no central coordinator:</p>
471  
472  <ul>
473    <li><strong>DHT delivery</strong> involves publishing your encrypted message to a distributed network and waiting for the recipient to poll. Round-trip is typically 30 seconds to a few minutes.</li>
474    <li><strong>Tor connections</strong> route through three independent relays. Establishing the initial circuit takes 5&ndash;15 seconds; subsequent messages are near-instant.</li>
475    <li><strong>Bluetooth</strong> is actually <em>faster</em> than centralized apps for nearby contacts &mdash; under one second with no internet round-trip.</li>
476    <li><strong>iroh relay</strong> connections are comparable to centralized services once established, but initial setup takes a few seconds.</li>
477  </ul>
478  
479  <div class="highlight-box">
480    <p><strong>The latency is the privacy.</strong></p>
481    <p>The extra time isn't a bug &mdash; it's the natural consequence of removing the middleman. Every second of latency represents a layer of privacy protection: no server logs, no relationship mapping, no single point of compromise.</p>
482    <p>For nearby contacts, Bluetooth is faster than any centralized app. For distant contacts, the trade-off is seconds of latency in exchange for communication that no third party can monitor, block, or control.</p>
483  </div>
484  
485  
486  <!-- Roadmap -->
487  <h2 class="page-break">Development Roadmap</h2>
488  
489  <p class="section-intro">Ekko's core is free and fully functional. Planned subscription services enhance speed and reliability without compromising privacy or limiting free users.</p>
490  
491  <div class="roadmap-item">
492    <h3>DHT Subscription Service (Planned)</h3>
493    <p>Currently, Ekko uses the public BitTorrent DHT to store and retrieve messages. This works well but has natural limitations: each entry holds about 950 bytes, messages persist for about 48 hours, and recipients must poll for new messages.</p>
494    <p>The DHT Subscription Service will offer:</p>
495    <ul>
496      <li><strong>Push notifications</strong> &mdash; Instant alerts when new messages arrive, instead of polling</li>
497      <li><strong>Extended message retention</strong> &mdash; Messages stored longer for devices offline for extended periods</li>
498      <li><strong>Priority publishing</strong> &mdash; Faster message propagation across the network</li>
499      <li><strong>Larger payloads</strong> &mdash; Bigger messages without chunking overhead</li>
500    </ul>
501    <p>This service will operate as DHT "super-nodes" that participate in the public network while offering premium features. The underlying protocol remains open &mdash; non-subscribers continue using the free public DHT.</p>
502  </div>
503  
504  <div class="roadmap-item">
505    <h3>Relay Subscription Service (Planned)</h3>
506    <p>For users who want centralized-app reliability without sacrificing privacy:</p>
507    <ul>
508      <li><strong>Dedicated relay infrastructure</strong> &mdash; High-availability relay nodes operated by Ekko</li>
509      <li><strong>Offline message queuing</strong> &mdash; Messages stored until the recipient comes online, fully encrypted</li>
510      <li><strong>Faster delivery</strong> &mdash; Reduced latency approaching centralized messenger speeds</li>
511      <li><strong>Geographic distribution</strong> &mdash; Relay nodes in multiple regions worldwide</li>
512    </ul>
513    <p>The relay uses a <strong>zero-knowledge architecture</strong>: relay nodes store and forward encrypted blobs without any ability to inspect content, identify senders, or correlate recipients. Subscribers authenticate using cryptographic tokens &mdash; no personal information required.</p>
514  </div>
515  
516  <h3>Pricing Philosophy</h3>
517  <ul>
518    <li><strong>Free tier remains fully functional</strong> &mdash; All transports, all features, no artificial limitations</li>
519    <li><strong>Subscriptions enhance speed and reliability</strong> &mdash; Not access to basic functionality</li>
520    <li><strong>No data monetization</strong> &mdash; Ekko will never sell user data, display ads, or harvest metadata</li>
521    <li><strong>Transparent operation</strong> &mdash; Subscription infrastructure will be independently auditable</li>
522  </ul>
523  
524  
525  <!-- Comparison Table -->
526  <h2 class="page-break">How Ekko Compares</h2>
527  
528  <table>
529    <tr>
530      <th>Feature</th>
531      <th>Ekko</th>
532      <th>WhatsApp</th>
533      <th>Signal</th>
534      <th>iMessage</th>
535    </tr>
536    <tr>
537      <td>Requires account</td>
538      <td class="check">No</td>
539      <td class="cross">Yes (phone)</td>
540      <td class="cross">Yes (phone)</td>
541      <td class="cross">Yes (Apple ID)</td>
542    </tr>
543    <tr>
544      <td>Central server</td>
545      <td class="check">None</td>
546      <td class="cross">Meta servers</td>
547      <td class="cross">Signal servers</td>
548      <td class="cross">Apple servers</td>
549    </tr>
550    <tr>
551      <td>End-to-end encryption</td>
552      <td class="check">Yes</td>
553      <td class="check">Yes</td>
554      <td class="check">Yes</td>
555      <td class="check">Yes</td>
556    </tr>
557    <tr>
558      <td>Metadata protection</td>
559      <td class="check">Yes</td>
560      <td class="cross">No</td>
561      <td class="partial">Partial</td>
562      <td class="cross">No</td>
563    </tr>
564    <tr>
565      <td>Works offline</td>
566      <td class="check">Yes (BLE)</td>
567      <td class="cross">No</td>
568      <td class="cross">No</td>
569      <td class="cross">No</td>
570    </tr>
571    <tr>
572      <td>Open source</td>
573      <td class="cross">No</td>
574      <td class="cross">No</td>
575      <td class="check">Yes</td>
576      <td class="cross">No</td>
577    </tr>
578    <tr>
579      <td>Cross-platform</td>
580      <td class="check">iOS, Android, macOS, Windows</td>
581      <td class="check">iOS, Android, Web</td>
582      <td class="check">iOS, Android, Desktop</td>
583      <td class="cross">Apple only</td>
584    </tr>
585    <tr>
586      <td>Mesh networking</td>
587      <td class="check">Yes</td>
588      <td class="cross">No</td>
589      <td class="cross">No</td>
590      <td class="cross">No</td>
591    </tr>
592    <tr>
593      <td>Anonymous routing</td>
594      <td class="check">Yes (Tor)</td>
595      <td class="cross">No</td>
596      <td class="cross">No</td>
597      <td class="cross">No</td>
598    </tr>
599  </table>
600  
601  
602  <!-- Get Started -->
603  <h2>Get Started</h2>
604  
605  <ol>
606    <li>Install Ekko on your device</li>
607    <li>The app generates your identity automatically &mdash; no sign-up needed</li>
608    <li>Meet a contact in person and scan each other's QR codes</li>
609    <li>Start messaging &mdash; Ekko handles the rest</li>
610  </ol>
611  
612  <div class="highlight-box" style="text-align: center; margin-top: 1cm;">
613    <p style="font-size: 14pt; font-weight: 600; margin: 0;">Your messages. Your device. No middlemen.</p>
614  </div>
615  
616  </body>
617  </html>