Skip to content

concept · privacy-products

DontTell

A client-side encrypted sharing concept focused on privacy, minimal server trust, and simple access flows.

Technologies

  • TypeScript
  • Web Crypto API
  • Astro

Topics

  • encryption
  • privacy
  • product-engineering

DontTell is a product concept for sharing sensitive content without making the server the primary trust boundary. The core constraint: the server should never hold plaintext.

Problem

Most sharing tools — even “secure” ones — encrypt in transit but store decryptable content server-side. The service has the key. Compliance with law enforcement requests, data breaches, or insider access can expose user content regardless of the TLS layer.

DontTell inverts this: encryption happens in the browser before any network request. The server stores ciphertext it cannot decrypt.

Architecture constraints

Encryption layer:

  • Content is encrypted with XChaCha20-Poly1305 before leaving the browser
  • The encryption key is derived client-side using Argon2id from a user-supplied passphrase or generated randomly
  • The key never travels to the server — it lives only in the URL fragment (#key=...) or is shared out-of-band

Access model:

  • Shares have configurable TTL — the server deletes ciphertext after expiry
  • Optional: single-use links that invalidate after first download
  • Optional: passphrase gate at the server layer as a second factor (the server still cannot read the content)

Server role:

  • Store opaque ciphertext blobs
  • Enforce TTL and use-count limits
  • Serve the static client application
  • No user accounts, no logging of content metadata beyond necessary operational data

What the server knows

  • That a share was created (timestamp, approximate size)
  • When it was accessed (timestamp, IP if logged)
  • Nothing about the content

This is the minimal trust surface for a sharing tool.

Tradeoffs

Fragment-based key sharing means the key is not sent to the server (fragments are client-only) but is visible in browser history, bookmarks, and server logs if the user pastes the full URL. Users must understand this boundary.

Argon2id key derivation adds brute-force resistance but requires meaningful passphrases. Short passphrases are recoverable offline against the ciphertext.

No server-side key escrow means lost keys mean lost content — intentionally. Recovery is the user’s responsibility.

Status

Concept stage. The cryptographic primitives are available natively in modern browsers via the Web Crypto API. The architecture is implementable; the product work is in the UX and trust communication, not the cryptography.

Security

Public writeup boundary

Project pages must avoid secrets, private endpoints, credentials, sensitive screenshots, internal dashboards, and private operational identifiers.

Architecture

How to read this project

Focus on problem framing, constraints, tradeoffs, architecture direction, and lessons that can be shared without exposing private systems.

Related work