A self-hosted, end-to-end encrypted clipboard sync tool that works across iPhone, Windows, and Linux from a browser tab. No app store, no account, no Apple ecosystem lock-in.
Apple's Universal Clipboard only works within the Apple ecosystem, and there was no simple way to copy something on an iPhone and paste it on a Ubuntu laptop or Windows PC without routing through a third-party cloud service, installing a native app on every platform, or messaging things to yourself. ClipSync needed to work from any browser, keep data private by default, and live on a home server rather than a third party's cloud.
Open the same "room" (a short pairing code, shareable via QR code or link) on any device with a browser. Anything typed or pasted on one device instantly appears on every other device in that room; tap "Copy" and paste normally. Small files and images sync the same way, with a "Save to device" download link. A one-tap "Send my clipboard" button pushes the current clipboard instantly, the app installs to an iOS/Android home screen as a PWA, and a push notification can fire the moment something new lands in the room.
The relay only ever touches ciphertext. Watch a payload travel from one device to another, encrypted before it leaves and decrypted only once it arrives.
Cross-device clipboard sync over WebSockets with sub-second latency.
AES-256-GCM with a key derived client-side from the room code via SHA-256 and the Web Crypto API. The server only ever stores or relays ciphertext.
A room is just a short pairing code, shareable via QR, with nothing to register and nothing tied to an identity.
Manifest + service worker for Add to Home Screen and an offline app shell, no app store required.
Web Push via VAPID fires the moment something new lands in a room, using generic payloads since the server can't decrypt content to preview it.
Files and images are base64-encoded and encrypted the same way as text, with inline previews and a one-tap clipboard send via the Async Clipboard API.
Double base64 encoding (encrypted + already-base64 image dataURLs) roughly doubled payload size.
Right-sized the file cap against Socket.io's max buffer.
iOS Safari blocks silent clipboard writes.
Designed the UI around one-tap Copy buttons instead of fighting it.
Chaining two different Clipboard API calls as a fallback suppressed/duplicated the browser's native permission prompt.
Made exactly one Clipboard API call per tap.
Docker BuildKit snapshot corruption (unrelated to project code).
Resolved via daemon restart / legacy builder fallback.
Built as a personal self-hosted utility rather than a commercial product. It's deliberately scoped to stay simple (no accounts, no database, no rate limiting yet) in favor of shipping something genuinely useful quickly. Room codes are the only access control, an intentional trade-off for a personal tool rather than an oversight.