almoliky.dev
All work

Selected work

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.

Hushover’s chat between a laptop and a paired phone, marked connected and end-to-end encrypted, with read receipts on the laptop’s messages.
A laptop and a phone, paired. The chat is end-to-end encrypted, and gone when the tab closes.
On the phone, a received text covered by “Hold to reveal”, marked to delete itself 15 seconds after it is opened.
On the phone, a received text stays covered until you hold to reveal it. Opening it starts its 15-second countdown.

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.