diff --git a/app/assets/stylesheets/framework/variables.scss b/app/assets/stylesheets/framework/variables.scss
index 630f557602cfbf7922d8120928c58c98baccec30..da4d91511e0323c809857d2719fcc25827148ec9 100644
--- a/app/assets/stylesheets/framework/variables.scss
+++ b/app/assets/stylesheets/framework/variables.scss
@@ -74,6 +74,8 @@ $red-700: #a62d19;
 $red-800: #8b2615;
 $red-900: #711e11;
 
+$purple-600: #6e49cb;
+$purple-650: #5c35ae;
 $purple-700: #4a2192;
 $purple-800: #2c0a5c;
 $purple-900: #380d75;
@@ -103,6 +105,7 @@ $well-light-text-color: #5b6169;
  */
 $gl-font-size: 14px;
 $gl-text-color: rgba(0, 0, 0, .85);
+$gl-text-color-light: rgba(0, 0, 0, .7);
 $gl-text-color-secondary: rgba(0, 0, 0, .55);
 $gl-text-color-disabled: rgba(0, 0, 0, .35);
 $gl-text-color-inverted: rgba(255, 255, 255, 1.0);
diff --git a/app/assets/stylesheets/new_sidebar.scss b/app/assets/stylesheets/new_sidebar.scss
new file mode 100644
index 0000000000000000000000000000000000000000..06c6025ed6bf18610f14765e3e536e47037e2476
--- /dev/null
+++ b/app/assets/stylesheets/new_sidebar.scss
@@ -0,0 +1,121 @@
+@import "framework/variables";
+@import 'framework/tw_bootstrap_variables';
+@import "bootstrap/variables";
+
+$new-sidebar-width: 220px;
+
+.page-with-new-sidebar {
+
+  @media (min-width: $screen-sm-min) {
+    padding-left: $new-sidebar-width;
+  }
+
+  .right-sidebar {
+    position: fixed;
+    height: 100%;
+  }
+}
+
+.nav-sidebar {
+  position: fixed;
+  z-index: 400;
+  width: $new-sidebar-width;
+  top: 50px;
+  bottom: 0;
+  left: 0;
+  overflow: auto;
+  background-color: $gray-light;
+  border-right: 1px solid $border-color;
+
+  ul {
+    padding: 0;
+    list-style: none;
+  }
+
+  li {
+    a {
+      display: block;
+      padding: 12px 14px;
+    }
+  }
+
+  a {
+    color: $gl-text-color;
+    text-decoration: none;
+  }
+}
+
+.sidebar-sub-level-items {
+  display: none;
+
+  > li {
+    a {
+      padding: 12px 24px;
+      color: $gl-text-color-light;
+
+      &:hover {
+        color: $gl-text-color;
+        background-color: $border-color;
+      }
+    }
+
+    &.active {
+      > a {
+        color: $purple-650;
+        font-weight: 600;
+      }
+    }
+  }
+}
+
+.sidebar-top-level-items {
+  > li {
+    .badge {
+      float: right;
+      background-color: $border-color;
+      color: $gl-text-color;
+    }
+
+    &.active {
+      > a {
+        background-color: $purple-600;
+        color: $white-light;
+        font-weight: 600;
+      }
+
+      .badge {
+        background-color: $purple-700;
+        color: $white-light;
+      }
+
+      .sidebar-sub-level-items {
+        background-color: $gray-normal;
+        border-left: 6px solid $purple-600;
+        display: block;
+      }
+    }
+
+    &:not(.active) > a:hover {
+      background-color: $border-color;
+
+      .badge {
+        transition: background-color 100ms linear;
+        background-color: $gray-normal;
+      }
+    }
+  }
+}
+
+
+// Make issue boards full-height now that sub-nav is gone
+
+.boards-list {
+  height: calc(100vh - 50px);
+
+  @media (min-width: $screen-sm-min) {
+    height: 475px; // Needed for PhantomJS
+    // scss-lint:disable DuplicateProperty
+    height: calc(100vh - 120px);
+    // scss-lint:enable DuplicateProperty
+  }
+}
diff --git a/app/views/layouts/_head.html.haml b/app/views/layouts/_head.html.haml
index f7a1d7e88449cabdc853a97c86b982586328918d..eabc9a3b01c66435b8bce6930abd8a2af38a7f74 100644
--- a/app/views/layouts/_head.html.haml
+++ b/app/views/layouts/_head.html.haml
@@ -32,6 +32,7 @@
 
   - if show_new_nav?
     = stylesheet_link_tag "new_nav", media: "all"
