πŸ”’ Don't trust us β€” check it yourself

Your words never reach our servers.

tebDictate turns your phone into an end-to-end encrypted dictation mic. Speech is recognized on your phone; only your own screen holds the key to read it. Our relay only ever sees scrambled ciphertext β€” and here you can prove it, live, in your browser.

Watch a sentence become ciphertext

This runs the actual production encryption code tebDictate ships (e2ee-live-cursor.js) β€” right here, in this page. No phone, no account, nothing sent anywhere.

β†’
πŸ“‘ What our server receives
Press Encrypt it to see what leaves your device…
πŸ–₯ What your screen shows
The readable note appears here β€” only after your browser decrypts it locally.
Decryption happens in this page, with a key our servers never see.

Prove it on the real thing β€” 60 seconds

Verify the live service, end to end, with your phone and a laptop.

  1. On a laptop, open tebchart.com/dictate. A QR code appears.
  2. Press F12 (or right-click β†’ Inspect) β†’ click the Network tab β†’ type stream in the filter box.
  3. Scan the QR with your phone's camera and dictate a sentence out loud.
  4. Back on the laptop, click the stream request β†’ open the EventStream tab (in Firefox, the Response tab).
  5. Read the data arriving from our server. Every frame looks like:
    {"v":2,"iv":"9Xk2…","ct":"Qz7Rf1p…","n":3}
    Your words are nowhere in it β€” only ct, the ciphertext. The readable text appears only on your screen, after your browser decrypts it.

Bonus β€” try to break it: attempt to send unencrypted text to the relay and it refuses with HTTP 400 β€” end-to-end encryption required. The server is physically unable to store your words in the clear.

Why this is real, not a marketing word

The design, in four facts anyone can check.

🀝

Keys meet through your camera

The pairing key travels inside the QR code, scanned camera-to-screen β€” never through our servers. So we can't sit in the middle.

πŸ”

Standard, audited crypto

X25519 key agreement β†’ AES-256-GCM, the same primitives that protect Signal and TLS. No home-grown ciphers.

πŸ—‘οΈ

Nothing is stored

No account, no database of notes. The relay holds only ciphertext under a key that expires in minutes β€” undecryptable the moment your session ends.

πŸ“–

The code is open to read

The entire client is plain, un-minified source you can inspect line by line.

Read the source yourself: dictate.html Β· e2ee-live-cursor.js Β· dictate-phone.html