Repository navigation
Built around a real failure: a 67 MB phone-to-phone send over one Wi-Fi that slowed down and died at 71%.
- A signalling hiccup no longer kills a running transfer - the data channel lives independently of the signalling socket, and the page reconnects the socket in the background.
- A paused connection gets a 30-second reconnecting grace window plus a heartbeat, instead of failing at the first wobble.
- An interrupted file resumes from the last chunk that safely landed on disk instead of starting over. The stored part is re-read and re-checked against the running hash before it is trusted, and the final whole-file hash still has the last word - if a resumed file fails it, that file is taken once more from zero.
- The send loop wakes on the channel's own drain event instead of polling on a timer, reads run one chunk ahead of sends, and acknowledgements flow twice as often.
- Receivers saving into browser storage get a space check before the first byte: a loud warning when it looks tight, an upfront refusal only when a file plainly cannot fit.
- The connection test panel remembers the best sustained send and receive speeds the device has ever held, across visits, with a reset button.
Sending a really big file to the device next to you? The README now has a short guide with honest times for 10, 50 and 100 GB at typical Wi-Fi speeds.