I’ve recently started implementing web apps with PsychoPy (not PsychoJS!). I simply use Flask with PsychoPy in the backend. I created a REST API that would pass data between client and server serialized as JSON. User management/access control and server-side data storage is handled by Flask with a database backend (accessed via SQLAlchemy). No data is ever written to the server’s file system; everything ends up in the DB. If a user requests their data, the server would create CSV or XLSX data on-to-fly and send it to the client without writing anything to the FS. Data visualization is done client-side via D3.
That way, all new features, changes and fixes applied to PsychoPy’s Python code are immediately reflected in my app(s), and since I have created an API, users are free to even create their very own apps employing the PsychoPy server backend. They could, for instance, use PsychoPy functionality from within Matlab or from their smartphone or browser app very easily.
Obviously this approach does not allow for creation and temporally precise presentation of visual stimuli. But one could use the respective parts from PsychoJS for that purpose.
I’m currently quite a bit concerned about maintaining two separate implementations of everything (in Python and JS), as we’re already lacking manpower for the Python part alone, let alone the documentation.