+    = stylesheet_link_tag "new_sidebar", media: "all"
 
   = Gon::Base.render_data
 
diff --git a/app/views/layouts/_page.html.haml b/app/views/layouts/_page.html.haml
index b7df11681d33ab4de2dcde879d056c43b11cee6e..62a76a1b00e56002a968bb78dd5a1e4628e62f0b 100644
--- a/app/views/layouts/_page.html.haml
+++ b/app/views/layouts/_page.html.haml
@@ -1,11 +1,15 @@
-.page-with-sidebar{ class: page_gutter_class }
-  - if defined?(nav) && nav
-    .layout-nav
-      .container-fluid
-        = render "layouts/nav/#{nav}"
-  - if content_for?(:sub_nav)
-    = yield :sub_nav
-  .content-wrapper{ class: layout_nav_class }
+.page-with-sidebar{ class: "#{('page-with-new-sidebar' if defined?(@new_sidebar) && @new_sidebar)} #{page_gutter_class}" }
+  - if show_new_nav?
+    - if defined?(nav) && nav
+      = render "layouts/nav/#{nav}"
+  - else
+    - if defined?(nav) && nav
+      .layout-nav
+        .container-fluid
+          = render "layouts/nav/#{nav}"
+    - if content_for?(:sub_nav)
+      = yield :sub_nav
+  .content-wrapper{ class: "#{(layout_nav_class unless show_new_nav?)}" }
     .alert-wrapper
       = render "layouts/broadcast"
       = render "layouts/flash"
diff --git a/app/views/layouts/admin.html.haml b/app/views/layouts/admin.html.haml
index 87064cc9b3f2261117732543da2928e8a21bdad1..ae9eee215e02d7ad6b1fbe2125d336022f27b058 100644
--- a/app/views/layouts/admin.html.haml
+++ b/app/views/layouts/admin.html.haml
@@ -1,5 +1,9 @@
 - page_title    "Admin Area"
 - header_title  "Admin Area", admin_root_path
-- nav           "admin"
+- if show_new_nav?
+  - nav         "new_admin_sidebar"
+  - @new_sidebar = true
+- else
+  - nav         "admin"
 
 = render template: "layouts/application"
diff --git a/app/views/layouts/group.html.haml b/app/views/layouts/group.html.haml
index f06acc98ca1dbbdeaeeb7141fd6fa12948070428..35abfa0e80c730619c946a849712dce0c17bc404 100644
--- a/app/views/layouts/group.html.haml
+++ b/app/views/layouts/group.html.haml
@@ -1,6 +1,10 @@
 - page_title       @group.name
 - page_description @group.description  unless page_description
 - header_title     group_title(@group) unless header_title
-- nav              "group"
+- if show_new_nav?
+  - nav            "new_group_sidebar"
+  - @new_sidebar = true
+- else
+  - nav            "group"
 
 = render template: "layouts/application"
