functional CRUD app