Recently I've been playing with an idea of a file server on my Android phone, with a web browser access.<p>I wanted to replace:<p>- AirDroid - sending files to my own PC or laptop.<p>- ShareIt - sending big files over the local network to my family devices.<p>- Dropbox - sharing select files with other people over the Internet.<p>Requirements I had in mind:<p>- end-to-end encryption, no sign ups, no accounts, no passwords<p>- local connection if devices are on the same network<p>- asynchronous access, server should work seamlessly in the background<p>This week I finally managed to stitch the pieces together and get something usable and useful. I now have full access to my phone on my laptop browser, I can share files with a link without uploading to the cloud, and the local network is used whenever possible.<p>The file server app is on the PlayStore[1], web-client is here[2], and you can check out the roadmap[3].<p>Shoutouts to these great tools that made it possible:<p>- libsodium[4], and it's JS version, are used for the end-to-end encryption<p>- StreamSaver.js[5], to save large files from a non-HTTP transport without buffering it in RAM. Had to patch it to add back pressure when the download is paused.<p>Current limitations:<p>- p2p only works on local networks, wait until WebRTC transport is implemented in the server<p>- when downloading several files, a Zip is generated, with a 4Gb size limit, wait until I figure out the way to fix this. With a single file, it's downloaded in plain and without limits.<p>Please roast this thing!<p>--<p>[1] PlayStore: https://play.google.com/store/apps/details?id=im.recall.android<p>[2] Web client: http://web.recall.im<p>[3] Roadmap: https://recall.im<p>[4] LibSodium: https://github.com/jedisct1/libsodium<p>[5] StreamSaver.js: https://github.com/jimmywarting/StreamSaver.js<p>[*] A demo of some files I shared, served by my phone: http://web.recall.im/#peer=c7e0f38a7f60752b4fa3017807fc731f2c8cb87b3d7d35c8131196c74daa847c;share_id=476c946195b047d3898c51291cd37dfb