CASE STUDY A2 · Tool
Browser SFTP
A file manager for your server, in a browser tab.
Web-based SFTP client: browse, upload, download, and manage files on remote servers from the browser, with real-time transfer progress over Socket.IO.
O(1)
memory per transfer, any file size
THE PROBLEM
Sometimes you need to move one file onto a server from a machine that has no terminal, no keys configured, and no FileZilla — just a browser.
WHAT I BUILT
A Node.js service that bridges browser to SFTP: a clean file-manager UI in front, an SSH/SFTP session behind, with uploads and downloads streaming through and progress reported live over Socket.IO.
ARCHITECTURE
browser UI ──Socket.IO──► Node/Express ──SFTP──► remote server
(progress events) (streamed transfers)- Transfers stream end-to-end — the service never buffers whole files, so a 2GB upload uses the same memory as a 2KB one.
STACK — AND WHY
Node.js + Express
SSH/SFTP client libraries and streaming are mature here.
Socket.IO
Transfer progress as live events.
THE HARD PARTS
Streaming without buffering
Browser → HTTP → SFTP as one pipeline with backpressure respected at each hop; the naive version reads the whole file into memory and dies on the first ISO.
WHAT IT TAUGHT ME
- Backpressure is not optional. Every hop in a streaming pipeline must be allowed to say 'slow down.'