diff --git a/templates/projects/view.tmpl b/templates/projects/view.tmpl
index 705ce52d6c5bd..3274463435def 100644
--- a/templates/projects/view.tmpl
+++ b/templates/projects/view.tmpl
@@ -73,7 +73,7 @@
 	</div>
 	<div class="ui container fluid padded" id="project-board">
 
-		<div class="board">
+		<div class="board {{if .CanWriteProjects}}sortable{{end}}">
 			{{range $board := .Boards}}
 
 			<div class="ui segment board-column" style="background: {{.Color}} !important;" data-id="{{.ID}}" data-sorting="{{.Sorting}}" data-url="{{$.Link}}/{{.ID}}">
diff --git a/web_src/css/features/projects.css b/web_src/css/features/projects.css
index 2bc68ccf0dc16..bd48429fa6c2c 100644
--- a/web_src/css/features/projects.css
+++ b/web_src/css/features/projects.css
@@ -6,6 +6,10 @@
   margin: 0 0.5em;
 }
 
+.board.sortable .board-card {
+  cursor: move;
+}
+
 .board-column {
   background-color: var(--color-project-board-bg) !important;
   border: 1px solid var(--color-secondary) !important;
@@ -80,7 +84,6 @@
 .board-card {
   margin: 4px 2px !important;
   border-radius: 5px !important;
-  cursor: move;
   width: calc(100% - 4px) !important;
   padding: 0.5rem !important;
   min-height: auto !important;
diff --git a/web_src/js/features/repo-projects.js b/web_src/js/features/repo-projects.js
index cd38c41e2da88..11f5518283a98 100644
--- a/web_src/js/features/repo-projects.js
+++ b/web_src/js/features/repo-projects.js
@@ -36,7 +36,7 @@ function moveIssue({item, from, to, oldIndex}) {
 }
 
 async function initRepoProjectSortable() {
-  const els = document.querySelectorAll('#project-board > .board');
+  const els = document.querySelectorAll('#project-board > .board.sortable');
   if (!els.length) return;
 
   const {Sortable} = await import(/* webpackChunkName: "sortable" */'sortablejs');