Nice find. I knew there was something out there in the classic notebook closer to what you describe, but I couldn’t quite recall which one or where I saw it.
Related to the first clunky suggestion you found, there is also hide_code extension. I didn’t suggest it earlier because it doesn’t have buttons for individual cells as you seem targeted at. I’ve binderized it here.
To clarify a point in your first reply:
JupyterLab is stable on Binder. It is just the example is a little more full-featured than absolutely needed in order to really demonstrate it, and so it includes an extension. The extension is the issue right now. How extensions are handled is changing in the upcoming versions of JupyterLab, see here. After JupyterLab 3 extensions won’t require building JupyterLab. And I wonder if that also eliminates the absolute need for node and npm?
( I am also wondering if that is why JupyterLab Binder example repo hasn’t been addressed in earnest. When JupyterLab 3 comes out the extension system will be easier to deal with so why extend effort fixing the repo for the old version. But maybe it is purely a momentum thing.)
Also to demonstrate how stable JupyterLab is on Binder, you may not realize it comes along by default with standard Binder builds. You just have to change the URL and you can switch over from the classic to the Lab in most launched sessions, see here for how to edit the URL.