That’s exactly it! I went with the Scratch blocks mainly because their shape was a bit simpler to draw. Blockly has those two-tone strokes and subtle gradients around the edges, which makes the outlines a lot more complex. I’ll definitely add Blockly-style blocks later though — I actually need both for my teaching materials — but starting with Scratch made the first version a lot more manageable.
About the blocks without children: in my setup, every block technically does have children. For example, the standard statement blocks have a minimum height, and even if no parameters are passed, I automatically insert an empty “pill” (like in Scratch itself) with the same default values. So there are no special placeholder shapes — just the same elements that would appear in Scratch, rendered empty.
The notch is part of the parent block’s path. I’m not using rect at all, but draw the full shape manually using curve — including the notches and rounded corners. That way, the whole parent block is one continuous path with the correct outline.
And yes, the blocks can get quite tall — but that’s actually consistent with how Scratch behaves. When you start nesting multiple conditions or loops, the height grows quickly, especially when you put conditional blocks inside each other. It looks chaotic, but that’s kind of the charm of it!
I’d absolutely be open to collaboration — I’m planning to upload the current version to GitHub soon, so you (and anyone else interested) could jump in. Starting with an English version and then building localization support on top sounds like a great idea.
I haven’t yet figured out the best approach for localization though, because the tricky part is that word order changes across languages. Each block is a mix of text and placeholders, and in German, for example, a sentence might be text → placeholder → text, while in English it could just be text → placeholder. So I’ll probably need some kind of template mechanism that handles those placeholders dynamically, especially for things like “set x to 12,” where the values also appear inside the structure. That’s going to be an interesting challenge!
Once it’s a bit more polished, I definitely want to publish it on Typst Universe — but for now, GitHub feels like the perfect place to collaborate and refine things together.
There you can find the GitHub repo: