first version: it basically works. see the README for the things that are planned.