As of April 2020, this website now runs on Node.js and uses MongoDB NoSQL infrastructure to source data. It is hosted on Heroku.
Heroku's file system is ephemeral (meaning file changes from client-side will disappear whenever the server restarts).
I do upload/modify/delete photos from client-side using a custom API that I have created. Therefore, I opted to use Amazon S3 for persistent storage of photos. CloudFront has allowed me to still use custom domain for photos hosted on S3. So there is no visible difference.
It is definitely a better practice to separate source code files ("the application") from dynamically modified or generated files ("the data"), as mixing them together will interfere with synchronizing versions from multiple repositories (Github, Heroku and local computer).
Software used in creating this Node.js web application are:
I also utilized many packages from the NPM library, including express, mongoose, node-sass, postcss, autoprefix, fs-extra, node-cookie, multer, multer-s3 and more.
It is amazing to see Javascript becoming robust enough to be used server-side, with a huge ecosystem of many mature libraries. I am really surprised, and excited to explore the possibilities of Javascript.