diff --git a/src/views/workflows/ListWorkflowsView.vue b/src/views/workflows/ListWorkflowsView.vue
index 8a35758c9b0b8b6cdba79b3755d27fd662597685..8ac24cd539791e94c49f65f109df337db257f51f 100644
--- a/src/views/workflows/ListWorkflowsView.vue
+++ b/src/views/workflows/ListWorkflowsView.vue
@@ -132,13 +132,12 @@ onMounted(() => {
     >
       <bootstrap-icon
         icon="x-lg"
-        class="mb-5"
+        class="my-5"
         width="75"
         height="75"
         style="color: var(--bs-secondary)"
       />
-      <br />
-      There are no workflows in the system. Please come again later.
+      <p>There are no workflows in the system. Please come again later.</p>
     </div>
     <div
       v-else-if="processedWorkflows.length === 0"
@@ -146,15 +145,16 @@ onMounted(() => {
     >
       <bootstrap-icon
         icon="search"
-        class="mb-5"
+        class="my-5"
         width="75"
         height="75"
         style="color: var(--bs-secondary)"
       />
-      <br />
-      Could not find any Workflows containing<br />'{{
-        workflowsState.filterString
-      }}'
+      <p>
+        Could not find any Workflows containing<br />'{{
+          workflowsState.filterString
+        }}'
+      </p>
     </div>
     <CardTransitionGroup
       v-else
diff --git a/src/views/workflows/WorkflowVersionView.vue b/src/views/workflows/WorkflowVersionView.vue
index 2d7b656bf30a80bd9344fe835f202e594acd98a6..63e70256d39e7e6277389851ad95e11de252c5d7 100644
--- a/src/views/workflows/WorkflowVersionView.vue
+++ b/src/views/workflows/WorkflowVersionView.vue
@@ -62,6 +62,7 @@ onMounted(() => {
 });
 
 function downloadVersionFiles(version: WorkflowVersionFull) {
+  versionState.fileLoading = true;
   const descriptionPromise = axios.get(version.readme_url).then((response) => {
     versionState.descriptionMarkdown = response.data;
   });
@@ -76,7 +77,6 @@ function downloadVersionFiles(version: WorkflowVersionFull) {
   Promise.all([descriptionPromise, changelogPromise, parameterPromise]).finally(
     () => {
       versionState.fileLoading = false;
-      console.log("All loaded");
     }
   );
 }
@@ -110,7 +110,22 @@ function downloadVersionFiles(version: WorkflowVersionFull) {
       </router-link>
     </li>
   </ul>
-  <div v-if="versionState.loading"></div>
+  <div v-if="versionState.fileLoading">
+    <p class="placeholder-glow mt-2 mb-4">
+      <span class="placeholder col-7 fs-1"></span>
+    </p>
+    <p
+      v-for="n in 8"
+      :key="n"
+      class="placeholder-glow row ms-1"
+      :class="'my-' + Math.floor(Math.random() * 6)"
+    >
+      <span
+        class="placeholder"
+        :class="'col-' + Math.floor(Math.random() * 9 + 2)"
+      ></span>
+    </p>
+  </div>
   <div v-else>
     <p v-if="props.activeTab === 'description'">
       <markdown-renderer :markdown="versionState.descriptionMarkdown" />
diff --git a/src/views/workflows/WorkflowView.vue b/src/views/workflows/WorkflowView.vue
index 8eadd7340548e2cd3de2c80307233df382754d59..a13beb39e0f04fe391d177bc198000ff4d9aace5 100644
--- a/src/views/workflows/WorkflowView.vue
+++ b/src/views/workflows/WorkflowView.vue
@@ -15,7 +15,6 @@ const route = useRoute();
 const workflowState = reactive({
   loading: true,
   workflow: undefined,
-  errorLoading: false,
   activeVersionId: "",
 } as {
   loading: boolean;
@@ -81,7 +80,25 @@ onMounted(() => {
 </script>
 
 <template>
-  <div v-if="workflowState.workflow != null">
+  <div v-if="workflowState.loading">
+    <div
+      class="d-flex mt-5 justify-content-between align-items-center placeholder-glow"
+    >
+      <span class="fs-0 placeholder col-6"></span>
+      <span class="fs-0 placeholder col-1"></span>
+    </div>
+    <div class="fs-4 mb-5 mt-4 placeholder-glow">
+      <span class="placeholder col-10"></span>
+    </div>
+    <div class="row align-items-center placeholder-glow my-1">
+      <span class="mx-auto col-2 placeholder bg-success fs-0"></span>
+      <span class="position-absolute end-0 col-1 placeholder fs-2"></span>
+    </div>
+    <div class="row w-100 mb-4 mt-3 mx-0 placeholder-glow">
+      <span class="placeholder col-3 mx-auto"></span>
+    </div>
+  </div>
+  <div v-else-if="workflowState.workflow != null">
     <div class="d-flex justify-content-between align-items-center">
       <span class="fs-0 w-fit">{{ workflowState.workflow.name }}</span>
       <a :href="workflowState.workflow.repository_url" target="_blank">
@@ -130,7 +147,20 @@ onMounted(() => {
         ></a
       >
     </div>
-    <router-view />
+  </div>
+  <router-view v-if="workflowState.loading || workflowState.workflow != null" />
+  <div v-else class="text-center fs-1 mt-5">
+    <bootstrap-icon
+      icon="search"
+      class="my-5"
+      width="85"
+      height="85"
+      style="color: var(--bs-secondary)"
+    />
+    <p class="my-5">
+      Could not find any Workflow with ID <br />'{{ workflowId }}'
+    </p>
+    <router-link :to="{ name: 'workflows' }" class="mt-5">Back</router-link>
   </div>
 </template>