This is something I do as part of my day to day role, where I design the back and frontend systems. For the backend, node.js can work quite well, especially if you wish to standardise on JS for all the application logic. It is rich and widely used, though I haven’t used it on a raspberry Pi, so a rapid prototype would be needed to do some speed measurements for the backend.
There are a number of testing frameworks out there. I can’t comment in detail here, but a quick google will point you in the right direction. I tend to do the majority of this on the backend, which isn’t in JS.
One issue with JS is the object model and concepts such as inheritance. It’s possible, but clunky from a language point of view. Here Typescript gives some richer support, while keeping backward compatibility, but I warn that the typings files you need to use to work with standard JS libraries can be a bit of a pain. Bear in mind the new JS will be much more like how Typescript is working right now, so something to have a think about at least.
For the system I’ve designed, I actually use .Net for the backend, as it’s incredibly rich and there are a myriad of strong REST server implementations that you can get through the open source community, which do a lot of the work for you. The core is going open source with the next release, as well as windows 10 running natively on the new raspberry pi’s. However, there are license implications of this approach and .net is not there yet from a platform agnostic point of view in my opinion.
The frontend opens up a lot of options. We used durandal.js, but angular.js is a great option with a lot of develop support. Both have a strong MVC approach and the binding system is very powerful. If I was doing it again, I’d probably use angular, simply for the larger community and knowledge base.
Do use something like require.js for injection here, which will help keep your JS modular and testable.
For look and feel, use bootstrap unless you have a good reason to do otherwise. The out of box css, especcially if you don’t do a lot of UI development, solves a lot of early issues and also gives you a strong adaptive UI which can run on many devices without needing to worry about it.
For the charts, I strongly suggest you look at highcharts.com. We use them for all our charting requirements and it’s very powerful. In particular, they have a highstock library which is great with time series data. The only issue here is there is a license cost for for-profit projects. Does the software qualify as open source and not for profit? If you can’t use these, just pick something that has native binding support for the frontend framework you choose.
Lastly, I’d suggest you setup an automatic linting and compile for the node.js server and client files if you go that direction. It’ll catch issues early in the development process and save you integration headaches as you go.
Anything else you’d like to know, just drop me a message and I can give my two cents.