02 / 09
Hushover
Send text, files and chat straight from one of your devices to another — no account, no backend to run, and items that can delete themselves once they have been opened.
The two browsers talk to each other directly, over an encrypted WebRTC data channel. A relay is used for one thing only: passing the few small messages two browsers need to set that channel up — and those are encrypted with a key that travels in the QR code, after the #, the part of an address a browser never sends to a server.
Built with Svelte 5 and TypeScript. It installs as an app, opens without a network once loaded, and on Android shows up in the share sheet, so text or a link can be shared straight into it.
What I built
The connection
- One state machine is the only code that opens or closes a link. A new link replaces the current one only once it is open and both sides have introduced themselves, so a failed pairing never costs a working connection.
- Three ways to pair: one scan over a relay, fully offline by each device scanning the other’s code, or one tap to reconnect a saved device.
- A device opened by a pairing link asks before it pairs, because a paired device is allowed to send things to it.
- An optional TURN fallback for networks that block direct links, with short-lived credentials from a server function so the key never reaches a browser.
Sending
- Text, links and several files at once, by button or by swiping the card up.
- Self-destruct 15 seconds, 30 seconds or a minute after opening, with text kept covered until you hold to reveal it.
- The sender sees what happened to each item: delivered, opened, downloaded.
- A binary chunk format for file data. Files of 50 MB and up are written to disk as they arrive instead of being held in memory.
Chat
- Text, photos, voice notes and files, plus a terminal-style view of the same conversation.