Send it to yourself. It's gone in 7 days, unless you keep it.
Chapters9 · 1:00
You send things to yourself. Links. Codes. Files for the other device. And there they stay. flux: Send it to yourself. Keep only what matters.
Share it from your phone. It’s already on your laptop: 0.34 s median, phone to laptop.
A private stream between your phone and your computer. Text, links, images and files arrive in under a second. Everything fades after seven days. Pin it, or #tag it, and it stays.
Capture from anywhere: the share sheet, a Shortcut, a paste. Whatever you send lands on every device.
Links get previews, codes get a copy button, commands get monospace.
Built for the keyboard. One key per action: paste to send, pin it forever, search everything, let it go now.
Android, iOS, Windows, macOS, Linux, any browser. Works where you already are.
Self-hosted. Passkeys. One-file database. Open API.
Stop messaging yourself. flux, in private beta.
Send it to yourself. It's gone in 7 days, unless you keep it.
At a glance
- 01The problem
- I messaged myself on WhatsApp to move links between devices. It became a junk drawer.
- 02What I built
- A private stream: send from one device, and it arrives on the other within a second.
- 03The result
- In daily use since 26 Sep 2026. Things tidy themselves away after 7 days unless kept.
Built with
Next.js · Hono · SQLite · Server-sent events · Passkeys · Litestream
The problem
Like a lot of people, I moved things between my phone and my laptop by messaging myself on WhatsApp: a link to read later, a code, a photo of a document. That chat became a junk drawer that never empties.
I wanted the opposite: send it, and it's on the other device in a second. Then it tidies itself away, unless I tell it to keep something.
Try it
Sign-in is invite-only. The site shows how it works.
Live See flux flux.silverfish.devWhat I built
One stream on every device. Text, links, one-time codes, images and files land on the others in under a second. Pin it or add a #tag and it stays; otherwise it expires.
How it works
- Send itType, paste, share or drop a file on any signed-in device.
- It arrivesEvery other device gets it in under a second, over a live connection.
- It tidies itselfAfter 7 days it goes to the trash, unless it's pinned or tagged.
Decisions I made
Decision Live Passkeys instead of passwords
- Why
- Sign-in uses the phone's fingerprint or face unlock. New devices sign in by scanning a QR code, like WhatsApp Web, and confirming a matching number on the phone.
- Cost
- Passkeys are tied to the domain, so the domain can't change casually.
Decision Live Ephemeral by default, permanent by intent
- Why
- Most things you send yourself are only useful for a day. Expiry keeps the stream clean without any effort, and a tag says 'keep this'.
Decision Live Thumbnails made in the browser
- Why
- Image previews are drawn in the browser and uploaded, so the server needs no image library and ships without native dependencies.
Decision Live Link previews that can't be abused
- Why
- Every link preview is fetched through a guarded fetcher that checks each resolved address, so a crafted link can't make the server reach into its own network.
Decision Live Backups I've actually restored
- Why
- The database streams to cloud storage continuously, and a weekly job restores it into a scratch copy and compares it. A backup that's never been restored is only a hope.
For engineersTechnical
- Hono on Node 24 with the built-in
node:sqlite; FTS5 search that works in Bangla, with user input quoted so it can't inject search syntax. - Live sync over server-sent events: a 25 s server ping and a 40 s client watchdog that reconnects and catches up.
- Optimistic writes that are swapped for the real item by the POST response or the SSE echo, whichever arrives first; failed sends wait in an outbox and retry with the same client ID, which the server de-duplicates.
The design system
flux is where my design language started: warm paper, ink, hairlines and one orange signal colour. "Notion, but sharper." This site uses the same system.
Results
What I'd do next
Search by meaning, on the device. Small text embeddings, computed in the browser, would let me find "that article about sleep" without remembering a single word from it, and without sending my stream anywhere.
Project receipt · flux
Checked 30 Sep 2026against code and the live site
- My part
- Solo: product, design, front end, API, infrastructure
- Built with
- Next.js 16, Tailwind v4, Motion · Hono on Node 24, node:sqlite, FTS5 · Litestream to R2
- Shipped
- Live at flux.silverfish.dev, invite-only
- Tests
- 57 automated tests (node:test)
- Backups
- Streamed to R2, with a weekly restore check
- Sources
- flux.silverfish.dev · the repo and its handover notes