programatically generate workspaces