I've been thinking a lot during the development of the Dashboard and there are a few things I would like to address for a future version. I'm throwing this out both to get feedback and to see if someone would be willing to team up and explore the following possibilities.
- The default UI space is tiny so it would be nice to be able to set up multiple boards for different purposes (printer, system, etc...).
- A new version should be responsive and adapt to different window sizes instead of the current 3 column model.
- Some kind of "component" framework for widgets would reduce code duplication.
- The current template is pretty much hardcoded with limited possibilities for user customisation. Printers and systems vary a lot, so it would be nice if the users could re-arrange the dash content to their needs.
- It would be very handy if the user could create a custom dashboard for pretty much any purpose.
- A hook into the user system is required so fine-grained permissions can be applied. Any customization should require a specific user permission, limit view mode to specific dashboards, etc...
- I've been thinking about the possibility to add a very light-weight time series database to store metrics in for the visualisations. I think it would be useful to select a time period for (i.e Last 5 minutes, Last Day, Current Print Job). An in-mem data structure would however be enough to start with.
- It would be better to use the OctoPrint API directly instead of the viewModels if It would be possible to automate the configuration of the API authentication for a Plugin. I need to research that. It would also be very nice to configure and develop custom data sources both within and outside of the Octoprint instance.
- A new version has to be more light-weight overall. It should have absolute minimal performance impact both on the backend and the frontend.
- The code is pretty messy as I had absolutely zero knowledge about JS when starting (who am I kidding. I'm still clueless). A better structure is needed.
- Given all the flexibility above, some sane defaults should be provided to get a working dashboard by simply installing the plugin without any other configuration.
I've been playing around with freeboard (MIT license) a bit and it looks like it could meet many of the requirements above. Here's a mockup of a System dasboard based on a flask prof of concept by Max Woolf
What do you think?