A lesson I’m learning over and over again with Buttondown is that every time I think to myself “meh, this isn’t that complicated, I can implement it clientside and be fine” I am always wrong. The latest example of this was munging + framing of some subscriber metrics, which is the perfect example of something you should never do clientside anyway; it doesn’t scale 1, it’s hard to build regression tests around 2, and it commingles presentation with computation.
That last one is probably the most contentious, but I’m growing more and more confident in the approach that client-side applications should be thin wrappers around server-side data. (Again, not a new concept at all — just something that I’ve never really held as a zealous belief.) My client-side code is at its best when it is focused on state management, performance, and clarity, acting as an elegant (but intrinsically ignorant) wrapper around blobs of information returned from a server.