Canonicalize JSON → SHA-256 hash → sign/verify (client-side). No uploads.
If payload is valid JSON, we canonicalize by sorting object keys recursively. Otherwise, we sign the raw text bytes.
Keys stay in your browser memory. You can export the public key; keep the private key safe.
Receipt format
You can cite this in posts/issues:
receipt:v1 alg=Ed25519 hash=sha256:<hex> pubkey:b64=<...> sig:b64=<...>