In 2017 the typical setup of my project stack has been:
- Node.js 8+ with the available ES6+ features.
- Express 4 with either EJS or JSX-based templates.
- MySQL database accessed through the mysql package.
The applications are based on a common project template. I do not maintain the template as a separate project. It is improved through project to project and taylored to specific needs. The template covers:
- Directory structure.
- A set of always needed dependencies.
- Better static file serving with cache busting and CDN support.
- Trivial async/await wrapper for Express.
- jsend-style API response generator.
- Useful defaults and helpers for templates (default app title, date formatting, etc).
- Sessions with signed cookies.
- MySQL transactional async/await wrapper for queries.
- Bootstrap 3.
- Vue.js 2+ or React 15+.
- Webpack 3+.
The Bootstrap framework provides the common approach to styling. Most web designers are familiar with it, even if not, the documentation is very good and accessible.
Both Vue.js and React are decent view libraries. I have used them both. Vue.js uses HTML as the templating language and is more suitable for projects where the majority of markup is coming from the backend and it needs interactivity. React wants to generate and fully control the markup itself.
I generally avoid non-web application projects as these are not my expertise. Web scrapping is one of the related topics. I have mostly used PhantomJS so far.
There are some problem domains that benefit from relational and logic programming with Prolog. For example, industrial planning is a such domain. Besides that, I have successfully used SWI-Prolog for developing web applications, including this blog. I currently maintain two Node.js/SWI-Prolog bridge interfaces.
For a desktop application project I would pick Electron. Electron is a fusion of Node.js and Chromium runtimes. So far I have developed one project with it. The process is very similar to creating a web application and that is something I know very well.