recipes/uploads
A page uploads pictures under the gate and they paint from /files/<id>; each refusal reaches the page with its reason, a module makes a file of its own, and the static battery behind it never sees a file.
The server half: the uploads battery, the static battery behind it, the auth battery, and a gallery module that makes a file of its own. Everything else is a module in ./modules.
PORT=8080 AWEFT_UPLOADS_DIR=var/uploads AWEFT_SITE_DIR=dist node recipes/uploads/backend/main.ts