         @setState loading: false
 
   canFetchWorkflowByQuery: (project, user) ->
-    'allow workflow query' in project.experimental_tools or @checkUserRoles(project, user)
+    if project?
+      'allow workflow query' in project.experimental_tools or @checkUserRoles(project, user)
+
+  getUserProjectPreferences: (project, user) ->
+    userPreferences = if user?
+      user.get 'project_preferences', project_id: project.id
+        .then ([preferences]) =>
+          preferences ? newPreferences = apiClient.type('project_preferences').create({
+            links: {
+              project: project.id
+            },
+            preferences: {}
+          }).save()
+    else
+      Promise.resolve apiClient.type('project_preferences').create
+        id: 'GUEST_PREFERENCES_DO_NOT_SAVE'
+        links:
+          project: project.id
+        preferences: {}
+
+    userPreferences
+      .then((preferences) =>
+        @listenToPreferences preferences
+      )
 
   getSelectedWorkflow: (project = @state.project, preferences = @state.preferences) ->
     @setState({ loadingSelectedWorkflow: true })

    userChanged = nextContext.initialLoadComplete and nextProps.user isnt @props.user

    # Wait until we know if there's a user
    if pathChanged or userChanged or nextContext.initialLoadComplete
      @fetchProjectData owner, name, nextProps.user unless @state.loading
      @setupSplits nextProps

  componentWillUpdate: (nextProps, nextState) ->


          awaitProjectRoles = apiClient.type('project_roles').get(project.links.project_roles).catch((error) => console.error(error))

          awaitPreferences = @getUserProjectPreferences(project, user)

          Promise.all([
            awaitBackground,
