add render_form (wip, breaking all kinds of abstraction barriers)