diff --git a/angular.json b/angular.json
index eb64c9116997cfeb5010547ce0974c8c2483dfa3..4cb55b4d0412e46951a8a9e9f6a54cee4856e26f 100644
--- a/angular.json
+++ b/angular.json
@@ -54,6 +54,20 @@
               "extractLicenses": true,
               "vendorChunk": false,
               "buildOptimizer": true
+            },
+            "local": {
+              "budgets": [
+                {
+                  "type": "anyComponentStyle",
+                  "maximumWarning": "6kb"
+                }
+              ],
+              "fileReplacements": [
+                {
+                  "replace": "src/environments/environment.ts",
+                  "with": "src/environments/environment.local.ts"
+                }
+              ]
             }
           },
           "defaultConfiguration": ""
@@ -66,6 +80,9 @@
           "configurations": {
             "production": {
               "browserTarget": "kypo2-trainings-visualization-overview:build:production"
+            },
+            "local": {
+              "browserTarget": "kypo2-trainings-visualization-overview:build:local"
             }
           }
         },
diff --git a/src/environments/environment.local.ts b/src/environments/environment.local.ts
new file mode 100644
index 0000000000000000000000000000000000000000..aef9318fe88c308e5451fe9bbe11953f804ee5e9
--- /dev/null
+++ b/src/environments/environment.local.ts
@@ -0,0 +1,59 @@
+// This file can be replaced during build by using the `fileReplacements` array.
+// `ng build ---prod` replaces `environment.ts` with `environment.prod.ts`.
+// The list of file replacements can be found in `angular.json`.
+
+const HOME_URL = 'https://localhost:4200'
+
+export const environment = {
+  production: false,
+  trainingServiceUrl: 'http://localhost:3000/kypo2-rest-training/api/v1/',
+  elasticSearchServiceUrl: 'http://172.19.0.22/kypo-elasticsearch-service/api/v1/',
+  // OIDC SETTINGS
+  // Url of the Identity Provider
+  issuer: 'https://oidc.muni.cz/oidc/',
+  // URL of the SPA to redirect the user after silent refresh
+  silentRefreshRedirectUri: HOME_URL,
+  // URL of the SPA to redirect the user to after login
+  redirectUri: HOME_URL,
+  // The SPA's id. The SPA is registered with this id at the config-server
+  clientId: 'b53f2660-8fa0-4d32-94e4-23a59d7e7077',
+  // set the scope for the permissions the client should request
+  scope: 'openid profile email',
+  sessionChecksEnabled: false,
+  authConfig: {
+    guardMainPageRedirect: 'visualization',
+    guardLoginPageRedirect: 'login',
+    interceptorAllowedUrls: [
+      'https://172.19.0.22',
+      'http://localhost',
+      'https://localhost'
+    ],
+    authorizationStrategyConfig: {
+      authorizationUrl: 'https://172.19.0.22/kypo2-rest-user-and-group/api/v1/users/info'
+    },
+    providers: [
+      {
+        label: 'Login with MUNI',
+        textColor: 'white',
+        backgroundColor: '#002776',
+        oidcConfig: {
+          issuer: 'https://172.19.0.22:8443/csirtmu-dummy-issuer-server/',
+          clientId: '0bf33f00-2700-4efb-ab09-186076f85c7d',
+          redirectUri: HOME_URL,
+          scope: 'openid email profile',
+          logoutUrl: 'https://172.19.0.22/csirtmu-dummy-issuer-server/endsession',
+          postLogoutRedirectUri: HOME_URL,
+          clearHashAfterLogin: true
+        },
+      },
+    ]
+  },
+};
+
+/*
+ * In development mode, to ignore zone related error stack frames such as
+ * `zone.run`, `zoneDelegate.invokeTask` for easier debugging, you can
+ * import the following file, but please comment it out in production mode
+ * because it will have performance impact when throw error
+ */
+// import 'zone.js/dist/zone-error';  // Included with Angular CLI.
diff --git a/utils/json-server/db.js b/utils/json-server/db.js
new file mode 100644
index 0000000000000000000000000000000000000000..91ddc772366de67dc31807271ab1c884fa8b48cf
--- /dev/null
+++ b/utils/json-server/db.js
@@ -0,0 +1,809 @@
+module.exports = function() {
+  return {
+    clustering: {
+      final_results: {
+        estimated_time: 2700000,
+        max_participant_score: 230,
+        max_participant_game_score: 30,
+        max_participant_assessment_score: 200,
+        max_participant_time: 2635498,
+        average_time: 2635498,
+        average_score: 240,
+        average_game_score: 40,
+        average_assessment_score: 200,
+        player_data: [
+          {
+            id: 1,
+            name: 'Jane',
+            picture:
+              'iVBORw0KGgoAAAANSUhEUgAAAEsAAABLCAYAAAA4TnrqAAACIUlEQVR4Xu3Ysa3YQAwFQbfknuz+S/jOl2AwVnQAg0keoAUv1a+fn59f/+vP778/r+kbxBhED3lB3yDGIHrIC/oGMQbRQ17QN4gxiB7ygr5BjEH0kBf0DWIMooe8oG8QYxA95AV9gxiD6CEv6BvEGEQPeUHfIMYgesgL+gYxBtFDXtA3iDGIHvKCvkGMQfSQF/QNYgyih7ygbxBjOLsxnN0Yzm4MZzeGsxvD2Y3h7MZwdmM4uzGc3RjObgxnN4azG8PZjeHsPv2Taky0JdoSbYlPH/cQ0ZZoS7QlPn3cQ0Rboi3Rlvj0cQ8RbYm2RFvi08c9RLQl2hJtiU8f9xDRlmhLtCU+fdxDRFuiLdGW+PRxDxFtibZEW+LTxz1EtCXaEm2JTx/3ENGWaEu0JT593ENEW6It0Zb49HEPEW2JtkRb4tPHPUS0JdoSbYlPH/cQ0ZZoS7QlPn3cQ0Rboi3RlhixsxvD2Y3h7MZwdmM4uzGc3RjObgxnN4azG8PZjeHsxnB2Yzi7MZzdGM5uDKL/e0Rboi3RlhiD6CGiLdGWaEuMQfQQ0ZZoS7QlxiB6iGhLtCXaEmMQPUS0JdoSbYkxiB4i2hJtibbEGEQPEW2JtkRbYgyih4i2RFuiLTEG0UNEW6It0ZYYg+ghoi3RlmhLjEH0ENGWaEu0JcYgeohoS7Ql2hJjED1EtCXaEm2JMYgeItoSbYm2xBhEDxFtibZEW+IfusaIXHtR21cAAAAASUVORK5CYII=',
+            avatar_color: '#643165',
+            training_run_id: 1,
+            training_time: 2635498,
+            game_score: 30,
+            assessment_score: 200,
+            finished: true,
+          },
+          {
+            id: 2,
+            name: 'John',
+            picture:
+              'iVBORw0KGgoAAAANSUhEUgAAAEsAAABLCAYAAAA4TnrqAAACIUlEQVR4Xu3Ysa3YQAwFQbfknuz+S/jOl2AwVnQAg0keoAUv1a+fn59f/+vP778/r+kbxBhED3lB3yDGIHrIC/oGMQbRQ17QN4gxiB7ygr5BjEH0kBf0DWIMooe8oG8QYxA95AV9gxiD6CEv6BvEGEQPeUHfIMYgesgL+gYxBtFDXtA3iDGIHvKCvkGMQfSQF/QNYgyih7ygbxBjOLsxnN0Yzm4MZzeGsxvD2Y3h7MZwdmM4uzGc3RjObgxnN4azG8PZjeHsPv2Taky0JdoSbYlPH/cQ0ZZoS7QlPn3cQ0Rboi3Rlvj0cQ8RbYm2RFvi08c9RLQl2hJtiU8f9xDRlmhLtCU+fdxDRFuiLdGW+PRxDxFtibZEW+LTxz1EtCXaEm2JTx/3ENGWaEu0JT593ENEW6It0Zb49HEPEW2JtkRb4tPHPUS0JdoSbYlPH/cQ0ZZoS7QlPn3cQ0Rboi3RlhixsxvD2Y3h7MZwdmM4uzGc3RjObgxnN4azG8PZjeHsxnB2Yzi7MZzdGM5uDKL/e0Rboi3RlhiD6CGiLdGWaEuMQfQQ0ZZoS7QlxiB6iGhLtCXaEmMQPUS0JdoSbYkxiB4i2hJtibbEGEQPEW2JtkRbYgyih4i2RFuiLTEG0UNEW6It0ZYYg+ghoi3RlmhLjEH0ENGWaEu0JcYgeohoS7Ql2hJjED1EtCXaEm2JMYgeItoSbYm2xBhEDxFtibZEW+IfusaIXHtR21cAAAAASUVORK5CYII=',
+            avatar_color: '#100975',
+            training_run_id: 2,
+            training_time: 2635498,
+            game_score: 50,
+            assessment_score: 200,
+            finished: true,
+          },
+        ],
+      },
+      levels: [
+        {
+          id: 40,
+          order: 0,
+          level_type: 'INFO_LEVEL',
+          title: 'Info',
+          estimated_time: 0,
+          max_participant_score: 0,
+          max_participant_time: 4329,
+          average_time: 4329,
+          average_score: 0,
+          player_data: [
+            {
+              id: 1,
+              name: 'Jane',
+              picture:
+                'iVBORw0KGgoAAAANSUhEUgAAAEsAAABLCAYAAAA4TnrqAAACIUlEQVR4Xu3Ysa3YQAwFQbfknuz+S/jOl2AwVnQAg0keoAUv1a+fn59f/+vP778/r+kbxBhED3lB3yDGIHrIC/oGMQbRQ17QN4gxiB7ygr5BjEH0kBf0DWIMooe8oG8QYxA95AV9gxiD6CEv6BvEGEQPeUHfIMYgesgL+gYxBtFDXtA3iDGIHvKCvkGMQfSQF/QNYgyih7ygbxBjOLsxnN0Yzm4MZzeGsxvD2Y3h7MZwdmM4uzGc3RjObgxnN4azG8PZjeHsPv2Taky0JdoSbYlPH/cQ0ZZoS7QlPn3cQ0Rboi3Rlvj0cQ8RbYm2RFvi08c9RLQl2hJtiU8f9xDRlmhLtCU+fdxDRFuiLdGW+PRxDxFtibZEW+LTxz1EtCXaEm2JTx/3ENGWaEu0JT593ENEW6It0Zb49HEPEW2JtkRb4tPHPUS0JdoSbYlPH/cQ0ZZoS7QlPn3cQ0Rboi3RlhixsxvD2Y3h7MZwdmM4uzGc3RjObgxnN4azG8PZjeHsxnB2Yzi7MZzdGM5uDKL/e0Rboi3RlhiD6CGiLdGWaEuMQfQQ0ZZoS7QlxiB6iGhLtCXaEmMQPUS0JdoSbYkxiB4i2hJtibbEGEQPEW2JtkRbYgyih4i2RFuiLTEG0UNEW6It0ZYYg+ghoi3RlmhLjEH0ENGWaEu0JcYgeohoS7Ql2hJjED1EtCXaEm2JMYgeItoSbYm2xBhEDxFtibZEW+IfusaIXHtR21cAAAAASUVORK5CYII=',
+              avatar_color: '#643165',
+              training_run_id: 1,
+              training_time: 2635498,
+              participant_level_score: 30,
+              finished: true,
+            },
+            {
+              id: 2,
+              name: 'John',
+              picture:
+                'iVBORw0KGgoAAAANSUhEUgAAAEsAAABLCAYAAAA4TnrqAAACIUlEQVR4Xu3Ysa3YQAwFQbfknuz+S/jOl2AwVnQAg0keoAUv1a+fn59f/+vP778/r+kbxBhED3lB3yDGIHrIC/oGMQbRQ17QN4gxiB7ygr5BjEH0kBf0DWIMooe8oG8QYxA95AV9gxiD6CEv6BvEGEQPeUHfIMYgesgL+gYxBtFDXtA3iDGIHvKCvkGMQfSQF/QNYgyih7ygbxBjOLsxnN0Yzm4MZzeGsxvD2Y3h7MZwdmM4uzGc3RjObgxnN4azG8PZjeHsPv2Taky0JdoSbYlPH/cQ0ZZoS7QlPn3cQ0Rboi3Rlvj0cQ8RbYm2RFvi08c9RLQl2hJtiU8f9xDRlmhLtCU+fdxDRFuiLdGW+PRxDxFtibZEW+LTxz1EtCXaEm2JTx/3ENGWaEu0JT593ENEW6It0Zb49HEPEW2JtkRb4tPHPUS0JdoSbYlPH/cQ0ZZoS7QlPn3cQ0Rboi3RlhixsxvD2Y3h7MZwdmM4uzGc3RjObgxnN4azG8PZjeHsxnB2Yzi7MZzdGM5uDKL/e0Rboi3RlhiD6CGiLdGWaEuMQfQQ0ZZoS7QlxiB6iGhLtCXaEmMQPUS0JdoSbYkxiB4i2hJtibbEGEQPEW2JtkRbYgyih4i2RFuiLTEG0UNEW6It0ZYYg+ghoi3RlmhLjEH0ENGWaEu0JcYgeohoS7Ql2hJjED1EtCXaEm2JMYgeItoSbYm2xBhEDxFtibZEW+IfusaIXHtR21cAAAAASUVORK5CYII=',
+              avatar_color: '#100975',
+              training_run_id: 2,
+              training_time: 2635498,
+              participant_level_score: 50,
+              finished: true,
+            },
+          ],
+        },
+        {
+          id: 41,
+          order: 1,
+          level_type: 'GAME_LEVEL',
+          title: 'Finding open ports',
+          estimated_time: 600000,
+          max_participant_score: 30,
+          max_participant_time: 763290,
+          average_time: 763290,
+          average_score: 30,
+          player_data: [
+            {
+              id: 1,
+              name: 'Jane',
+              picture:
+                'iVBORw0KGgoAAAANSUhEUgAAAEsAAABLCAYAAAA4TnrqAAACIUlEQVR4Xu3Ysa3YQAwFQbfknuz+S/jOl2AwVnQAg0keoAUv1a+fn59f/+vP778/r+kbxBhED3lB3yDGIHrIC/oGMQbRQ17QN4gxiB7ygr5BjEH0kBf0DWIMooe8oG8QYxA95AV9gxiD6CEv6BvEGEQPeUHfIMYgesgL+gYxBtFDXtA3iDGIHvKCvkGMQfSQF/QNYgyih7ygbxBjOLsxnN0Yzm4MZzeGsxvD2Y3h7MZwdmM4uzGc3RjObgxnN4azG8PZjeHsPv2Taky0JdoSbYlPH/cQ0ZZoS7QlPn3cQ0Rboi3Rlvj0cQ8RbYm2RFvi08c9RLQl2hJtiU8f9xDRlmhLtCU+fdxDRFuiLdGW+PRxDxFtibZEW+LTxz1EtCXaEm2JTx/3ENGWaEu0JT593ENEW6It0Zb49HEPEW2JtkRb4tPHPUS0JdoSbYlPH/cQ0ZZoS7QlPn3cQ0Rboi3RlhixsxvD2Y3h7MZwdmM4uzGc3RjObgxnN4azG8PZjeHsxnB2Yzi7MZzdGM5uDKL/e0Rboi3RlhiD6CGiLdGWaEuMQfQQ0ZZoS7QlxiB6iGhLtCXaEmMQPUS0JdoSbYkxiB4i2hJtibbEGEQPEW2JtkRbYgyih4i2RFuiLTEG0UNEW6It0ZYYg+ghoi3RlmhLjEH0ENGWaEu0JcYgeohoS7Ql2hJjED1EtCXaEm2JMYgeItoSbYm2xBhEDxFtibZEW+IfusaIXHtR21cAAAAASUVORK5CYII=',
+              avatar_color: '#643165',
+              training_run_id: 1,
+              training_time: 763290,
+              participant_level_score: 30,
+              finished: true,
+            },
+            {
+              id: 2,
+              name: 'John',
+              picture:
+                'iVBORw0KGgoAAAANSUhEUgAAAEsAAABLCAYAAAA4TnrqAAACIUlEQVR4Xu3Ysa3YQAwFQbfknuz+S/jOl2AwVnQAg0keoAUv1a+fn59f/+vP778/r+kbxBhED3lB3yDGIHrIC/oGMQbRQ17QN4gxiB7ygr5BjEH0kBf0DWIMooe8oG8QYxA95AV9gxiD6CEv6BvEGEQPeUHfIMYgesgL+gYxBtFDXtA3iDGIHvKCvkGMQfSQF/QNYgyih7ygbxBjOLsxnN0Yzm4MZzeGsxvD2Y3h7MZwdmM4uzGc3RjObgxnN4azG8PZjeHsPv2Taky0JdoSbYlPH/cQ0ZZoS7QlPn3cQ0Rboi3Rlvj0cQ8RbYm2RFvi08c9RLQl2hJtiU8f9xDRlmhLtCU+fdxDRFuiLdGW+PRxDxFtibZEW+LTxz1EtCXaEm2JTx/3ENGWaEu0JT593ENEW6It0Zb49HEPEW2JtkRb4tPHPUS0JdoSbYlPH/cQ0ZZoS7QlPn3cQ0Rboi3RlhixsxvD2Y3h7MZwdmM4uzGc3RjObgxnN4azG8PZjeHsxnB2Yzi7MZzdGM5uDKL/e0Rboi3RlhiD6CGiLdGWaEuMQfQQ0ZZoS7QlxiB6iGhLtCXaEmMQPUS0JdoSbYkxiB4i2hJtibbEGEQPEW2JtkRbYgyih4i2RFuiLTEG0UNEW6It0ZYYg+ghoi3RlmhLjEH0ENGWaEu0JcYgeohoS7Ql2hJjED1EtCXaEm2JMYgeItoSbYm2xBhEDxFtibZEW+IfusaIXHtR21cAAAAASUVORK5CYII=',
+              avatar_color: '#100975',
+              training_run_id: 2,
+              training_time: 763290,
+              participant_level_score: 50,
+              finished: true,
+            },
+          ],
+        },
+        {
+          id: 42,
+          order: 2,
+          level_type: 'GAME_LEVEL',
+          title: 'Connecting via Telnet',
+          estimated_time: 600000,
+          max_participant_score: 0,
+          max_participant_time: 758743,
+          average_time: 758743,
+          average_score: 0,
+          player_data: [
+            {
+              id: 1,
+              name: 'Jane',
+              picture:
+                'iVBORw0KGgoAAAANSUhEUgAAAEsAAABLCAYAAAA4TnrqAAACIUlEQVR4Xu3Ysa3YQAwFQbfknuz+S/jOl2AwVnQAg0keoAUv1a+fn59f/+vP778/r+kbxBhED3lB3yDGIHrIC/oGMQbRQ17QN4gxiB7ygr5BjEH0kBf0DWIMooe8oG8QYxA95AV9gxiD6CEv6BvEGEQPeUHfIMYgesgL+gYxBtFDXtA3iDGIHvKCvkGMQfSQF/QNYgyih7ygbxBjOLsxnN0Yzm4MZzeGsxvD2Y3h7MZwdmM4uzGc3RjObgxnN4azG8PZjeHsPv2Taky0JdoSbYlPH/cQ0ZZoS7QlPn3cQ0Rboi3Rlvj0cQ8RbYm2RFvi08c9RLQl2hJtiU8f9xDRlmhLtCU+fdxDRFuiLdGW+PRxDxFtibZEW+LTxz1EtCXaEm2JTx/3ENGWaEu0JT593ENEW6It0Zb49HEPEW2JtkRb4tPHPUS0JdoSbYlPH/cQ0ZZoS7QlPn3cQ0Rboi3RlhixsxvD2Y3h7MZwdmM4uzGc3RjObgxnN4azG8PZjeHsxnB2Yzi7MZzdGM5uDKL/e0Rboi3RlhiD6CGiLdGWaEuMQfQQ0ZZoS7QlxiB6iGhLtCXaEmMQPUS0JdoSbYkxiB4i2hJtibbEGEQPEW2JtkRbYgyih4i2RFuiLTEG0UNEW6It0ZYYg+ghoi3RlmhLjEH0ENGWaEu0JcYgeohoS7Ql2hJjED1EtCXaEm2JMYgeItoSbYm2xBhEDxFtibZEW+IfusaIXHtR21cAAAAASUVORK5CYII=',
+              avatar_color: '#643165',
+              training_run_id: 1,
+              training_time: 758743,
+              participant_level_score: 0,
+              finished: true,
+            },
+            {
+              id: 2,
+              name: 'John',
+              picture:
+                'iVBORw0KGgoAAAANSUhEUgAAAEsAAABLCAYAAAA4TnrqAAACIUlEQVR4Xu3Ysa3YQAwFQbfknuz+S/jOl2AwVnQAg0keoAUv1a+fn59f/+vP778/r+kbxBhED3lB3yDGIHrIC/oGMQbRQ17QN4gxiB7ygr5BjEH0kBf0DWIMooe8oG8QYxA95AV9gxiD6CEv6BvEGEQPeUHfIMYgesgL+gYxBtFDXtA3iDGIHvKCvkGMQfSQF/QNYgyih7ygbxBjOLsxnN0Yzm4MZzeGsxvD2Y3h7MZwdmM4uzGc3RjObgxnN4azG8PZjeHsPv2Taky0JdoSbYlPH/cQ0ZZoS7QlPn3cQ0Rboi3Rlvj0cQ8RbYm2RFvi08c9RLQl2hJtiU8f9xDRlmhLtCU+fdxDRFuiLdGW+PRxDxFtibZEW+LTxz1EtCXaEm2JTx/3ENGWaEu0JT593ENEW6It0Zb49HEPEW2JtkRb4tPHPUS0JdoSbYlPH/cQ0ZZoS7QlPn3cQ0Rboi3RlhixsxvD2Y3h7MZwdmM4uzGc3RjObgxnN4azG8PZjeHsxnB2Yzi7MZzdGM5uDKL/e0Rboi3RlhiD6CGiLdGWaEuMQfQQ0ZZoS7QlxiB6iGhLtCXaEmMQPUS0JdoSbYkxiB4i2hJtibbEGEQPEW2JtkRbYgyih4i2RFuiLTEG0UNEW6It0ZYYg+ghoi3RlmhLjEH0ENGWaEu0JcYgeohoS7Ql2hJjED1EtCXaEm2JMYgeItoSbYm2xBhEDxFtibZEW+IfusaIXHtR21cAAAAASUVORK5CYII=',
+              avatar_color: '#100975',
+              training_run_id: 2,
+              training_time: 758743,
+              participant_level_score: 0,
+              finished: true,
+            },
+          ],
+        },
+        {
+          id: 43,
+          order: 3,
+          level_type: 'GAME_LEVEL',
+          title: 'Privilege Escalation',
+          estimated_time: 900000,
+          max_participant_score: 0,
+          max_participant_time: 1081137,
+          average_time: 1081137,
+          average_score: 0,
+          player_data: [
+            {
+              id: 1,
+              name: 'Jane',
+              picture:
+                'iVBORw0KGgoAAAANSUhEUgAAAEsAAABLCAYAAAA4TnrqAAACIUlEQVR4Xu3Ysa3YQAwFQbfknuz+S/jOl2AwVnQAg0keoAUv1a+fn59f/+vP778/r+kbxBhED3lB3yDGIHrIC/oGMQbRQ17QN4gxiB7ygr5BjEH0kBf0DWIMooe8oG8QYxA95AV9gxiD6CEv6BvEGEQPeUHfIMYgesgL+gYxBtFDXtA3iDGIHvKCvkGMQfSQF/QNYgyih7ygbxBjOLsxnN0Yzm4MZzeGsxvD2Y3h7MZwdmM4uzGc3RjObgxnN4azG8PZjeHsPv2Taky0JdoSbYlPH/cQ0ZZoS7QlPn3cQ0Rboi3Rlvj0cQ8RbYm2RFvi08c9RLQl2hJtiU8f9xDRlmhLtCU+fdxDRFuiLdGW+PRxDxFtibZEW+LTxz1EtCXaEm2JTx/3ENGWaEu0JT593ENEW6It0Zb49HEPEW2JtkRb4tPHPUS0JdoSbYlPH/cQ0ZZoS7QlPn3cQ0Rboi3RlhixsxvD2Y3h7MZwdmM4uzGc3RjObgxnN4azG8PZjeHsxnB2Yzi7MZzdGM5uDKL/e0Rboi3RlhiD6CGiLdGWaEuMQfQQ0ZZoS7QlxiB6iGhLtCXaEmMQPUS0JdoSbYkxiB4i2hJtibbEGEQPEW2JtkRbYgyih4i2RFuiLTEG0UNEW6It0ZYYg+ghoi3RlmhLjEH0ENGWaEu0JcYgeohoS7Ql2hJjED1EtCXaEm2JMYgeItoSbYm2xBhEDxFtibZEW+IfusaIXHtR21cAAAAASUVORK5CYII=',
+              avatar_color: '#643165',
+              training_run_id: 1,
+              training_time: 1081137,
+              participant_level_score: 0,
+              finished: true,
+            },
+            {
+              id: 2,
+              name: 'John',
+              picture:
+                'iVBORw0KGgoAAAANSUhEUgAAAEsAAABLCAYAAAA4TnrqAAACIUlEQVR4Xu3Ysa3YQAwFQbfknuz+S/jOl2AwVnQAg0keoAUv1a+fn59f/+vP778/r+kbxBhED3lB3yDGIHrIC/oGMQbRQ17QN4gxiB7ygr5BjEH0kBf0DWIMooe8oG8QYxA95AV9gxiD6CEv6BvEGEQPeUHfIMYgesgL+gYxBtFDXtA3iDGIHvKCvkGMQfSQF/QNYgyih7ygbxBjOLsxnN0Yzm4MZzeGsxvD2Y3h7MZwdmM4uzGc3RjObgxnN4azG8PZjeHsPv2Taky0JdoSbYlPH/cQ0ZZoS7QlPn3cQ0Rboi3Rlvj0cQ8RbYm2RFvi08c9RLQl2hJtiU8f9xDRlmhLtCU+fdxDRFuiLdGW+PRxDxFtibZEW+LTxz1EtCXaEm2JTx/3ENGWaEu0JT593ENEW6It0Zb49HEPEW2JtkRb4tPHPUS0JdoSbYlPH/cQ0ZZoS7QlPn3cQ0Rboi3RlhixsxvD2Y3h7MZwdmM4uzGc3RjObgxnN4azG8PZjeHsxnB2Yzi7MZzdGM5uDKL/e0Rboi3RlhiD6CGiLdGWaEuMQfQQ0ZZoS7QlxiB6iGhLtCXaEmMQPUS0JdoSbYkxiB4i2hJtibbEGEQPEW2JtkRbYgyih4i2RFuiLTEG0UNEW6It0ZYYg+ghoi3RlmhLjEH0ENGWaEu0JcYgeohoS7Ql2hJjED1EtCXaEm2JMYgeItoSbYm2xBhEDxFtibZEW+IfusaIXHtR21cAAAAASUVORK5CYII=',
+              avatar_color: '#100975',
+              training_run_id: 2,
+              training_time: 1081137,
+              participant_level_score: 0,
+              finished: true,
+            },
+          ],
+        },
+        {
+          id: 44,
+          order: 4,
+          level_type: 'ASSESSMENT_LEVEL',
+          title: 'Test Example',
+          estimated_time: 300000,
+          max_participant_score: 200,
+          max_participant_time: 20202,
+          average_time: 20202,
+          average_score: 200,
+          player_data: [
+            {
+              id: 1,
+              name: 'Jane',
+              picture:
+                'iVBORw0KGgoAAAANSUhEUgAAAEsAAABLCAYAAAA4TnrqAAACIUlEQVR4Xu3Ysa3YQAwFQbfknuz+S/jOl2AwVnQAg0keoAUv1a+fn59f/+vP778/r+kbxBhED3lB3yDGIHrIC/oGMQbRQ17QN4gxiB7ygr5BjEH0kBf0DWIMooe8oG8QYxA95AV9gxiD6CEv6BvEGEQPeUHfIMYgesgL+gYxBtFDXtA3iDGIHvKCvkGMQfSQF/QNYgyih7ygbxBjOLsxnN0Yzm4MZzeGsxvD2Y3h7MZwdmM4uzGc3RjObgxnN4azG8PZjeHsPv2Taky0JdoSbYlPH/cQ0ZZoS7QlPn3cQ0Rboi3Rlvj0cQ8RbYm2RFvi08c9RLQl2hJtiU8f9xDRlmhLtCU+fdxDRFuiLdGW+PRxDxFtibZEW+LTxz1EtCXaEm2JTx/3ENGWaEu0JT593ENEW6It0Zb49HEPEW2JtkRb4tPHPUS0JdoSbYlPH/cQ0ZZoS7QlPn3cQ0Rboi3RlhixsxvD2Y3h7MZwdmM4uzGc3RjObgxnN4azG8PZjeHsxnB2Yzi7MZzdGM5uDKL/e0Rboi3RlhiD6CGiLdGWaEuMQfQQ0ZZoS7QlxiB6iGhLtCXaEmMQPUS0JdoSbYkxiB4i2hJtibbEGEQPEW2JtkRbYgyih4i2RFuiLTEG0UNEW6It0ZYYg+ghoi3RlmhLjEH0ENGWaEu0JcYgeohoS7Ql2hJjED1EtCXaEm2JMYgeItoSbYm2xBhEDxFtibZEW+IfusaIXHtR21cAAAAASUVORK5CYII=',
+              avatar_color: '#643165',
+              training_run_id: 1,
+              training_time: 20202,
+              participant_level_score: 200,
+              finished: true,
+            },
+            {
+              id: 2,
+              name: 'John',
+              picture:
+                'iVBORw0KGgoAAAANSUhEUgAAAEsAAABLCAYAAAA4TnrqAAACIUlEQVR4Xu3Ysa3YQAwFQbfknuz+S/jOl2AwVnQAg0keoAUv1a+fn59f/+vP778/r+kbxBhED3lB3yDGIHrIC/oGMQbRQ17QN4gxiB7ygr5BjEH0kBf0DWIMooe8oG8QYxA95AV9gxiD6CEv6BvEGEQPeUHfIMYgesgL+gYxBtFDXtA3iDGIHvKCvkGMQfSQF/QNYgyih7ygbxBjOLsxnN0Yzm4MZzeGsxvD2Y3h7MZwdmM4uzGc3RjObgxnN4azG8PZjeHsPv2Taky0JdoSbYlPH/cQ0ZZoS7QlPn3cQ0Rboi3Rlvj0cQ8RbYm2RFvi08c9RLQl2hJtiU8f9xDRlmhLtCU+fdxDRFuiLdGW+PRxDxFtibZEW+LTxz1EtCXaEm2JTx/3ENGWaEu0JT593ENEW6It0Zb49HEPEW2JtkRb4tPHPUS0JdoSbYlPH/cQ0ZZoS7QlPn3cQ0Rboi3RlhixsxvD2Y3h7MZwdmM4uzGc3RjObgxnN4azG8PZjeHsxnB2Yzi7MZzdGM5uDKL/e0Rboi3RlhiD6CGiLdGWaEuMQfQQ0ZZoS7QlxiB6iGhLtCXaEmMQPUS0JdoSbYkxiB4i2hJtibbEGEQPEW2JtkRbYgyih4i2RFuiLTEG0UNEW6It0ZYYg+ghoi3RlmhLjEH0ENGWaEu0JcYgeohoS7Ql2hJjED1EtCXaEm2JMYgeItoSbYm2xBhEDxFtibZEW+IfusaIXHtR21cAAAAASUVORK5CYII=',
+              avatar_color: '#100975',
+              training_run_id: 2,
+              training_time: 20202,
+              participant_level_score: 200,
+              finished: true,
+            },
+          ],
+        },
+        {
+          id: 45,
+          order: 5,
+          level_type: 'ASSESSMENT_LEVEL',
+          title: 'Assessment Example',
+          estimated_time: 300000,
+          max_participant_score: 0,
+          max_participant_time: 7610,
+          average_time: 7610,
+          average_score: 0,
+          player_data: [
+            {
+              id: 1,
+              name: 'Jane',
+              picture:
+                'iVBORw0KGgoAAAANSUhEUgAAAEsAAABLCAYAAAA4TnrqAAACIUlEQVR4Xu3Ysa3YQAwFQbfknuz+S/jOl2AwVnQAg0keoAUv1a+fn59f/+vP778/r+kbxBhED3lB3yDGIHrIC/oGMQbRQ17QN4gxiB7ygr5BjEH0kBf0DWIMooe8oG8QYxA95AV9gxiD6CEv6BvEGEQPeUHfIMYgesgL+gYxBtFDXtA3iDGIHvKCvkGMQfSQF/QNYgyih7ygbxBjOLsxnN0Yzm4MZzeGsxvD2Y3h7MZwdmM4uzGc3RjObgxnN4azG8PZjeHsPv2Taky0JdoSbYlPH/cQ0ZZoS7QlPn3cQ0Rboi3Rlvj0cQ8RbYm2RFvi08c9RLQl2hJtiU8f9xDRlmhLtCU+fdxDRFuiLdGW+PRxDxFtibZEW+LTxz1EtCXaEm2JTx/3ENGWaEu0JT593ENEW6It0Zb49HEPEW2JtkRb4tPHPUS0JdoSbYlPH/cQ0ZZoS7QlPn3cQ0Rboi3RlhixsxvD2Y3h7MZwdmM4uzGc3RjObgxnN4azG8PZjeHsxnB2Yzi7MZzdGM5uDKL/e0Rboi3RlhiD6CGiLdGWaEuMQfQQ0ZZoS7QlxiB6iGhLtCXaEmMQPUS0JdoSbYkxiB4i2hJtibbEGEQPEW2JtkRbYgyih4i2RFuiLTEG0UNEW6It0ZYYg+ghoi3RlmhLjEH0ENGWaEu0JcYgeohoS7Ql2hJjED1EtCXaEm2JMYgeItoSbYm2xBhEDxFtibZEW+IfusaIXHtR21cAAAAASUVORK5CYII=',
+              avatar_color: '#643165',
+              training_run_id: 1,
+              training_time: 7610,
+              participant_level_score: 0,
+              finished: true,
+            },
+            {
+              id: 2,
+              name: 'John',
+              picture:
+                'iVBORw0KGgoAAAANSUhEUgAAAEsAAABLCAYAAAA4TnrqAAACIUlEQVR4Xu3Ysa3YQAwFQbfknuz+S/jOl2AwVnQAg0keoAUv1a+fn59f/+vP778/r+kbxBhED3lB3yDGIHrIC/oGMQbRQ17QN4gxiB7ygr5BjEH0kBf0DWIMooe8oG8QYxA95AV9gxiD6CEv6BvEGEQPeUHfIMYgesgL+gYxBtFDXtA3iDGIHvKCvkGMQfSQF/QNYgyih7ygbxBjOLsxnN0Yzm4MZzeGsxvD2Y3h7MZwdmM4uzGc3RjObgxnN4azG8PZjeHsPv2Taky0JdoSbYlPH/cQ0ZZoS7QlPn3cQ0Rboi3Rlvj0cQ8RbYm2RFvi08c9RLQl2hJtiU8f9xDRlmhLtCU+fdxDRFuiLdGW+PRxDxFtibZEW+LTxz1EtCXaEm2JTx/3ENGWaEu0JT593ENEW6It0Zb49HEPEW2JtkRb4tPHPUS0JdoSbYlPH/cQ0ZZoS7QlPn3cQ0Rboi3RlhixsxvD2Y3h7MZwdmM4uzGc3RjObgxnN4azG8PZjeHsxnB2Yzi7MZzdGM5uDKL/e0Rboi3RlhiD6CGiLdGWaEuMQfQQ0ZZoS7QlxiB6iGhLtCXaEmMQPUS0JdoSbYkxiB4i2hJtibbEGEQPEW2JtkRbYgyih4i2RFuiLTEG0UNEW6It0ZYYg+ghoi3RlmhLjEH0ENGWaEu0JcYgeohoS7Ql2hJjED1EtCXaEm2JMYgeItoSbYm2xBhEDxFtibZEW+IfusaIXHtR21cAAAAASUVORK5CYII=',
+              avatar_color: '#100975',
+              training_run_id: 2,
+              training_time: 7610,
+              participant_level_score: 0,
+              finished: true,
+            },
+          ],
+        },
+      ]
+    },
+    table: [
+      {
+        id: 1,
+        name: 'John',
+        picture:
+          'iVBORw0KGgoAAAANSUhEUgAAAEsAAABLCAYAAAA4TnrqAAACIUlEQVR4Xu3Ysa3YQAwFQbfknuz+S/jOl2AwVnQAg0keoAUv1a+fn59f/+vP778/r+kbxBhED3lB3yDGIHrIC/oGMQbRQ17QN4gxiB7ygr5BjEH0kBf0DWIMooe8oG8QYxA95AV9gxiD6CEv6BvEGEQPeUHfIMYgesgL+gYxBtFDXtA3iDGIHvKCvkGMQfSQF/QNYgyih7ygbxBjOLsxnN0Yzm4MZzeGsxvD2Y3h7MZwdmM4uzGc3RjObgxnN4azG8PZjeHsPv2Taky0JdoSbYlPH/cQ0ZZoS7QlPn3cQ0Rboi3Rlvj0cQ8RbYm2RFvi08c9RLQl2hJtiU8f9xDRlmhLtCU+fdxDRFuiLdGW+PRxDxFtibZEW+LTxz1EtCXaEm2JTx/3ENGWaEu0JT593ENEW6It0Zb49HEPEW2JtkRb4tPHPUS0JdoSbYlPH/cQ0ZZoS7QlPn3cQ0Rboi3RlhixsxvD2Y3h7MZwdmM4uzGc3RjObgxnN4azG8PZjeHsxnB2Yzi7MZzdGM5uDKL/e0Rboi3RlhiD6CGiLdGWaEuMQfQQ0ZZoS7QlxiB6iGhLtCXaEmMQPUS0JdoSbYkxiB4i2hJtibbEGEQPEW2JtkRbYgyih4i2RFuiLTEG0UNEW6It0ZYYg+ghoi3RlmhLjEH0ENGWaEu0JcYgeohoS7Ql2hJjED1EtCXaEm2JMYgeItoSbYm2xBhEDxFtibZEW+IfusaIXHtR21cAAAAASUVORK5CYII=',
+        avatar_color: '#243165',
+        training_run_id: 1,
+        training_time: 2635498,
+        game_score: 30,
+        assessment_score: 200,
+        finished: true,
+        checked: false,
+        levels: [
+          {
+            id: 40,
+            level_type: 'INFO_LEVEL',
+            order: 0,
+            participant_level_score: 0,
+          },
+          {
+            id: 41,
+            order: 1,
+            level_type: 'GAME_LEVEL',
+            wrong_flags: 1,
+            hints_taken: 1,
+            participant_level_score: 30,
+          },
+          {
+            id: 42,
+            order: 2,
+            level_type: 'GAME_LEVEL',
+            wrong_flags: 1,
+            hints_taken: 2,
+            participant_level_score: 0,
+          },
+          {
+            id: 43,
+            order: 3,
+            level_type: 'GAME_LEVEL',
+            wrong_flags: 4,
+            hints_taken: 1,
+            participant_level_score: 0,
+          },
+          {
+            id: 44,
+            order: 4,
+            level_type: 'ASSESSMENT_LEVEL',
+            participant_level_score: 200,
+          },
+          {
+            id: 45,
+            order: 5,
+            level_type: 'ASSESSMENT_LEVEL',
+            participant_level_score: 0,
+          },
+        ],
+      },
+      {
+        id: 2,
+        name: 'Jane',
+        picture:
+          'iVBORw0KGgoAAAANSUhEUgAAAEsAAABLCAYAAAA4TnrqAAACIUlEQVR4Xu3Ysa3YQAwFQbfknuz+S/jOl2AwVnQAg0keoAUv1a+fn59f/+vP778/r+kbxBhED3lB3yDGIHrIC/oGMQbRQ17QN4gxiB7ygr5BjEH0kBf0DWIMooe8oG8QYxA95AV9gxiD6CEv6BvEGEQPeUHfIMYgesgL+gYxBtFDXtA3iDGIHvKCvkGMQfSQF/QNYgyih7ygbxBjOLsxnN0Yzm4MZzeGsxvD2Y3h7MZwdmM4uzGc3RjObgxnN4azG8PZjeHsPv2Taky0JdoSbYlPH/cQ0ZZoS7QlPn3cQ0Rboi3Rlvj0cQ8RbYm2RFvi08c9RLQl2hJtiU8f9xDRlmhLtCU+fdxDRFuiLdGW+PRxDxFtibZEW+LTxz1EtCXaEm2JTx/3ENGWaEu0JT593ENEW6It0Zb49HEPEW2JtkRb4tPHPUS0JdoSbYlPH/cQ0ZZoS7QlPn3cQ0Rboi3RlhixsxvD2Y3h7MZwdmM4uzGc3RjObgxnN4azG8PZjeHsxnB2Yzi7MZzdGM5uDKL/e0Rboi3RlhiD6CGiLdGWaEuMQfQQ0ZZoS7QlxiB6iGhLtCXaEmMQPUS0JdoSbYkxiB4i2hJtibbEGEQPEW2JtkRbYgyih4i2RFuiLTEG0UNEW6It0ZYYg+ghoi3RlmhLjEH0ENGWaEu0JcYgeohoS7Ql2hJjED1EtCXaEm2JMYgeItoSbYm2xBhEDxFtibZEW+IfusaIXHtR21cAAAAASUVORK5CYII=',
+        avatar_color: '#643165',
+        training_run_id: 2,
+        training_time: 2635498,
+        game_score: 30,
+        assessment_score: 200,
+        finished: true,
+        checked: false,
+        levels: [
+          {
+            id: 40,
+            level_type: 'INFO_LEVEL',
+            order: 0,
+            participant_level_score: 0,
+          },
+          {
+            id: 41,
+            order: 1,
+            level_type: 'GAME_LEVEL',
+            wrong_flags: 1,
+            hints_taken: 1,
+            participant_level_score: 30,
+          },
+          {
+            id: 42,
+            order: 2,
+            level_type: 'GAME_LEVEL',
+            wrong_flags: 1,
+            hints_taken: 2,
+            participant_level_score: 0,
+          },
+          {
+            id: 43,
+            order: 3,
+            level_type: 'GAME_LEVEL',
+            wrong_flags: 4,
+            hints_taken: 1,
+            participant_level_score: 0,
+          },
+          {
+            id: 44,
+            order: 4,
+            level_type: 'ASSESSMENT_LEVEL',
+            participant_level_score: 200,
+          },
+          {
+            id: 45,
+            order: 5,
+            level_type: 'ASSESSMENT_LEVEL',
+            participant_level_score: 0,
+          },
+        ],
+      },
+    ],
+    timeline: {
+      estimated_time: 2700000000,
+      max_score_of_levels: [0, 50, 100, 100, 300, 0],
+      max_participant_time: 2635498,
+      average_time: 2635498,
+      player_data: [
+        {
+          id: 1,
+          name: 'John doe',
+          picture:
+            'iVBORw0KGgoAAAANSUhEUgAAAEsAAABLCAYAAAA4TnrqAAACIUlEQVR4Xu3Ysa3YQAwFQbfknuz+S/jOl2AwVnQAg0keoAUv1a+fn59f/+vP778/r+kbxBhED3lB3yDGIHrIC/oGMQbRQ17QN4gxiB7ygr5BjEH0kBf0DWIMooe8oG8QYxA95AV9gxiD6CEv6BvEGEQPeUHfIMYgesgL+gYxBtFDXtA3iDGIHvKCvkGMQfSQF/QNYgyih7ygbxBjOLsxnN0Yzm4MZzeGsxvD2Y3h7MZwdmM4uzGc3RjObgxnN4azG8PZjeHsPv2Taky0JdoSbYlPH/cQ0ZZoS7QlPn3cQ0Rboi3Rlvj0cQ8RbYm2RFvi08c9RLQl2hJtiU8f9xDRlmhLtCU+fdxDRFuiLdGW+PRxDxFtibZEW+LTxz1EtCXaEm2JTx/3ENGWaEu0JT593ENEW6It0Zb49HEPEW2JtkRb4tPHPUS0JdoSbYlPH/cQ0ZZoS7QlPn3cQ0Rboi3RlhixsxvD2Y3h7MZwdmM4uzGc3RjObgxnN4azG8PZjeHsxnB2Yzi7MZzdGM5uDKL/e0Rboi3RlhiD6CGiLdGWaEuMQfQQ0ZZoS7QlxiB6iGhLtCXaEmMQPUS0JdoSbYkxiB4i2hJtibbEGEQPEW2JtkRbYgyih4i2RFuiLTEG0UNEW6It0ZYYg+ghoi3RlmhLjEH0ENGWaEu0JcYgeohoS7Ql2hJjED1EtCXaEm2JMYgeItoSbYm2xBhEDxFtibZEW+IfusaIXHtR21cAAAAASUVORK5CYII=',
+          avatar_color: '#456233',
+          training_run_id: 1,
+          training_time: 2635498,
+          game_score: 30,
+          assessment_score: 200,
+          levels: [
+            {
+              id: 40,
+              order: 0,
+              level_type: 'INFO_LEVEL',
+              start_time: 0,
+              participant_level_score: 0,
+              events: [
+                {
+                  text: 'Training run 1 started',
+                  time: 0,
+                  score: 0,
+                },
+                {
+                  text: 'Level 0 started',
+                  time: 150,
+                  score: 0,
+                },
+                {
+                  text: 'Level 0 completed',
+                  time: 4329,
+                  score: 0,
+                },
+              ],
+            },
+            {
+              id: 41,
+              order: 1,
+              level_type: 'GAME_LEVEL',
+              solution_displayed_time: 0,
+              correct_flag_time: 76762,
+              start_time: 4333,
+              participant_level_score: 30,
+              events: [
+                {
+                  text: 'Level 1 started',
+                  time: 4333,
+                  score: 50,
+                },
+                {
+                  text: "Hint 'Tool to find open ports' taken.",
+                  time: 325602,
+                  score: 30,
+                },
+                {
+                  text: 'Wrong flag submitted.',
+                  time: 448468,
+                  score: 30,
+                },
+                {
+                  text: 'Correct flag submitted.',
+                  time: 76762,
+                  levelOrder: 1,
+                },
+                {
+                  text: 'Level 1 completed.',
+                  score: 30,
+                  time: 767623,
+                },
+              ],
+            },
+            {
+              id: 42,
+              order: 2,
+              level_type: 'GAME_LEVEL',
+              solution_displayed_time: 1502785,
+              correct_flag_time: 1526435,
+              start_time: 767693,
+              participant_level_score: 0,
+              events: [
+                {
+                  text: 'Level 2 started',
+                  time: 767693,
+                  score: 130,
+                },
+                {
+                  text: "Hint 'Tool for password attacks' taken.",
+                  time: 953496,
+                  score: 110,
+                },
+                {
+                  text: "Hint 'Connecting using telnet' taken.",
+                  score: 100,
+                  time: 1246389,
+                },
+                {
+                  text: 'Solution displayed',
+                  time: 1502785,
+                  score: 30,
+                },
+                {
+                  text: 'Wrong flag submitted.',
+                  score: 30,
+                  time: 1517459,
+                },
+                {
+                  text: 'Correct flag submitted.',
+                  score: 30,
+                  time: 1526435,
+                },
+                {
+                  text: 'Level 2 completed.',
+                  score: 30,
+                  time: 1526436,
+                },
+              ],
+            },
+            {
+              id: 43,
+              order: 3,
+              level_type: 'GAME_LEVEL',
+              solution_displayed_time: 2593857,
+              correct_flag_time: 2607616,
+              start_time: 152648,
+              participant_level_score: 0,
+              events: [
+                {
+                  text: 'Level 3 started',
+                  time: 1526480,
+                  score: 130,
+                },
+                {
+                  text: "Hint 'Using the privilege escalation' taken.",
+                  time: 1973734,
+                  score: 70,
+                },
+                {
+                  text: 'Wrong flag submitted.',
+                  score: 70,
+                  time: 2476713,
+                },
+                {
+                  text: 'Wrong flag submitted.',
+                  score: 70,
+                  time: 2489708,
+                },
+                {
+                  text: 'Wrong flag submitted.',
+                  score: 70,
+                  time: 2498401,
+                },
+                {
+                  text: 'Solution displayed',
+                  time: 2593857,
+                  score: 30,
+                },
+                {
+                  text: 'Wrong flag submitted.',
+                  score: 30,
+                  time: 2599967,
+                },
+                {
+                  text: 'Correct flag submitted.',
+                  score: 30,
+                  time: 2607616,
+                },
+                {
+                  text: 'Level 3 completed.',
+                  score: 30,
+                  time: 2607617,
+                },
+              ],
+            },
+            {
+              id: 44,
+              order: 4,
+              level_type: 'ASSESSMENT_LEVEL',
+              start_time: 2607652,
+              participant_level_score: 200,
+              assessment_type: 'TEST_ASSESSMENT',
+              events: [
+                {
+                  text: 'Level 4 started',
+                  time: 2607652,
+                  score: 330,
+                },
+                {
+                  text: 'Assessment answered.',
+                  time: 2627852,
+                  score: 230,
+                },
+                {
+                  text: 'Level 4 completed.',
+                  time: 2627854,
+                  score: 230,
+                },
+              ],
+            },
+            {
+              id: 45,
+              order: 5,
+              level_type: 'ASSESSMENT_LEVEL',
+              start_time: 2627888,
+              participant_level_score: 0,
+              assessment_type: 'QUESTIONNAIRE',
+              events: [
+                {
+                  text: 'Level 5 started',
+                  time: 2627888,
+                  score: 230,
+                },
+                {
+                  text: 'Assessment answered.',
+                  time: 2635462,
+                  score: 230,
+                },
+                {
+                  text: 'Level 5 completed.',
+                  time: 2635464,
+                  score: 230,
+                },
+              ],
+            },
+          ],
+        },
+        {
+          id: 2,
+          name: 'Jane doe',
+          picture:
+            'iVBORw0KGgoAAAANSUhEUgAAAEsAAABLCAYAAAA4TnrqAAACIUlEQVR4Xu3Ysa3YQAwFQbfknuz+S/jOl2AwVnQAg0keoAUv1a+fn59f/+vP778/r+kbxBhED3lB3yDGIHrIC/oGMQbRQ17QN4gxiB7ygr5BjEH0kBf0DWIMooe8oG8QYxA95AV9gxiD6CEv6BvEGEQPeUHfIMYgesgL+gYxBtFDXtA3iDGIHvKCvkGMQfSQF/QNYgyih7ygbxBjOLsxnN0Yzm4MZzeGsxvD2Y3h7MZwdmM4uzGc3RjObgxnN4azG8PZjeHsPv2Taky0JdoSbYlPH/cQ0ZZoS7QlPn3cQ0Rboi3Rlvj0cQ8RbYm2RFvi08c9RLQl2hJtiU8f9xDRlmhLtCU+fdxDRFuiLdGW+PRxDxFtibZEW+LTxz1EtCXaEm2JTx/3ENGWaEu0JT593ENEW6It0Zb49HEPEW2JtkRb4tPHPUS0JdoSbYlPH/cQ0ZZoS7QlPn3cQ0Rboi3RlhixsxvD2Y3h7MZwdmM4uzGc3RjObgxnN4azG8PZjeHsxnB2Yzi7MZzdGM5uDKL/e0Rboi3RlhiD6CGiLdGWaEuMQfQQ0ZZoS7QlxiB6iGhLtCXaEmMQPUS0JdoSbYkxiB4i2hJtibbEGEQPEW2JtkRbYgyih4i2RFuiLTEG0UNEW6It0ZYYg+ghoi3RlmhLjEH0ENGWaEu0JcYgeohoS7Ql2hJjED1EtCXaEm2JMYgeItoSbYm2xBhEDxFtibZEW+IfusaIXHtR21cAAAAASUVORK5CYII=',
+          avatar_color: '#638273',
+          training_run_id: 2,
+          training_time: 2635498,
+          game_score: 150,
+          assessment_score: 150,
+          levels: [
+            {
+              id: 40,
+              order: 0,
+              level_type: 'INFO_LEVEL',
+              start_time: 0,
+              participant_level_score: 0,
+              events: [
+                {
+                  text: 'Training run 1 started',
+                  time: 0,
+                  score: 0,
+                },
+                {
+                  text: 'Level 0 started',
+                  time: 150,
+                  score: 0,
+                },
+                {
+                  text: 'Level 0 completed',
+                  time: 4329,
+                  score: 0,
+                },
+              ],
+            },
+            {
+              id: 41,
+              order: 1,
+              level_type: 'GAME_LEVEL',
+              solution_displayed_time: 0,
+              correct_flag_time: 76762,
+              start_time: 4333,
+              participant_level_score: 50,
+              events: [
+                {
+                  text: 'Level 1 started',
+                  time: 4333,
+                  score: 50,
+                },
+                {
+                  text: 'Wrong flag submitted.',
+                  time: 448468,
+                  score: 50,
+                },
+                {
+                  text: 'Correct flag submitted.',
+                  time: 767620,
+                  levelOrder: 1,
+                },
+                {
+                  text: 'Level 1 completed.',
+                  score: 50,
+                  time: 767623,
+                },
+              ],
+            },
+            {
+              id: 42,
+              order: 2,
+              level_type: 'GAME_LEVEL',
+              solution_displayed_time: 1502785,
+              correct_flag_time: 1526435,
+              start_time: 767693,
+              participant_level_score: 0,
+              events: [
+                {
+                  text: 'Level 2 started',
+                  time: 767693,
+                  score: 130,
+                },
+                {
+                  text: "Hint 'Tool for password attacks' taken.",
+                  time: 953496,
+                  score: 110,
+                },
+                {
+                  text: "Hint 'Connecting using telnet' taken.",
+                  score: 100,
+                  time: 1246389,
+                },
+                {
+                  text: 'Solution displayed',
+                  time: 1502785,
+                  score: 30,
+                },
+                {
+                  text: 'Wrong flag submitted.',
+                  score: 30,
+                  time: 1517459,
+                },
+                {
+                  text: 'Correct flag submitted.',
+                  score: 30,
+                  time: 1526435,
+                },
+                {
+                  text: 'Level 2 completed.',
+                  score: 30,
+                  time: 1526436,
+                },
+              ],
+            },
+            {
+              id: 43,
+              order: 3,
+              level_type: 'GAME_LEVEL',
+              solution_displayed_time: 2593857,
+              correct_flag_time: 2607616,
+              start_time: 152648,
+              participant_level_score: 100,
+              events: [
+                {
+                  text: 'Level 3 started',
+                  time: 1526480,
+                  score: 150,
+                },
+                {
+                  text: 'Wrong flag submitted.',
+                  score: 150,
+                  time: 2476713,
+                },
+                {
+                  text: 'Solution displayed',
+                  time: 2593857,
+                  score: 150,
+                },
+                {
+                  text: 'Wrong flag submitted.',
+                  score: 150,
+                  time: 2599967,
+                },
+                {
+                  text: 'Correct flag submitted.',
+                  score: 150,
+                  time: 2607616,
+                },
+                {
+                  text: 'Level 3 completed.',
+                  score: 150,
+                  time: 2607617,
+                },
+              ],
+            },
+            {
+              id: 44,
+              order: 4,
+              level_type: 'ASSESSMENT_LEVEL',
+              start_time: 2607652,
+              participant_level_score: 200,
+              assessment_type: 'TEST_ASSESSMENT',
+              events: [
+                {
+                  text: 'Level 4 started',
+                  time: 2607652,
+                  score: 330,
+                },
+                {
+                  text: 'Assessment answered.',
+                  time: 2627852,
+                  score: 230,
+                },
+                {
+                  text: 'Level 4 completed.',
+                  time: 2627854,
+                  score: 230,
+                },
+              ],
+            },
+            {
+              id: 45,
+              order: 5,
+              level_type: 'ASSESSMENT_LEVEL',
+              start_time: 2627888,
+              participant_level_score: 0,
+              assessment_type: 'QUESTIONNAIRE',
+              events: [
+                {
+                  text: 'Level 5 started',
+                  time: 2627888,
+                  score: 230,
+                },
+                {
+                  text: 'Assessment answered.',
+                  time: 2635462,
+                  score: 230,
+                },
+                {
+                  text: 'Level 5 completed.',
+                  time: 2635464,
+                  score: 230,
+                },
+              ],
+            },
+          ],
+        },
+      ],
+    },
+  };
+};
diff --git a/utils/json-server/routes.json b/utils/json-server/routes.json
new file mode 100644
index 0000000000000000000000000000000000000000..b0b2af174daac00a07dd7cbb147236302b59cbde
--- /dev/null
+++ b/utils/json-server/routes.json
@@ -0,0 +1,5 @@
+{
+  "/kypo2-rest-training/api/v1/visualizations/training-instances/:id/clustering": "/clustering",
+  "/kypo2-rest-training/api/v1/visualizations/training-instances/:id/table": "/table",
+  "/kypo2-rest-training/api/v1/visualizations/training-instances/:id/timeline": "/timeline"
+}
diff --git a/utils/json-server/server.js b/utils/json-server/server.js
new file mode 100644
index 0000000000000000000000000000000000000000..b35ed41c8b3938c77908f24cc7129c79cde17349
--- /dev/null
+++ b/utils/json-server/server.js
@@ -0,0 +1,12 @@
+module.exports = (req, res, next) => {
+  if (
+    req.method === "POST" ||
+    req.method === "PUT" ||
+    req.method === "DELETE" ||
+    req.method === "PATCH"
+  ) {
+    req.method = "GET";
+    req.query = req.body;
+  }
+  next();
+};