My kid was using trinket at school, and the fact that Python 2 was free but Python 3 was paid was so weird and annoying that I created trifling.org (disclaimer: hosted on a tiny Linux box in my laundry room over WiFi, on residential internet!)
It was the first thing I coded entirely with Claude, and absolutely blew me away. (Mostly, it turns out other people already did all the hard parts -- the inspiration was running across a reddit post where someone said they wired together pyiodide and the Ace editor in a few hundred lines of javascript).
This was my first experience of "if you know what you're doing, LLMs can build things well and incredibly quickly". I think MVP took one evening, and then two more rewrites pushed it out to a week or so. (One after I realized fully offline was a worthwhile idea, the second after I realized the backend could be a dumb key/value store with only prefix iteration.)
As mentioned, it's local-first: everything should work perfectly offline after loading it once. Saving is limited to my kid’s school domain at the moment, but it’s super simple to host: just compile the Go binary and put it behind Caddy or something.
Code (which I literally have not read) is at https://github.com/zellyn/trifling
[Edit: p.s. try the avatar editor!]
The free Python 2 versus paid Python 3 split you ran into wasn't arbitrary pricing. Trinket ran Python 2 entirely in the browser through Skulpt https://skulpt.org, a JS reimplementation that costs nothing to serve, while Python 3 needed real CPython on their servers because Skulpt never fully covered 3.x. Pyodide compiling actual CPython to WASM is what changed that math, which is exactly why your trifling rewrite can offer real Python 3 offline for free.
Ah, interesting. Yeah, I looked at Skulpt a bit, and it looks really nice, although not as compatible as pyiodide, especially for python3. I did consider using it as a fallback if wasm is disabled.