I simply use Make for all my web projects, whether it's a Ruby JSON API, or a React front-end. It's reliable, pre-installed everywhere, and can wrap anything in one consistent CLI. Why have to remember whether to type <i>lein repl</i>, <i>pry</i>, or <i>rails console</i>, when <i>make repl</i> will do everytime? Ditto, <i>bundle install</i>, <i>npm install</i>, <i>lein deps</i> => <i>make deps</i>. <i>make server</i> can easily wrap whatever command launches the server, <i>make dev</i> can easily use a filesystem watching tool to restart <i>make server</i> on any change. And beyond that, <i>make</i> can be used as usual to "compile" the project, ie. run whatever static analysis and preprocessing is necessary in the web world (jshint, jsx etc.).