an ui module
closes #28