diff --git a/app/views/layouts/nav/_new_admin_sidebar.html.haml b/app/views/layouts/nav/_new_admin_sidebar.html.haml
new file mode 100644
index 0000000000000000000000000000000000000000..f995145917c8b723faec624a8dfe15c9078939ec
--- /dev/null
+++ b/app/views/layouts/nav/_new_admin_sidebar.html.haml
@@ -0,0 +1,119 @@
+.nav-sidebar
+  %ul.sidebar-top-level-items
+    = nav_link(controller: %w(dashboard admin projects users groups builds runners cohorts), html_options: {class: 'home'}) do
+      = link_to admin_root_path, title: 'Overview', class: 'shortcuts-tree' do
+        %span
+          Overview
+
+      %ul.sidebar-sub-level-items
+        = nav_link(controller: :dashboard, html_options: {class: 'home'}) do
+          = link_to admin_root_path, title: 'Overview' do
+            %span
+              Overview
+        = nav_link(controller: [:admin, :projects]) do
+          = link_to admin_projects_path, title: 'Projects' do
+            %span
+              Projects
+        = nav_link(controller: :users) do
+          = link_to admin_users_path, title: 'Users' do
+            %span
+              Users
+        = nav_link(controller: :groups) do
+          = link_to admin_groups_path, title: 'Groups' do
+            %span
+              Groups
+        = nav_link path: 'builds#index' do
+          = link_to admin_jobs_path, title: 'Jobs' do
+            %span
+              Jobs
+        = nav_link path: ['runners#index', 'runners#show'] do
+          = link_to admin_runners_path, title: 'Runners' do
+            %span
+              Runners
+        = nav_link path: 'cohorts#index' do
+          = link_to admin_cohorts_path, title: 'Cohorts' do
+            %span
+              Cohorts
+
+    = nav_link(controller: %w(conversational_development_index system_info background_jobs logs health_check requests_profiles)) do
+      = link_to admin_conversational_development_index_path, title: 'Monitoring' do
+        %span
+          Monitoring
+
+      %ul.sidebar-sub-level-items
+        = nav_link(controller: :conversational_development_index) do
+          = link_to admin_conversational_development_index_path, title: 'ConvDev Index' do
+            %span
+              ConvDev Index
+        = nav_link(controller: :system_info) do
+          = link_to admin_system_info_path, title: 'System Info' do
+            %span
+              System Info
+        = nav_link(controller: :background_jobs) do
+          = link_to admin_background_jobs_path, title: 'Background Jobs' do
+            %span
+              Background Jobs
+        = nav_link(controller: :logs) do
+          = link_to admin_logs_path, title: 'Logs' do
+            %span
+              Logs
+        = nav_link(controller: :health_check) do
+          = link_to admin_health_check_path, title: 'Health Check' do
+            %span
+              Health Check
+        = nav_link(controller: :requests_profiles) do
+          = link_to admin_requests_profiles_path, title: 'Requests Profiles' do
+            %span
+              Requests Profiles
+
+    = nav_link(controller: :broadcast_messages) do
+      = link_to admin_broadcast_messages_path, title: 'Messages' do
+        %span
+          Messages
+    = nav_link(controller: [:hooks, :hook_logs]) do
+      = link_to admin_hooks_path, title: 'Hooks' do
+        %span
+          System Hooks
+
+    = nav_link(controller: :applications) do
+      = link_to admin_applications_path, title: 'Applications' do
+        %span
+          Applications
+
+    = nav_link(controller: :abuse_reports) do
+      = link_to admin_abuse_reports_path, title: "Abuse Reports" do
+        %span
+          Abuse Reports
+          %span.badge.count= number_with_delimiter(AbuseReport.count(:all))
+
+    - if akismet_enabled?
+      = nav_link(controller: :spam_logs) do
+        = link_to admin_spam_logs_path, title: "Spam Logs" do
+          %span
+            Spam Logs
+
+    = nav_link(controller: :deploy_keys) do
+      = link_to admin_deploy_keys_path, title: 'Deploy Keys' do
+        %span
+          Deploy Keys
+
+    = nav_link(controller: :services) do
+      = link_to admin_application_settings_services_path, title: 'Service Templates' do
+        %span
+          Service Templates
+
+    = nav_link(controller: :labels) do
+      = link_to admin_labels_path, title: 'Labels' do
+        %span
+          Labels
+
+    = nav_link(controller: :appearances) do
+      = link_to admin_appearances_path, title: 'Appearances' do
+        %span
+          Appearance
+
+    %li.divider
+    = nav_link(controller: :application_settings) do
+      = link_to admin_application_settings_path, title: 'Settings' do
+        %span
+          Settings
diff --git a/app/views/layouts/nav/_new_group_sidebar.html.haml b/app/views/layouts/nav/_new_group_sidebar.html.haml
new file mode 100644
index 0000000000000000000000000000000000000000..3b658e055b3a07d37a4fa133c78f19e1f88fddf2
--- /dev/null
+++ b/app/views/layouts/nav/_new_group_sidebar.html.haml
@@ -0,0 +1,56 @@
+.nav-sidebar
+  %ul.sidebar-top-level-items
+    = nav_link(path: ['groups#show', 'groups#activity', 'groups#subgroups'], html_options: { class: 'home' }) do
+      = link_to group_path(@group), title: 'Home' do
+        %span
+          Group
+
+      %ul.sidebar-sub-level-items
+        = nav_link(path: ['groups#show', 'groups#subgroups'], html_options: { class: 'home' }) do
+          = link_to group_path(@group), title: 'Group Home' do
+            %span
+              Home
+
+        = nav_link(path: 'groups#activity') do
+          = link_to activity_group_path(@group), title: 'Activity' do
+            %span
+              Activity
+
+    = nav_link(path: ['groups#issues', 'labels#index', 'milestones#index']) do
+      = link_to issues_group_path(@group), title: 'Issues' do
+        %span
+          Issues
+          - issues = IssuesFinder.new(current_user, group_id: @group.id, state: 'opened').execute
+          %span.badge.count= number_with_delimiter(issues.count)
+
+      %ul.sidebar-sub-level-items
+        = nav_link(path: 'groups#issues', html_options: { class: 'home' }) do
+          = link_to issues_group_path(@group), title: 'List' do
+            %span
+              List
+
+        = nav_link(path: 'labels#index') do
+          = link_to group_labels_path(@group), title: 'Labels' do
+            %span
+              Labels
+
+        = nav_link(path: 'milestones#index') do
+          = link_to group_milestones_path(@group), title: 'Milestones' do
+            %span
+              Milestones
+
+    = nav_link(path: 'groups#merge_requests') do
+      = link_to merge_requests_group_path(@group), title: 'Merge Requests' do
+        %span
+          Merge Requests
+          - merge_requests = MergeRequestsFinder.new(current_user, group_id: @group.id, state: 'opened', non_archived: true).execute
+          %span.badge.count= number_with_delimiter(merge_requests.count)
+    = nav_link(path: 'group_members#index') do
+      = link_to group_group_members_path(@group), title: 'Members' do
+        %span
+          Members
+    - if current_user && can?(current_user, :admin_group, @group)
+      = nav_link(path: %w[groups#projects groups#edit]) do
+        = link_to edit_group_path(@group), title: 'Settings' do
+          %span
+            Settings
diff --git a/app/views/layouts/nav/_new_profile_sidebar.html.haml b/app/views/layouts/nav/_new_profile_sidebar.html.haml
new file mode 100644
index 0000000000000000000000000000000000000000..37ffbbecca8abe5f9aa780e5431fd4555cd49384
--- /dev/null
+++ b/app/views/layouts/nav/_new_profile_sidebar.html.haml
@@ -0,0 +1,49 @@
+.nav-sidebar
+  %ul.sidebar-top-level-items
+    = nav_link(path: 'profiles#show', html_options: {class: 'home'}) do
+      = link_to profile_path, title: 'Profile Settings' do
+        %span
+          Profile
+    = nav_link(controller: [:accounts, :two_factor_auths]) do
+      = link_to profile_account_path, title: 'Account' do
+        %span
+          Account
+    - if current_application_settings.user_oauth_applications?
+      = nav_link(controller: 'oauth/applications') do
+        = link_to applications_profile_path, title: 'Applications' do
+          %span
+            Applications
+    = nav_link(controller: :chat_names) do
+      = link_to profile_chat_names_path, title: 'Chat' do
+        %span
+          Chat
+    = nav_link(controller: :personal_access_tokens) do
+      = link_to profile_personal_access_tokens_path, title: 'Access Tokens' do
+        %span
+          Access Tokens
+    = nav_link(controller: :emails) do
+      = link_to profile_emails_path, title: 'Emails' do
+        %span
+          Emails
+    - unless current_user.ldap_user?
+      = nav_link(controller: :passwords) do
+        = link_to edit_profile_password_path, title: 'Password' do
+          %span
+            Password
+    = nav_link(controller: :notifications) do
+      = link_to profile_notifications_path, title: 'Notifications' do
+        %span
+          Notifications
+
+    = nav_link(controller: :keys) do
+      = link_to profile_keys_path, title: 'SSH Keys' do
+        %span
+          SSH Keys
+    = nav_link(controller: :preferences) do
+      = link_to profile_preferences_path, title: 'Preferences' do
+        %span
+          Preferences
+    = nav_link(path: 'profiles#audit_log') do
+      = link_to audit_log_profile_path, title: 'Authentication log' do
+        %span
+          Authentication log
diff --git a/app/views/layouts/nav/_new_project_sidebar.html.haml b/app/views/layouts/nav/_new_project_sidebar.html.haml
new file mode 100644
index 0000000000000000000000000000000000000000..f85781737aaaf7b3262679f542466ee7a68a9596
--- /dev/null
+++ b/app/views/layouts/nav/_new_project_sidebar.html.haml
@@ -0,0 +1,242 @@
+.nav-sidebar
+  - can_edit = can?(current_user, :admin_project, @project)
+  %ul.sidebar-top-level-items
+    = nav_link(path: ['projects#show', 'projects#activity', 'cycle_analytics#show'], html_options: { class: 'home' }) do
+      = link_to project_path(@project), title: 'Project', class: 'shortcuts-project' do
+        %span
+          Project
+
+      %ul.sidebar-sub-level-items
+        = nav_link(path: 'projects#show') do
+          = link_to project_path(@project), title: _('Project home'), class: 'shortcuts-project' do
+            %span= _('Home')
+
+        = nav_link(path: 'projects#activity') do
+          = link_to activity_project_path(@project), title: _('Activity'), class: 'shortcuts-project-activity' do
+            %span= _('Activity')
+
+        - if can?(current_user, :read_cycle_analytics, @project)
+          = nav_link(path: 'cycle_analytics#show') do
+            = link_to project_cycle_analytics_path(@project), title: _('Cycle Analytics'), class: 'shortcuts-project-cycle-analytics' do
+              %span= _('Cycle Analytics')
+
+    - if project_nav_tab? :files
+      = nav_link(controller: %w(tree blob blame edit_tree new_tree find_file commit commits compare projects/repositories tags branches releases graphs network)) do
+        = link_to project_files_path(@project), title: 'Repository',  class: 'shortcuts-tree' do
+          %span
+            Repository
+
+        %ul.sidebar-sub-level-items
+          = nav_link(controller: %w(tree blob blame edit_tree new_tree find_file)) do
+            = link_to project_files_path(@project) do
+              #{ _('Files') }
+
+          = nav_link(controller: [:commit, :commits]) do
+            = link_to namespace_project_commits_path(@project.namespace, @project, current_ref) do
+              #{ _('Commits') }
+
+          = nav_link(html_options: {class: branches_tab_class}) do
+            = link_to namespace_project_branches_path(@project.namespace, @project) do
+              #{ _('Branches') }
+
+          = nav_link(controller: [:tags, :releases]) do
+            = link_to namespace_project_tags_path(@project.namespace, @project) do
+              #{ _('Tags') }
+
+          = nav_link(path: 'graphs#show') do
+            = link_to namespace_project_graph_path(@project.namespace, @project, current_ref) do
+              #{ _('Contributors') }
+
+          = nav_link(controller: %w(network)) do
+            = link_to namespace_project_network_path(@project.namespace, @project, current_ref) do
+              #{ s_('ProjectNetworkGraph|Graph') }
+
+          = nav_link(controller: :compare) do
+            = link_to namespace_project_compare_index_path(@project.namespace, @project, from: @repository.root_ref, to: current_ref) do
+              #{ _('Compare') }
+
+          = nav_link(path: 'graphs#charts') do
+            = link_to charts_namespace_project_graph_path(@project.namespace, @project, current_ref) do
+              #{ _('Charts') }
+
+    - if project_nav_tab? :container_registry
+      = nav_link(controller: %w[projects/registry/repositories]) do
+        = link_to project_container_registry_path(@project), title: 'Container Registry', class: 'shortcuts-container-registry' do
+          %span
+            Registry
+
+    - if project_nav_tab? :issues
+      = nav_link(controller: @project.default_issues_tracker? ? [:issues, :labels, :milestones, :boards] : :issues) do
+        = link_to namespace_project_issues_path(@project.namespace, @project), title: 'Issues', class: 'shortcuts-issues' do
+          %span
+            Issues
+            - if @project.default_issues_tracker?
+              %span.badge.count.issue_counter= number_with_delimiter(IssuesFinder.new(current_user, project_id: @project.id).execute.opened.count)
+
+        %ul.sidebar-sub-level-items
+          - if project_nav_tab?(:issues) && !current_controller?(:merge_requests)
+            = nav_link(controller: :issues) do
+              = link_to namespace_project_issues_path(@project.namespace, @project), title: 'Issues' do
+                %span
+                  List
+
+            = nav_link(controller: :boards) do
+              = link_to namespace_project_boards_path(@project.namespace, @project), title: 'Board' do
+                %span
+                  Board
+
+          - if project_nav_tab?(:merge_requests) && current_controller?(:merge_requests)
+            = nav_link(controller: :merge_requests) do
+              = link_to namespace_project_merge_requests_path(@project.namespace, @project), title: 'Merge Requests' do
+                %span
+                  Merge Requests
+
+          - if project_nav_tab? :labels
+            = nav_link(controller: :labels) do
+              = link_to namespace_project_labels_path(@project.namespace, @project), title: 'Labels' do
+                %span
+                  Labels
+
+          - if project_nav_tab? :milestones
+            = nav_link(controller: :milestones) do
+              = link_to namespace_project_milestones_path(@project.namespace, @project), title: 'Milestones' do
+                %span
+                  Milestones
+
+    - if project_nav_tab? :merge_requests
+      = nav_link(controller: @project.default_issues_tracker? ? :merge_requests : [:merge_requests, :labels, :milestones]) do
+        = link_to namespace_project_merge_requests_path(@project.namespace, @project), title: 'Merge Requests', class: 'shortcuts-merge_requests' do
+          %span
+            Merge Requests
+            %span.badge.count.merge_counter.js-merge-counter= number_with_delimiter(MergeRequestsFinder.new(current_user, project_id: @project.id).execute.opened.count)
+
+    - if project_nav_tab? :pipelines
+      = nav_link(controller: [:pipelines, :builds, :jobs, :pipeline_schedules, :environments, :artifacts]) do
+        = link_to project_pipelines_path(@project), title: 'Pipelines', class: 'shortcuts-pipelines' do
+          %span
+            Pipelines
+
+        %ul.sidebar-sub-level-items
+          - if project_nav_tab? :pipelines
+            = nav_link(path: ['pipelines#index', 'pipelines#show']) do
+              = link_to project_pipelines_path(@project), title: 'Pipelines', class: 'shortcuts-pipelines' do
+                %span
+                  Pipelines
+
+          - if project_nav_tab? :builds
+            = nav_link(controller: [:jobs, :artifacts]) do
+              = link_to project_jobs_path(@project), title: 'Jobs', class: 'shortcuts-builds' do
+                %span
+                  Jobs
+
+          - if project_nav_tab? :pipelines
+            = nav_link(controller: :pipeline_schedules) do
+              = link_to pipeline_schedules_path(@project), title: 'Schedules', class: 'shortcuts-builds' do
+                %span
+                  Schedules
+
+          - if project_nav_tab? :environments
+            = nav_link(controller: :environments) do
+              = link_to project_environments_path(@project), title: 'Environments', class: 'shortcuts-environments' do
+                %span
+                  Environments
+
+          - if @project.feature_available?(:builds, current_user) && !@project.empty_repo?
+            = nav_link(path: 'pipelines#charts') do
+              = link_to charts_namespace_project_pipelines_path(@project.namespace, @project), title: 'Charts', class: 'shortcuts-pipelines-charts' do
+                %span
+                  Charts
+
+    - if project_nav_tab? :wiki
+      = nav_link(controller: :wikis) do
+        = link_to get_project_wiki_path(@project), title: 'Wiki', class: 'shortcuts-wiki' do
+          %span
+            Wiki
+
+    - if project_nav_tab? :snippets
+      = nav_link(controller: :snippets) do
+        = link_to namespace_project_snippets_path(@project.namespace, @project), title: 'Snippets', class: 'shortcuts-snippets' do
+          %span
+            Snippets
+
+    - if project_nav_tab? :settings
+      = nav_link(path: %w[projects#edit members#show integrations#show services#edit repository#show ci_cd#show pages#show]) do
+        = link_to edit_project_path(@project), title: 'Settings', class: 'shortcuts-tree' do
+          %span
+            Settings
+
+        %ul.sidebar-sub-level-items
+          - can_edit = can?(current_user, :admin_project, @project)
+          - if can_edit
+            = nav_link(controller: :projects) do
+              = link_to edit_project_path(@project), title: 'General' do
+                %span
+                  General
+          = nav_link(controller: :members) do
+            = link_to project_settings_members_path(@project), title: 'Members' do
+              %span
+                Members
+          - if can_edit
+            = nav_link(controller: [:integrations, :services, :hooks, :hook_logs]) do
+              = link_to project_settings_integrations_path(@project), title: 'Integrations' do
+                %span
+                  Integrations
+            = nav_link(controller: :repository) do
+              = link_to namespace_project_settings_repository_path(@project.namespace, @project), title: 'Repository' do
+                %span
+                  Repository
+            - if @project.feature_available?(:builds, current_user)
+              = nav_link(controller: :ci_cd) do
+                = link_to namespace_project_settings_ci_cd_path(@project.namespace, @project), title: 'Pipelines' do
+                  %span
+                    Pipelines
+            - if Gitlab.config.pages.enabled
+              = nav_link(controller: :pages) do
+                = link_to namespace_project_pages_path(@project.namespace, @project), title: 'Pages' do
+                  %span
+                    Pages
+
+    - else
+      = nav_link(path: %w[members#show]) do
+        = link_to namespace_project_settings_members_path(@project.namespace, @project), title: 'Settings', class: 'shortcuts-tree' do
+          %span
+            Settings
+
+    -# Shortcut to Project > Activity
+    %li.hidden
+      = link_to activity_project_path(@project), title: 'Activity', class: 'shortcuts-project-activity' do
+        %span
+          Activity
+
+    -# Shortcut to Repository > Graph (formerly, Network)
+    - if project_nav_tab? :network
+      %li.hidden
+        = link_to namespace_project_network_path(@project.namespace, @project, current_ref), title: 'Network', class: 'shortcuts-network' do
+          Graph
+
+    -# Shortcut to Repository > Charts (formerly, top-nav item "Graphs")
+    - unless @project.empty_repo?
+      %li.hidden
+        = link_to charts_namespace_project_graph_path(@project.namespace, @project, current_ref), title: 'Charts', class: 'shortcuts-repository-charts' do
+          Charts
+
+    -# Shortcut to Issues > New Issue
+    %li.hidden
+      = link_to new_namespace_project_issue_path(@project.namespace, @project), class: 'shortcuts-new-issue' do
+        Create a new issue
+
+    -# Shortcut to Pipelines > Jobs
+    - if project_nav_tab? :builds
+      %li.hidden
+        = link_to project_jobs_path(@project), title: 'Jobs', class: 'shortcuts-builds' do
+          Jobs
+
+    -# Shortcut to commits page
+    - if project_nav_tab? :commits
+      %li.hidden
+        = link_to project_commits_path(@project), title: 'Commits', class: 'shortcuts-commits' do
+          Commits
+
+    -# Shortcut to issue boards
+    %li.hidden
+      = link_to 'Issue Boards', namespace_project_boards_path(@project.namespace, @project), title: 'Issue Boards', class: 'shortcuts-issue-boards'
diff --git a/app/views/layouts/profile.html.haml b/app/views/layouts/profile.html.haml
index 0ee8a57dbd4d1b4bda4f8837da0a538d81ba5080..c365839e605ddb7685fe0ec8906cf6c1d9e2b77f 100644
--- a/app/views/layouts/profile.html.haml
+++ b/app/views/layouts/profile.html.haml
@@ -1,6 +1,10 @@
 - page_title    "User Settings"
 - header_title  "User Settings", profile_path unless header_title
 - sidebar       "dashboard"
-- nav           "profile"
+- if show_new_nav?
+  - nav         "new_profile_sidebar"
+  - @new_sidebar = true
+- else
+  - nav         "profile"
 
 = render template: "layouts/application"
diff --git a/app/views/layouts/project.html.haml b/app/views/layouts/project.html.haml
index 3f5b0c54e50016b4cea3fbd0ce6619833d9fdb25..4458c3c2c238b121703d79d829a57f69d9aa0173 100644
--- a/app/views/layouts/project.html.haml
+++ b/app/views/layouts/project.html.haml
@@ -1,7 +1,11 @@
 - page_title       @project.name_with_namespace
 - page_description @project.description    unless page_description
 - header_title     project_title(@project) unless header_title
-- nav              "project"
+- if show_new_nav?
+  - nav            "new_project_sidebar"
+  - @new_sidebar    = true
+- else
+  - nav            "project"
 
 - content_for :project_javascripts do
   - project = @target_project || @project
diff --git a/config/application.rb b/config/application.rb
index 12242c3b0f5229af3a26d13c465180e3b4730e19..3f39170a123ff4bc2f65bb816cbe7858d1d2488e 100644
--- a/config/application.rb
+++ b/config/application.rb
@@ -110,6 +110,7 @@ module Gitlab
     config.assets.precompile << "vendor/assets/fonts/*"
     config.assets.precompile << "test.css"
     config.assets.precompile << "new_nav.css"
+    config.assets.precompile << "new_sidebar.css"
 
     # Version of your assets, change this if you want to expire all your assets
     config.assets.version = '1.0'