Blog of a data person

Starting a mailing list

2025-04-01

Hi all.

Jack Conte, of Patreon and Pomplamoose fame, recently stated that “we might be witnessing the death of the follower”. It’s a good interview, I can recommend a listen!

His message is that where from 2019-2023 you would have had a good time on social media by gaining a large following you now need to make sure that you get picked up by the algorithm of whatever platform you are on. Being a follower no longer means that you'll be kept in the loop.

A few people have started pointing this out to me personally, asking me if I stopped posting ever since I became a dad, which is not the case. The discovery mechanism of the internet has changed and it seems to favor content that is willing to adapt to the platform. You may have noticed this on YouTube and on LinkedIn. Thumbnails and titles really matter more and posts that share links get downvotes by the algorithm because it leads people off the platform. Short-form content scores better, long-form content is harder to gather attention for.

In short: it seems like maintaining an email list is pretty much the only way for me to really guarantee that folks can be kept up to date with stuff that I do.

Just to name a few things that I’ve done in the past few weeks.

  • I revamped my personal blog by vibe-coding a personal editor in Flask. Details can be found here. It also features a basic RSS feed that people can follow.
  • I learned about some CSS tricks while implementing the santorini board game for HTML. Details, and the live game, can be found here.
  • I built a “newspaper” that make summaries of popular hackernews discussions. You can find it on thedailybin.com and you can learn all about how it’s made on YouTube or on my blog. It’s been an entertaining way for me to keep up to date without getting distracted/sucked into a lot of threads.
  • I made a new tool that I pretty much use daily called mohtml. It’s a library with 50 lines of Python that can generate most of HTML in a functional style. There’s a calmcode course for it and a YouTube deep dive.
  • I also made a Python notebook widget called mopaint that allows you to draw images in a MSPaint themed drawing utility. Once drawn, you can use the drawing to pass it forward to other tools. This includes vision models!
  • And this is just my personal stuff, not even mentioning some of the things that I am doing over at marimo. So I guess there’s plenty of material for me to share.

The goal of my newsletter will be to keep folks in the loop via email. I might send something weekly, maybe monthy, but this way I can guarantee that you can be in the loop. Even if I cannot reach you over social media anymore. Substack seems like the simplest provider to set this up, but I might switch in the future. Time will tell if I like the platform.

This blogpost is the first message that I am sending and it's posts like this that I hope to share.

You can sign up for the mailing list here or via the iframe below.

You want to study those vibes

2025-03-31

I got Claude to implement Santorini for me the other day. It's one of the coolest ever boardgames and while it took me a few shots, it was able to generate the following:

The demo is cool on a lot of levels, but the main reason is that it highlights a new theme in "vibe"-coding for me. Instead of merely generating code, you can also take the time to study the code. And when you do, you might just learn a new trick.

In this case, everything you see above is done with HTML5 elements and CSS. No canvas or anything like that! That had never occurred to me.

Notice the isometric view? Notice that rotate button? That's all a CSS transform!

// Update the rotation of the game board
function updateRotation() {
    gameBoard.style.transform = `rotateX(${currentRotation.x}deg) rotateZ(${currentRotation.z}deg)`;
}

Notice how you can build a tower in this game? That's literally done by just appending div elements!

// Add building levels
for (let i = 1; i <= cellState.level; i++) {
    const levelDiv = document.createElement('div');
    levelDiv.className = `level level-${i}`;
    cell.appendChild(levelDiv);
}

Honestly, the people who just "vibe" code without looking at what is being generated are missing out. Not just because the generated code might have bugs but also because you can also vibe-code out of curiosity to see how something could be implemented. Do it right, and you'll learn a lot.

Time for a bespoke blog engine

2025-03-29

I had been using a hacked together variation of mkdocs for my personal blog for a few years now because it did about 80% of what I wanted out of a personal blog. But given the advent of "vibe"-coding I figured it was time to really work on something bespoke. That is why my blog now looks like this now:

CleanShot 2025-03-28 at 10.39.17.png
The new site

It looks a bit more like an archive than a blog and that is partially the point. There was a time when I might try to write something long form, but now I just want to make it fun to write anything. Especially the short stuff that I might otherwise forget if I don't write it down. The blog is still available for folks to read but I also really want it to be an source of memories for myself too. I find my self writing more TILs than longreads and honestly ... I like that!

This is in part because some of my longer-form ideas are more easily expressed in a YouTube video (I can whip those out pretty quickly) but also because I want to have a blog that has an extremely low barrier to write on. Similar to what Simon Willison has set up for himself.

The best feature that I added to the static blog is that there is a flask app nearby that serves as my text editor. I can type make write from the terminal and it will start up flask with an interface that looks like this:

CleanShot 2025-03-28 at 10.51.47.png
My new blog editor.

This editor comes with a few bells and whistles too! I can click and drag screenshots and GIFs into the post and it will automatically figure out the right path to put the asset.

CleanShot 2025-03-28 at 10.52.17.gif
Click and drag, very nice!

But besides that it can also handle link insertion. I can select text in the editor and when I paste a link it will automatically handle the markdown.

CleanShot 2025-03-28 at 10.56.49.gif
Link insertion, also very nice!

I can also add posts normally by adding a folder and a markdown file, which is great for some javascript stuff that I do, but the short form stuff is now super easy to write and be done with.

Even better

There is so much to like about this setup.

  • My workflow did not adapt to the tool, I now have a tool that can suit my ideal workflow.
  • I can always change it too! Want to add dark-mode? I could! Use an LLM to spellcheck? Same! RSS? No problemo!
  • It's all markdown files. I can add custom javascript demos and don't need to worry about a CMS. Sweet!
  • I now have working software that I can study! I am very eager to learn more about the frontend side of things that being able to inspect/learn what's been created is honestly half the fun for me. I wasn't aware that paste events could be caught in the browser but through building my own tools with an LLM I am also able to actively learn!

LLMs really helped me get this set up quickly and I wish more folks would follow me and do something similar. Not just in studying the LLM generated code but also in working on publishing tools that make it easier for you as a human to keep on contributing to the internet. We need to keep creativity flowing and make sure good ideas don't get lost. It would really be a shame if we're missing out on great ideas simply because blogging is less fun than it should be!