Weeknotes from Buttondown logo

Weeknotes from Buttondown

Archives
Subscribe
November 30, 2025

Dependencies; End of Year; Templating engine; Interactivity

Dependencies

Two big milestones in the codebase this week, for unrelated reasons:

  1. Mary unshipped Axios on Wednesday;
  2. I’m unshipping SCSS (or Sass; I can never remember which name is canonical anymore) right after sending this email.

This feels oddly momentous because both dependencies have been in Buttondown since literally day one. If there were an original package.json floating around somewhere, it'd have them both (and very few other things!)

They’re also good examples of the ecosystem working the way it’s supposed to:

  1. Framework APIs used to be bad.
  2. People built tools to patch over those flaws.
  3. Those tools introduced great ideas.
  4. The platform adopted those ideas.
  5. And now everyone gets the nice, boring, standardized result.

We’d already migrated most Axios usage to fetch, and most SCSS usage to Tailwind or plain CSS, so removing the last call sites was largely a matter of finally being brave enough to big-bang the remainder.

In general, I find myself increasingly aggressive about thinning out dependencies. It’s easier than ever, and more prudent than ever. If our use of a library amounts to less than a thousand lines of real code, we need a very good reason not to just vend it ourselves.


End of Year

We’re entering the final month of the year—four weeks left, with only two of them being real working weeks—and we’re trying two changes to how we handle December.

First: a code freeze.
We’ve never done one before, but holiday traffic on Buttondown actually increases: lots of new accounts, lots of upgrades, lots of activity. This is slightly unfortunate, given that it's also our holiday. So we’re limiting production changes to security fixes and bug fixes. It should make things saner for everyone.

Second: an end-of-year build-out post.
Every year I publish a written recap, but this year we’re also doing what I think of as an Airbnb-style seasonal roll-up: some light graphics, a little parallax, something fun. The more practical reason is that our changelog isn’t getting the visibility we want. We publish updates once or twice a week, blast them on social, include them in the monthly blog post—and still, users routinely discover features months after they ship.

A more visual, celebratory wrap-up seems like a better way to surface what’s actually changed.


Templating Engine

My version of relaxing over Thanksgiving was playing with our new theming engine. The goal is to reimplement all of our archives as a single BEM-heavy theme. Instead of each theme being a smattering of HTML files we keep painfully in sync, the theme becomes pure CSS with a robust token system. That will let us iterate faster and eventually allow users to customize archives without writing any CSS at all.

Matt did a ton of groundwork here earlier this year, and it has required cleaning up five years of accumulated, increasingly feral HTML and CSS. But we’re finally near the end of the tunnel, and the results already feel dramatically more cohesive.


Interactivity

A recurring question across the archive workstreams has been how to balance interactivity with performance. We want something between an SPA and a purely server-rendered view: the developer productivity, cohesion, and convenience of the former with the speed and reliability of the latter.

That middle ground—just enough interactivity without sacrificing performance—feels like the next frontier for the product, and we’re finally in a position to make thoughtful choices about where that line should be.

Don't miss what's next. Subscribe to Weeknotes from Buttondown:
X
Powered by Buttondown, the easiest way to start and grow your newsletter.