Spring Webflux as a non-blocking and fast solution that would interact with the low level FPGA code in order to manipulate panel states
Angular 6 as a client SPA that would consume a socket based API
Redis was used as a fast key-value storage that would be kept in sync with the panels
D3 js was used for creating a user "workspace" that would allow the user to perform operations such as zoom, pan, drag and drop to draw shapes from panels and so on.
We used gatling.io in order to constantly measure for performance issues. We created a set of socket based gatling tests that would be run by Jenkins CI run against an environment each time a merge request would be opened.