WIP: ui components instead of bare dom elements
WIP: DRY up the component creation
WIP: compiles, but still broken