final app, needs styling and potentially ajax