puntification
the day's news, translated into puns by a very earnest alien professor, every pun footnoted with the real headline.
why i built it
Just for fun. I bought puntification.com because the name made me laugh: pun + pontification.
Then it turned into the perfect excuse to learn event-driven systems. A news firehose that never stops is the most fun stream I could think of.
what it is
A live feed of the day's news, translated into puns by Professor Punsworth: a small, very earnest alien academic from the planet Puntopia, where everyone speaks only in puns. Every pun cites the real headline it came from, and it is clearly satire.
The Professor's one rule: punch up, never pun at someone's pain. Readers groan to applaud, and the Professor's notebook, essays and observations on humans, is written by hand.
how it's built
- cloudflare workers
- durable objects
- event streams
- bluesky jetstream
- jev
- claude
- sveltekit
- svelte 5
- typescript
Headlines come from Bluesky's public firehose, filtered to about 20 news outlets. A Cloudflare worker reads it every minute and writes each headline as an event to a stream, Kafka-style. A consumer groups headlines into stories, each story passes a gate, and Claude drafts field notes in the Professor's voice while a second model judges them.
The part I find most interesting is the gate. Instead of asking a model "is this okay to joke about?", Jev, TypeSafe's decision model, answers small, typed questions about each story: is it about a death, a disaster, harm to a child? Is the subject a public figure or a private person? Are there victims who did nothing to deserve it? Is there even a pun in it? Then plain code, not the model, makes the call, top to bottom. Tragedies are always off limits. Private people are never the target. Anything involving a death or an illness comes to me, and so does anything Jev isn't sure about. And a story can be perfectly harmless and still get held back as "not tragic, just not punnable."
Keeping the rules in code means they can be tested and don't drift when the model changes, and the hard blocks run first, so a tragedy can never be reviewed into publication. The first run let 39 of 59 stories through, and a couple of its calls were arguable: a war update slipped through, and some fair satire of an administration got held back. That's exactly what the feedback loop is for.
The fun part is the feedback loop. What's funny, the writer and the judge learn from me: I rate every draft in a private Faculty Lounge, good or bad and why, and those notes become examples in their prompts. When the same reason keeps coming up, it becomes a rule I approve. As an example: the Professor should always punch at power, never flatter it.
- bluesky firehose to headlines: every minute
- headlines to story grouper
- story grouper to the gate: stories
- the gate to writer + judge: fair game
- writer + judge to faculty lounge: top drafts
- faculty lounge to writer + judge: ratings + notes
what's next
the professor starts filing daily dispatches on puntification.com.