I'm also former Emacs user, and I like the lisp scratch buffer there, which is similar.
I'm also building a web-based literate programming environment called Starboard[1] that's probably a hundred times the amount of code (but then it has additional features such as top-level await, plugin, and Python support).
Consider supporting lit-html[2] literals instead of strings for HTML output, it works really well in notebook environments.
One more thing you can consider: a esm tagged literal that uses import(<data url of the code>), you can then use ES Module imports to dynamically load code. Here's a blog post about that approach [3]
[1]: https://starboard.gg [2]: https://lit-html.polymer-project.org/ [3]: https://2ality.com/2019/10/eval-via-import.html
My issue with these notebooks is they always get very cluttered with inline outputs after a couple 100 lines.
https://chrome.google.com/webstore/detail/markdown-new-tab/d...
Would be neat to see this integrated in somehow.