My approach has been an interpreted Lisp running on a web server backend and it basically does everything described here