We've been using Keystatic in Buttondown for around six months now: we migrated most of the content on the marketing site (which is backed by Next) from MDX onto Keystatic, and were so happy with the experience that the upcoming rebuild of the docs site will be featuring Keystatic as well.
It's hard to accurately describe why Keystatic, because the market for "semi-static content, but also there are some types, but also there's a CMS, but also there's an API" feels so saturated: Gatsby, Sanity, Storyblok, Butter, Strapi, Contentful, the list grows and becomes more confusing over time. Really, the reason why it felt — feels! – so good to use was because everything felt like roughly the right set of tradeoffs:
- It is very fast. (Even at Buttondown's fairly meager content size, MDX was incredibly slow to compile);
- Getting a typesafe API right out of the box makes it much easier to do content buildout;
- There's a CMS that is good enough that I can feel comfortable pointing a technical writer at it, even if it's not good enough that I feel comfortable pointing anybody at it;
- The process of registering and rendering custom components is easy and ergonomic.
It is still early days for the project, but I think it's the best option out there. Give it a shot.
I consider myself, in a literal sense: a techno-optimist; while technology in of itself is an amoral force, I think it’s pretty hard to disagree with the notion that technological progress has in aggregate advanced humanity’s capacity for love, health, wonder, and joy.
Every now and then a piece will come out whose thesis is something like the following:
- Tech is net positive for the world.
- The current state of Tech Journalism is extremely biased against Tech.
- Negative coverage of Tech in Tech Journalism dampens Tech’s ability to make a positive impact on the world.
- Therefore, Tech Journalism is net negative for the world.
- We are going to make Tech Journalism 2, which champions Tech.
Here is one such example, which I think is fairly representative. Some quotes:
Hard-hitting journalism is critically important, but there’s often a mismatch between the work that journalists do gathering, verifying, and contextualizing facts and the simple truth that most startups operate more as dream than reality.
And:
The Techno-Optimistic Media is explicitly biased and incentive-aligned because we want tech companies to succeed. We want cheaper energy and abundant goods and robot assistants and financial freedom and human flourishing, and our reach will grow as technologists deliver on those promises. And we have skin in the game, whether as technologists or investors.
There’s a bit of a “if you’ve never missed a flight, you’re wasting too much time in airports” inherent in this framing: the aggregate net positive effect of all technology is too good to worry about specific bad actors. [1] And I think there’s some level of directional accuracy in it — I think legacy media institutions, largely for incorrect reasons, cover Tech with a negative bias that does not extend to other similarly large and powerful industries.
But here’s the thing: whenever you ask a member of the Techno-Optimist’s Guild what should have happened with Enron or Theranos [2], the answer invariably comes back to some sort of motte-and-bailey equivocation of “well of course we do need serious tech journalists, but that can’t be the default stance”.
(I mention Enron and Theranos in particular because these are organizations share three characteristics: breathless praise and media attention; collapse through journalistic investigation; loss of life.)
When people talk about techno-optimistism, really what they’re referring to is entertainment — maybe infotainment, of the sort that Product Hunt and Uncrate deal, but infotainment nonetheless. They want more ways to tell more people about fun cool things and why they’re neat.
Entertainment is good! Entertainment serves a role in society. But journalism’s role in our society is not to entertain, nor is it to catalyze the future; it is to safeguard the public welfare, and even very recent history shows what happens when everybody’s too busy aligning incentives and pumping the same figurative shitcoin to actually look into what’s happening.
Histoire, like so many other tools in the Vue ecosystem, is a bit of a neglected younger sibling to Storybook — a little bit uglier, with worse documentation and a couple rough edges, but much more tightly integrated with Vue and Vite. [1]
One thing that was not particularly obvious with using Histoire was how to declare a global variable. (There are a number of global variables Buttondown uses, but here's a common example: we drop Stripe's public client ID in to the Vue app by vending it in the request.)
Histoire doesn't document this, but the solution is pretty easy:
- Vite lets you declare globals via the
define
namespace withinvite.config.js
. - Histoire lets you add vite overrides specific for histoire within the
histoire.vite
namespace.
Combine these and you get the answer:
import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";
export default defineConfig({
histoire: {
vite: {
define: {
STRIPE_CLIENT_ID: 123,
},
},
},
// The rest of your vite config.
});
Hope this saves you ten minutes of Googling!
I know Storybook 8 — released only a few days ago — purports to be better out of the box here, but in my brief time investigating this is not the case. Pulling in React and an entire slew of tools just for snapshotting was a bridge too far for me. ↩︎
In the latest episode of Mostly Technical, Ian brings up ConvertKit as an example of a company for which having a free tier makes more sense than PlanetScale, since there are no marginal costs — you don't need to spin up a large amount of fixed-cost resources for every free customer, and you get those sweet network effects for nothing.
I preface this with the disclaimer that I am confident Ian and Aaron know everything I'm about to say already, and "zero marginal costs" was just a shorthand for "negligible." But, as you might imagine, "free tier for an email service" is a topic near and dear to my heart, and so I must briefly opine.
The truth is, of course there's a cost!
There's the marginal database load; the fractional cost in sending emails (back when Buttondown had a much more permissive free tier, something like 40% of the outgoing volume was for non-paying users — and the transactional cost of sending emails was and is Buttondown's single largest line-item expense!); the customer support burden; the noise and distraction.
This doesn't mean they, or I, or you, should / shouldn't have a free tier. But the free tier is (or should be) a marketing decision, not a product one. [1]
If you're a conventional SaaS, by offering a free tier you are allocating money (in the form of ops load, compute, and various other things) in order to acquire customers. Whether or not that offering is correct is not subjective or qualitative: it's just like any other avenue of paid acquisition, where you look at CAC and you look at LTV and you look at your runway and you call the shot.
When I cut the knees off of Buttondown's free tier, it wasn't because I hated free users and it wasn't because I thought they weren't particularly valuable. It was because the napkin math showed that the cost of the free tier had begun to outweigh its return.
Or at least insofar as every marketing decision is a product one and vice-versa. ↩︎
"Look for the good. If you get one good idea, that's one more than you went into the store with, and we must try to incorporate it into our company. We're really not concerned with what they're doing wrong; we're concerned with what they're doing right and everyone is doing something right."
We, being The Times, shall be conservative in all cases where we think conservatism essential to the public good, and we shall be radical in everything which may seem to us to require radical treatment and radical reform. We do not believe that everything in society is either exactly right or exactly wrong. What is good we desire to preserve and improve and what is evil we want to exterminate or reform.
One friend of mine was saying that the demise of the Italian firm family structure is the demise of the Italian family. In essence, when you used to have seven kids, one out of seven in the family was smart. You could find him. You could transfer the business within the family with a little bit of meritocracy and selection.
When you’re down to one or two kids, the chance that one is an idiot is pretty large. The result is that you can’t really transfer the business within the family. The biggest problem of Italy is actually fertility, in my view, because we don’t have enough kids. If you don’t have enough kids, you don’t have enough people to transfer. You don’t have enough young people to be dynamic.
The Italian culture has a lot of defects, but the entrepreneurship culture was there, has been there, and it still is there, but we don’t have enough young people.
Therefore be as shrewd as snakes, and as innocent as doves.
One of the strongest, strangest memories of my post-college life was the weekend I spent binging through Questionable Content, a comic that was one of High School Justin's earliest entrees into alternative culture.
I remember reading it religiously for four or so years as a primer on music, "culture", and aesthetic — only falling out of the habit once I hit undergrad and went through the traditional metamorphosis one goes through when they decide to re-invent themselves on a college campus.
Re-reading it over some random late-2010's weekend felt like a combination of nostalgia and apotheosis: it felt like visiting, in many ways, my former self, and the kind of esoterica and insecurity and arcana that felt so much like home for me in my teenage years. Moreover, it felt like flicking through an old childhood photo album and suddenly discovering there were a hundred pages you've never seen before: and, indeed, after I stopped reading it QC kept on humming, with lots of plot lines and panels that were altogether new to me.
I bring this up not just because Scott Pilgrim Takes Off is so literally similar to Questionable Content — a focus on indie music, relationship melodrama sharpened into relief through genre homage, and webcomic roots — but because it felt so aggressively and explicitly like it was negotiating with its former self, both delighted and a little dismayed by its past.
A lot of this show was not "great" in the traditional sense: the plot was, uh, quibbly, and while it was a literal miracle that they got the original actors all in a recording booth, the voice acting was wooden in a way that belies poor direction. But who cares? This show made me reconcile my self of fifteen years ago and my self of today in a way few other pieces of media do, and I had a great time doing so to boot.
Frequent readers of my writing will note that I approach projects like this with a high level of skepticism and, at times, outright derision — it's easy to feel like a bit of a mindless consumer being fed "hey! remember this thing from twenty years ago?"-inflected IP slop by an increasingly lazy coterie of producers, directors, and capitol allocators.
Scott Pilgrim Takes Off does not — I cannot emphasize enough — fall under that categorization. It is the rare piece of work — like the HBO miniseries Watchmen — that not only subverts the original product but elevates it. SPTO could not exist without its original, and both works are enhanced by the shared lineage.
Our concern with history, so Hilary’s thesis ran, is a concern with preformed images already imprinted on our brains, images at which we keep staring while the truth lies elsewhere, away from it all, somewhere as yet undiscovered
Then she said, so quietly that you could hardly hear her: What was it that so darkened our world? And Elias replied: I don’t know, dear, I don’t know.
We take almost all the decisive steps in our lives as a result of slight inner adjustments of which we are barely conscious.
I did not train you to be a demon or a human. I showed you how to be an artist. To be an artist is to do one thing only. Look at me. Cannot fight or weave or farm. I make swords. I cook for strength to make good swords. I study the Sutras to cleanse my heart to make good swords.
I wonder how much more I would have liked this show if the ending wasn't so aggressively telegraphed for a second season (as compared to another great Maya Erskine vehicle, Mr. and Mrs. Smith, which left the door open for future episodes but book-ended things perfectly), because the lack of committal in the first season's final few moments undermined many of the show and script's finer moments.
The show's largest assets are its aesthetics: incredible animation, terrific music, great voice acting. All of these things have been covered at length; they're all true. Where the show loses me — or perhaps, more accurately, prevents me from considering it a great piece of art — is its inability to thread the needle between naturalistic Game of Thrones-style deconstruction of the samurai myth and loving, caring, homage to the many many works in that mythos.
The show's best moments — Fowler showing off the smuggled guns and instantly contextualizing the threat of gunpowder, the parable of the onryo — are the ones that nail that balance. The show's worst ones are when it decides that it needs to hit the timings and cadences of a sit-com instead.
Highlights
"Taigen's won 24 duels! How many have you won?"
"Should I have been counting?"
No one murders so well as the british; it’s our number one export.
Someone, he added, ought to draw up a catalogue of types of buildings listed in order of size, and it would be immediately obvious that domestic buildings of less than normal size—the little cottage in the fields, the hermitage, the lockkeeper’s lodge, the pavilion for viewing the landscape, the children’s bothy in the garden—are those that offer us at least a semblance of peace, whereas no one in his right mind could truthfully say that he liked a vast edifice such as the Palace of Justice on the old Gallows Hill in Brussels. At the most we gaze at it in wonder, a kind of wonder which in itself is a form of dawning horror, for somehow we know by instinct that outsize buildings cast the shadow of their own destruction before them, and are designed from the first with an eye to their later existence as ruins.
I was late to the VS Code zeitgeist, and as penitence I try to go out of my way to try new editors whenever I see them — which is why this morning I installed Zed, which makes its bones on performance (yay!) and teams functionality (irrelevant for my use cases, but seems abstractly fertile.)
First: it is quite fast, and feels good in many of the ways VS Code does not as a first-run experience. I like almost all of the choices they made (having spent a few hours working in it), and going back to VS Code feels worse to the extent that interface lags and rough edges to which I was previously inured feel newly painful.
That being said: I am going back to VS Code, because too many things that to me are deeply important to my normal day-to-day engineering workflow (integrated test runner; Error Lens; Kolo) do not have parity in Zed. But if/when they do, I'll be back.
A satisfying but non-revelatory ending to the trilogy started by Berlin Game and Mexico Set, whose lack of true satisfaction in its ending both feels earned (in the sense that one of the main messages of these books has been the lack of clean breaks and endings in the conflicts and characters it catalogues) and pending (there are six more books in the series, and while I haven't looked to see if Deighton explicitly crafted the second trilogy after having once considered the original trilogy "done" you could definitely take it either way.)
I wrote in Mexico Set about how these books felt a little like Christie novels, and while that's true here there was also something of the workplace sit-com in them, in the familiarity you osmose in book after book with the same cast of folks. While it feels like there's no small amount of contrivance at hand (you grow to imagine MI6 as a huge, empty building populated with only our five or six named deuteragonists), it's also nice to see the growth and warmth imbued in otherwise tossed-off caricatures like Tessa & George.
I think I'll take a (long) break before resuming the nonalogy of these books, but I'm happy to have blitzed through the first three: they were both gripping and rewarding, and Bernard Samson makes for a delight.
Highlights
I hurried along the path as if suddenly remembering an appointment. Then I stooped down to hide. It wouldn't have worked with anyone more experienced, so it was really a test of his expertise. I still had no measure of him and couldn't guess what his motives might be. As it was, he walked right into it. That is to say, he walked right into me. It was the hurrying that did it; it often stampedes the pursuer into incautious and impulsive actions. That was how Hannibal won the Battle of Lake Trasimene after crossing the Apennines. All it needed was that sudden dash towards Rome to make Flaminius chase after him and blunder right into his ambush. Hannibal would probably have had the makings of a good field agent.
Unmarried men are best friends, best masters, best servants, but not always best subjects, for they are quick to run away, and almost all fugitives are of that condition.
No one murders so well as the british; it’s our number one export.
I hurried along the path as if suddenly remembering an appointment. Then I stooped down to hide. It wouldn't have worked with anyone more experienced, so it was really a test of his expertise. I still had no measure of him and couldn't guess what his motives might be. As it was, he walked right into it. That is to say, he walked right into me. It was the hurrying that did it; it often stampedes the pursuer into incautious and impulsive actions. That was how Hannibal won the Battle of Lake Trasimene after crossing the Apennines. All it needed was that sudden dash towards Rome to make Flaminius chase after him and blunder right into his ambush. Hannibal would probably have had the makings of a good field agent.