diff --git a/README.md b/README.md
index 444b971a0eb184be81f7e81f1c634bc418454971..383d0162ca380770f4f2309df42a062dd1a7b644 100644
--- a/README.md
+++ b/README.md
@@ -30,6 +30,11 @@ These diagrams show the current implementation and are kept up-to-date.
 
 ![](atdb/docs/ATDB-LDV%20Workflow%20Diagram.png)
   
+### GUI implementation
+  * https://app.diagrams.net/#G16R8L06OFiKHFHBUA6FhrNVZVAaQBC2tU
+  
+![](atdb/docs/ATDB-LDV%20GUI.png)
+
 ## Deployed Instances  
 
 ### main GUI:
@@ -119,7 +124,7 @@ This is the procedure for that.
 
     - when automatic build is finished, push >> to deploy
   
-  on 'test', 'acc' and 'prod' machine's:
+  on 'test' (sdc@dop814), 'acc' (sdc@dop457) and 'prod' (sdco@dop821) machine's:
 
     > docker exec -it atdb-ldv python manage.py makemigrations --settings atdb.settings.docker_sdc
       (this should say 'No changes detected', but do this step anyway as a check) 
diff --git a/atdb/taskdatabase/services/algorithms.py b/atdb/taskdatabase/services/algorithms.py
index 511f021e09bb29818a71e9c741769824c4c91830..8f64e86745736a11e66d912cfeca5630341fe8ab 100644
--- a/atdb/taskdatabase/services/algorithms.py
+++ b/atdb/taskdatabase/services/algorithms.py
@@ -41,6 +41,34 @@ def get_size(status_list, type):
     return sum_value
 
 
+@timeit
+def get_min_start_and_max_end_time(sas_id):
+    """
+    Retrieve the minimum start time en maximum end time of a set of taskids (sas_id) which has the
+    status 'archived' or 'finished'
+    The start time is the moment when the task start 'processing'
+    The end time is the moment when the task was 'processed'
+    """
+    min_start_time = None
+    max_end_time = None
+    logger.info("get_min_start_and_max_end_time(" + str(sas_id) + ")")
+    tasks = Task.objects.filter(sas_id=sas_id).filter(status='archived') + Task.objects.filter(sas_id=sas_id).filter(status='finished')
+    for task in tasks:
+        # If more entrees are found for 'processing' task, get the latest
+        start_time = LogEntry.objects.filter(task=task.pk).filter(step_name='running').filter(status='processing').lastest('timestamp').timestamp
+        # If more entrees are found for 'processed' task, get the latest
+        end_time = LogEntry.objects.filter(task=task.pk).filter(step_name='running').filter(status='processed').lastest('timestamp').timestamp
+        if min_start_time is None:
+            min_start_time = start_time
+        elif start_time < min_start_time:
+            min_start_time = start_time
+        if max_end_time is None:
+            max_end_time = end_time
+        elif end_time > max_end_time:
+            max_end_time = end_time
+    return min_start_time, max_end_time
+
+
 def convert_logentries_to_html(log_entries):
     results = ""
 
diff --git a/atdb/taskdatabase/templates/taskdatabase/index.html b/atdb/taskdatabase/templates/taskdatabase/index.html
index ab6db6595779b09f45cdb17a1134c5d5457ecc82..0083720f2196d7ac207b688c0715914eac7d104c 100644
--- a/atdb/taskdatabase/templates/taskdatabase/index.html
+++ b/atdb/taskdatabase/templates/taskdatabase/index.html
@@ -80,7 +80,7 @@
         {% include 'taskdatabase/pagination.html' %}
        </div>
     </div>
-    <p class="footer"> Version 1.0.0 (18 jan 2021 - 15:00)
+    <p class="footer"> Version 1.0.0 (21 jan 2021 - 19:00)
 
 </div>
 
diff --git a/atdb/taskdatabase/urls.py b/atdb/taskdatabase/urls.py
index 553d5c967f0ebbebc843d1a0ad8ea8acc5ef400d..7b1eddb4eac96e1707b4ebd05aeb4bb10ab8418d 100644
--- a/atdb/taskdatabase/urls.py
+++ b/atdb/taskdatabase/urls.py
@@ -54,6 +54,8 @@ urlpatterns = [
     # --- custom requests ---
     # /atdb/get_size?status__in=defined,staged
     path('tasks/get_size/', views.GetSizeView.as_view(), name='get-size-view'),
+    # /atdb/get_min_start_and_max_end_time?sas_id=65005
+    path('get_min_start_and_max_end_time/', views.GetMinMaxTimeView.as_view(), name='get-min-start-and-max-end-time-view'),
 
     # --- controller resources ---
     path('tasks/<int:pk>/setstatus/<new_status>/<page>', views.TaskSetStatus, name='task-setstatus-view'),
diff --git a/atdb/taskdatabase/views.py b/atdb/taskdatabase/views.py
index d1aee3ffd521025d0b9be5f0290a0eb7d182fda4..38cb65e75699efb5185e872fb4f81a9793603a3c 100644
--- a/atdb/taskdatabase/views.py
+++ b/atdb/taskdatabase/views.py
@@ -737,3 +737,22 @@ class GetSizeView(generics.ListAPIView):
         })
 
 
+# /atdb/get_min_start_and_max_end_time?sas_id=650065
+class GetMinMaxTimeView(generics.ListAPIView):
+    queryset = Task.objects.all()
+
+    # override list and generate a custom response
+    def list(self, request, *args, **kwargs):
+
+        # read the arguments from the query
+        try:
+            sas_id = self.request.query_params['sas_id']
+            start_time, end_time = algorithms.get_min_start_and_max_end_time(sas_id)
+            return Response({
+                'start_time': start_time,
+                'end_time': end_time,
+            })
+        except Exception as error:
+            return Response({
+                'error': str(error)
+            })
\ No newline at end of file