June 26, 2022
ProseMirror is neat!
I went down a bit of a rabbit hole this week, to nobody’s surprise.
Last year Buttondown swapped out a very old javascript package for fancy text editing (TinyMDE) for a much newer one (tiptap). This was one of the more fraught roll-outs in Buttondown’s existence, not for any explicit technical issues but because lots of people are understandably persnickety about core workflows changing. A valuable lesson learned!
The main reason I wanted to shift to tiptap was not out of any one specific use case but being able to go from an abandonware piece of software to something nice and powerful and extensible, so I could invest in a better writing experience down the line.
…There hadn’t been any such investment for the past twelve months.
A back and forth debugging a strange email with a customer made me get off my ass, though, and figure out how to highlight template tags in the text area:
This is rolling out today! Not just for the main writing experience but for all of the transactional settings, too:
I was really surprised at how painless this was once I figure my way around tiptap and ProseMirror’s core APIs, to the extent that I had to stop myself from prematurely doing more. (Though I had less fun dealing with some of the absolute positioning shenanigans that I thought I put behind me back in 2014.)
There’s still a pretty big architectural weirdness that I need to sit down and think pretty hard about, which is that tiptap/ProseMirror don’t “support Markdown”. This makes sense — they represent everything as a tree of recursive nodes, and Markdown is fundamentally incompatible with that — but has proven a very big pain. I’d love to get rid of swapping between “rich text” and “markdown” in the main writing interface and have everything be purely powered by this editor, but that requires being able to seamlessly go between the two modes in a way that I haven’t quite solved. (I think what I might need to do is basically hotswap the list of plugins & parsers I use with tiptap depending on the mode?)
The new marketing site, continued
With most of the fun of the ProseMirror shenanigans behind me, I’m turning my attention back to porting over content to the new marketing site. Most of the comparison pages are done; the goal for this coming week is to finish up the feature pages and start scoping out some use case pages (“friends and family”, “open source software”, that kind of thing.)
A friend asked if I was planning on porting the blog over as well (glad to know that even after all this time, we as a society have not settled the blog.foo.com vs. foo.com/blog debate!) and I think the answer is… maybe? It would be nice to have one fewer codebase to have to edit, and the blog certainly is a little dusty at this point. But that feels like make-work in a way that I’d need to be blogging much more (and more cleverly) to take advantage of.