diff --git a/_templates/todo.html b/_templates/todo.html
new file mode 100644
index 0000000000000000000000000000000000000000..7f2609b97c7d991cd2795e8e351983cab335a4d6
--- /dev/null
+++ b/_templates/todo.html
@@ -0,0 +1,49 @@
+<a role="button" data-bs-toggle="modal" data-bs-target="#todoModal" href="#" id="modalfortodoitems">
+    <button type="button" class="btn btn-danger">Outstanding todo items</button>
+</a>
+
+<div class="modal fade" id="todoModal" aria-labelledby="todoModalLabel" aria-hidden="true">
+    <div class="modal-dialog modal-lg modal-dialog-centered">
+        <div class="modal-content">
+        <div class="modal-header">
+            <h5 class="modal-title m-0 text-dark" id="todoModalLabel">Outstanding todo items</h5>
+            <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
+        </div> 
+        <div class="modal-body">
+            <ul class="list-group list-group-flush" id="todolist">
+                <!-- Auto generated for page -->
+            </ul>
+        </div>
+        </div>
+    </div>
+</div>
+
+<script>
+
+    document.body.appendChild(document.getElementById('todoModal'));
+    var modalfortodoitems = document.getElementById('modalfortodoitems');
+    var modalfortodoitemsparent = modalfortodoitems.parentNode;
+    var todoItems = document.getElementsByClassName('admonition-todo');
+    var todolist = document.getElementById('todolist')
+
+    if(todoItems.length == 0) {
+        modalfortodoitemsparent.remove();
+    } else  {
+        for (var i = 0; i < todoItems.length; ++i) {
+            var todoItem = document.createElement('li');
+            var link = document.createElement('a');
+            link.textContent = todoItems[i].getElementsByTagName('p')[1].innerHTML;
+            link.href = '#' + todoItems[i].id;
+            link.addEventListener('click', function() {
+                // Use Bootstrap's modal method to hide the modal
+                const todoModal = document.getElementById('todoModal');
+                const modal = bootstrap.Modal.getInstance(todoModal);
+                modal.hide();
+            });
+            todoItem.appendChild(link);
+            todoItem.classList.add('list-group-item');
+            todolist.appendChild(todoItem);
+        }
+    }
+    
+</script>
\ No newline at end of file
diff --git a/conf.py b/conf.py
index 2f746d6821b510b29c8405f8b8078dcbd1f13263..2e0f7f2a7b2e3f8bbfd61131593c68a0e6e5e0b3 100644
--- a/conf.py
+++ b/conf.py
@@ -222,7 +222,7 @@ html_theme_options = {
     "footer_end": ["last-updated"],
     # "content_footer_items": ["last-updated"],
     "secondary_sidebar_items": {
-        "**": ["page-toc", "edit-this-page", "sourcelink","pdf", "feedback", "forum", "license-terms", "message", "oshw"]
+        "**": ["todo", "page-toc", "edit-this-page", "sourcelink","pdf", "feedback", "forum", "license-terms", "message", "oshw"]
     },
 }
 
diff --git a/requirements.txt b/requirements.txt
index fc7b2d5cd837574aefc7f8266322781cce7d6bc1..0f24296d2da78f0da0e67aa7bd3a0abf6882928a 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -20,7 +20,7 @@ snowballstemmer==2.2.0
 Sphinx==7.2.6
 sphinx-autobuild==2021.3.14
 sphinx-copybutton==0.5.2
-pydata-sphinx-theme==0.15.2
+pydata-sphinx-theme==0.15.4
 sphinx-serve==1.0.1
 sphinx-tabs==3.4.4
 sphinx_design==0.5.0