I wrote this in bare HTML. It’s available here.