From a98ea0907ff4731a5d9fe8f5aa1168b8e70fd884 Mon Sep 17 00:00:00 2001
From: Marvin Borner
Date: Sun, 16 May 2021 13:38:55 +0200
Subject: Added heatmap

---
 assets/css/main.css    |   26 +-
 assets/js/main.js      |  358 ++++--
 assets/php/getData.php |    6 -
 example.json           | 3151 ++++++++++++++++++++++++++++++++++++++++++++++++
 index.html             |   16 +-
 5 files changed, 3393 insertions(+), 164 deletions(-)
 create mode 100644 example.json

diff --git a/assets/css/main.css b/assets/css/main.css
index 360f254..afb61a1 100644
--- a/assets/css/main.css
+++ b/assets/css/main.css
@@ -4,20 +4,18 @@
  * @copyright Marvin Borner 2019
  */
 
-html, body {
+html,
+body {
     padding: 8px;
-    color: #ffffff;
+    color: #fff;
     background-color: #141414;
     font-family: "Varela Round", sans-serif !important;
     text-rendering: optimizeLegibility !important;
 }
 
-canvas {
-    margin: 8px auto 0;
-    width: 100%;
-}
-
-.loading, .stats {
+.loading,
+.stats,
+.input {
     display: none;
 }
 
@@ -29,14 +27,6 @@ canvas {
     padding: 8px;
     margin-top: 8px;
     border: 1px solid white;
-}
-
-.heatMap {
-    border-collapse: collapse;
-}
-
-.heatMap td {
-    width: 2vw;
-    height: 2vw;
-    border: 1px solid white;
+    max-width: 800px;
+    margin: 8px auto;
 }
diff --git a/assets/js/main.js b/assets/js/main.js
index 52b450c..77dc22e 100755
--- a/assets/js/main.js
+++ b/assets/js/main.js
@@ -10,27 +10,51 @@ const loading = document.querySelector("#loading");
 const stats = document.querySelector("#stats");
 const toggle = document.querySelector("#toggle");
 
-cookie.addEventListener("keyup", (e) => {
-    if (e.key === "Enter") {
-        const request = new XMLHttpRequest();
-        request.onreadystatechange = () => {
-            if (request.readyState === 4 && request.status === 200) {
-                loading.style.display = "none";
-                stats.style.display = "block";
-                analyze(request.responseText);
-            } else if (request.readyState === 4 && request.status !== 200)
-                alert("Cookie is not valid!");
-        };
-        request.open("POST", "assets/php/getData.php", true);
-        request.setRequestHeader(
-            "Content-Type",
-            "application/x-www-form-urlencoded"
-        );
-        request.send("cookie=" + cookie.value);
-        loading.style.display = "block";
-        cookieWrap.style.display = "none";
-    }
-});
+function cookies() {
+    cookieWrap.style.display = "block";
+    cookie.addEventListener("keyup", (e) => {
+        if (e.key === "Enter") {
+            const request = new XMLHttpRequest();
+            request.onreadystatechange = () => {
+                if (request.readyState === 4 && request.status === 200) {
+                    loading.style.display = "none";
+                    stats.style.display = "block";
+                    analyze(request.responseText);
+                } else if (request.readyState === 4 && request.status !== 200) {
+                    alert("Cookie is not valid!");
+                }
+            };
+            request.open("POST", "assets/php/getData.php", true);
+            request.setRequestHeader(
+                "Content-Type",
+                "application/x-www-form-urlencoded"
+            );
+            request.send("cookie=" + cookie.value);
+            loading.style.display = "block";
+            cookieWrap.style.display = "none";
+        }
+    });
+}
+
+function tryDemo() {
+    const request = new XMLHttpRequest();
+    request.onreadystatechange = () => {
+        if (request.readyState === 4 && request.status === 200) {
+            cookieWrap.style.display = "none";
+            loading.style.display = "none";
+            stats.style.display = "block";
+            alert(
+                "Warning! You're using the example.json data. This is only for demonstration purposes and does NOT represent your real data!"
+            );
+            analyze(request.responseText);
+        } else if (request.readyState === 4 && request.status !== 200) {
+            console.log("Couldn't find demo, enabling cookie input");
+            cookies();
+        }
+    };
+    request.open("GET", "example.json", true);
+    request.send();
+}
 
 function analyze(data) {
     const filtered = {};
@@ -54,25 +78,12 @@ function analyze(data) {
         obj.count++;
     });
 
-    setSizes();
     drawTotalSpent(filtered);
     drawTimeline(filtered);
     drawTopTitles(filtered);
+    drawHeatmap(filtered);
 
     toggle.onclick = () => drawTopTitles(filtered);
-
-    console.log(filtered);
-}
-
-function setSizes() {
-    const elements = document.getElementsByTagName("canvas");
-    for (const elem of elements) {
-        elem.setAttribute(
-            "width",
-            document.querySelector(".stats div").offsetWidth
-        );
-        elem.setAttribute("height", window.innerHeight / 2 + 200);
-    }
 }
 
 function drawTotalSpent(data) {
@@ -80,10 +91,10 @@ function drawTotalSpent(data) {
         .map((key) => data[key].duration)
         .reduce((a, b) => a + b);
     document.querySelector("#totalSpent").innerHTML = `
-  Days: ${Math.floor(totalHours / 24)};
-  Hours: ${Math.floor(totalHours)};
-  Minutes: ${Math.round(totalHours * 60)};
-  Seconds: ${Math.round(totalHours * 60 * 60)}`;
+    ${Math.floor(totalHours / 24)} days or
+    ${Math.floor(totalHours)} hours or
+    ${Math.round(totalHours * 60)} minutes or
+    ${Math.round(totalHours * 60 * 60)} seconds!`;
 }
 
 function drawTimeline(data) {
@@ -97,118 +108,201 @@ function drawTimeline(data) {
     );
 
     const ctx = document.getElementById("hourChart");
-    new Chart(ctx, {
-        type: "line",
-        data: {
-            labels: [...Array(24).keys()],
-            datasets: [
-                {
-                    data: occurrence,
-                    borderColor: "#e50914",
-                },
-            ],
+    const chart = new ApexCharts(ctx, {
+        chart: {
+            type: "line",
+            foreColor: "#fff",
+            background: "#141414",
         },
-        options: {
-            responsive: false,
-            maintainAspectRatio: true,
-            legend: {
-                display: false,
-            },
-            scales: {
-                xAxes: [
-                    {
-                        gridLines: {
-                            color: "#424242",
-                        },
-                    },
-                ],
-                yAxes: [
-                    {
-                        gridLines: {
-                            color: "#424242",
-                        },
-                    },
-                ],
+        theme: {
+            mode: "dark",
+        },
+        series: [
+            {
+                name: "Title count at hour",
+                data: occurrence,
             },
+        ],
+        stroke: {
+            curve: "smooth",
+        },
+        dataLabels: {
+            enabled: false,
+        },
+        xaxis: {
+            categories: [...Array(24).keys()],
         },
     });
-
-    console.log(occurrence);
+    chart.render();
 }
 
 let previous;
-
+let limited = false;
 function drawTopTitles(data) {
-    // Toggle layout
-    toggle.setAttribute(
-        "data-current",
-        toggle.getAttribute("data-current") === "bar" ? "pie" : "bar"
-    );
+    limited = !limited;
+    toggle.innerText = limited ? "View all" : "View less";
+    Array.prototype.limit = function () {
+        if (limited) return this.slice(0, 20);
+        return this;
+    };
+
     if (previous) previous.destroy();
 
     const ctx = document.getElementById("topChart");
-    previous = new Chart(ctx, {
-        type: toggle.getAttribute("data-current"),
-        data: {
-            labels: Object.keys(data).sort(
-                (a, b) => data[b].duration - data[a].duration
-            ),
-            datasets: [
-                {
-                    data: Object.keys(data)
-                        .map((key) => +data[key].duration.toFixed(2))
-                        .sort((a, b) => b - a),
-                    borderColor: "#424242",
-                    backgroundColor: Array.from(
-                        { length: Object.keys(data).length },
-                        () =>
-                            "#" +
-                            (
-                                "00000" +
-                                ((Math.random() * (1 << 24)) | 0).toString(16)
-                            ).slice(-6)
-                    ),
-                },
-            ],
+    previous = new ApexCharts(ctx, {
+        chart: {
+            type: "bar",
+            foreColor: "#fff",
+            background: "#141414",
+        },
+        theme: {
+            mode: "dark",
+        },
+        series: [
+            {
+                name: "Time in hours",
+                data: Object.keys(data)
+                    .map((key) => +data[key].duration.toFixed(2))
+                    .sort((a, b) => b - a)
+                    .limit(),
+            },
+        ],
+        dataLabels: {
+            enabled: false,
+        },
+        xaxis: {
+            categories: Object.keys(data)
+                .sort((a, b) => data[b].duration - data[a].duration)
+                .limit(),
         },
-        options: {
-            responsive: false,
-            maintainAspectRatio: true,
-            animation: {
-                animateScale: true,
-                animateRotate: true,
+        plotOptions: {
+            bar: {
+                horizontal: false,
             },
-            legend: {
-                display: false,
+            donut: {
+                customScale: 0.4,
             },
-            scales: {
-                xAxes: [
-                    {
-                        gridLines: {
-                            display:
-                                toggle.getAttribute("data-current") === "bar",
-                            color: "#424242",
+        },
+    });
+    previous.render();
+}
+
+// TODO: There may be a bug in the first week in January
+function drawHeatmap(data) {
+    Date.prototype.getWeek = function () {
+        var d = new Date(
+            Date.UTC(this.getFullYear(), this.getMonth(), this.getDate())
+        );
+        d.setUTCDate(d.getUTCDate() - d.getUTCDay());
+        var yearStart = new Date(Date.UTC(d.getUTCFullYear(), 0, 1));
+        return Math.ceil(((d - yearStart) / 86400000 + 1) / 7);
+    };
+
+    const currentYear = new Date().getFullYear();
+    const currentWeek = new Date().getWeek();
+
+    const days = [[], [], [], [], [], [], []];
+    Object.keys(data).forEach((elem) => {
+        data[elem].dates.forEach((date) => {
+            if (date.getFullYear() != currentYear) return;
+
+            const day = date.getDay();
+            const week = date.getWeek();
+
+            if (week > currentWeek) return;
+
+            if (!days[day][week]) days[day][week] = 0;
+            days[day][week]++;
+        });
+    });
+
+    for (let i = 0; i < days.length; i++) {
+        for (let j = 0; j < days[i].length; j++) {
+            if (!days[i][j]) days[i][j] = 0;
+        }
+    }
+
+    const ctx = document.getElementById("heatMap");
+    const chart = new ApexCharts(ctx, {
+        chart: {
+            type: "heatmap",
+            foreColor: "#fff",
+            background: "#141414",
+        },
+        theme: {
+            mode: "dark",
+        },
+        series: [
+            {
+                name: "Saturday",
+                data: days[6],
+            },
+            {
+                name: "Friday",
+                data: days[5],
+            },
+            {
+                name: "Thursday",
+                data: days[4],
+            },
+            {
+                name: "Wednesday",
+                data: days[3],
+            },
+            {
+                name: "Tuesday",
+                data: days[2],
+            },
+            {
+                name: "Monday",
+                data: days[1],
+            },
+            {
+                name: "Sunday",
+                data: days[0],
+            },
+        ],
+        plotOptions: {
+            heatmap: {
+                colorScale: {
+                    ranges: [
+                        {
+                            from: 0,
+                            to: 5,
+                            color: "#00a100",
+                            name: "low",
                         },
-                        ticks: {
-                            display:
-                                toggle.getAttribute("data-current") === "bar",
+                        {
+                            from: 6,
+                            to: 10,
+                            color: "#128fd9",
+                            name: "medium",
                         },
-                    },
-                ],
-                yAxes: [
-                    {
-                        gridLines: {
-                            display:
-                                toggle.getAttribute("data-current") === "bar",
-                            color: "#424242",
+                        {
+                            from: 10,
+                            to: 20,
+                            color: "#ffb200",
+                            name: "high",
                         },
-                        ticks: {
-                            display:
-                                toggle.getAttribute("data-current") === "bar",
+                        {
+                            from: 21,
+                            to: 100,
+                            color: "#ff5100",
+                            name: "very high",
                         },
-                    },
-                ],
+                        {
+                            from: 101,
+                            to: 1000,
+                            color: "#e50914",
+                            name: "wtf",
+                        },
+                    ],
+                },
             },
         },
     });
+    chart.render();
 }
+
+Apex.colors = ["#e50914"];
+tryDemo();
diff --git a/assets/php/getData.php b/assets/php/getData.php
index c392fc5..a236d49 100755
--- a/assets/php/getData.php
+++ b/assets/php/getData.php
@@ -6,14 +6,8 @@
  * @copyright Marvin Borner 2018
  */
 
-$debug = true;
 $cookie = $_POST['cookie'];
 
-if ($debug) {
-    print_r(file_get_contents("../../debug.json"));
-    die();
-}
-
 if (!isset($cookie)) {
     http_response_code(404);
     die();
diff --git a/example.json b/example.json
new file mode 100644
index 0000000..b0db335
--- /dev/null
+++ b/example.json
@@ -0,0 +1,3151 @@
+[
+  [
+    {
+      "duration": 1182,
+      "date": 1621162627042,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1187,
+      "date": 1621112475579,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1231,
+      "date": 1621111678979,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1235,
+      "date": 1621111226965,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1265,
+      "date": 1621099622915,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1278,
+      "date": 1621098787302,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1170,
+      "date": 1621098068950,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1152,
+      "date": 1621097336480,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1202,
+      "date": 1621028805836,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1175,
+      "date": 1621028046277,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1232,
+      "date": 1621027205619,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1139,
+      "date": 1621026456091,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1255,
+      "date": 1621025641643,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1244,
+      "date": 1621024819502,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1276,
+      "date": 1621023938980,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1276,
+      "date": 1621023115240,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1197,
+      "date": 1621022329342,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1230,
+      "date": 1621021879278,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1283,
+      "date": 1621007974423,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1181,
+      "date": 1621007153260,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1151,
+      "date": 1620982992961,
+      "seriesTitle": "Wizards of Dos"
+    }
+  ],
+  [
+    {
+      "duration": 1179,
+      "date": 1620982230482,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1198,
+      "date": 1620981443098,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1214,
+      "date": 1620980664337,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1248,
+      "date": 1620979901701,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1240,
+      "date": 1620946506271,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1187,
+      "date": 1620945337671,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1256,
+      "date": 1620944549492,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1262,
+      "date": 1620936199348,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1263,
+      "date": 1620935368783,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1284,
+      "date": 1620934617525,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1188,
+      "date": 1620933848709,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1276,
+      "date": 1620916459097,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1283,
+      "date": 1620915679038,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1264,
+      "date": 1620915623727,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1287,
+      "date": 1620912551401,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1251,
+      "date": 1620909886722,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1171,
+      "date": 1620909128221,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1277,
+      "date": 1620908289233,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1261,
+      "date": 1620907281731,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1276,
+      "date": 1620906454550,
+      "seriesTitle": "Wizards of Dos"
+    }
+  ],
+  [
+    {
+      "duration": 1283,
+      "date": 1620859539970,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1288,
+      "date": 1620857310129,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1152,
+      "date": 1620856561279,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1286,
+      "date": 1620855439756,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1215,
+      "date": 1620854500904,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1253,
+      "date": 1620852511565,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1275,
+      "date": 1620851675529,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1286,
+      "date": 1620850841750,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1228,
+      "date": 1620811940416,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1229,
+      "date": 1620774720250,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1282,
+      "date": 1620774515393,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1244,
+      "date": 1620752879384,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1177,
+      "date": 1620752119991,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1232,
+      "date": 1620751700210,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1280,
+      "date": 1620748964664,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1265,
+      "date": 1620748141949,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1190,
+      "date": 1620747361520,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1283,
+      "date": 1620747137793,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1288,
+      "date": 1620726476745,
+      "seriesTitle": "Wizards of Dos"
+    }
+  ],
+  [
+    {
+      "duration": 1202,
+      "date": 1620725682141,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1204,
+      "date": 1620724040475,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1185,
+      "date": 1620723224974,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1285,
+      "date": 1620687479434,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1288,
+      "date": 1620686305454,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1184,
+      "date": 1620685511028,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1270,
+      "date": 1620653987276,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1242,
+      "date": 1620652763518,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1253,
+      "date": 1620651383041,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1285,
+      "date": 1620650174054,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1261,
+      "date": 1620589807053,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1284,
+      "date": 1620588977568,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1231,
+      "date": 1620588187032,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1199,
+      "date": 1620582243679,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1289,
+      "date": 1620580519329,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1282,
+      "date": 1620578947426,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1290,
+      "date": 1620577900663,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1220,
+      "date": 1620577810837,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1205,
+      "date": 1620566825600,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1259,
+      "date": 1620565928976,
+      "seriesTitle": "Wizards of Dos"
+    }
+  ],
+  [
+    {
+      "duration": 1152,
+      "date": 1620565488828,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1290,
+      "date": 1620556878635,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1292,
+      "date": 1620422877754,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1232,
+      "date": 1620421998064,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1172,
+      "date": 1620410709333,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1287,
+      "date": 1620409789760,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1250,
+      "date": 1620408407143,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1286,
+      "date": 1620407474314,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1211,
+      "date": 1620406639767,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1209,
+      "date": 1620405842302,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1277,
+      "date": 1620404978803,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1207,
+      "date": 1620404152030,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1258,
+      "date": 1620396298623,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1285,
+      "date": 1620394778611,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1229,
+      "date": 1620393542600,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1260,
+      "date": 1620310591532,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1279,
+      "date": 1620306192538,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1126,
+      "date": 1620305105833,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1217,
+      "date": 1620289356543,
+      "seriesTitle": "Wizards of Dos"
+    }
+  ],
+  [
+    {
+      "duration": 1279,
+      "date": 1620289324485,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1170,
+      "date": 1620285718757,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1188,
+      "date": 1620284937741,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1153,
+      "date": 1620248653942,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1254,
+      "date": 1620247785845,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1171,
+      "date": 1620246422385,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1175,
+      "date": 1620245982050,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1266,
+      "date": 1620210678294,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1275,
+      "date": 1620209825448,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1224,
+      "date": 1620207341350,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1281,
+      "date": 1620206349449,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1292,
+      "date": 1620205832779,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1274,
+      "date": 1620168902307,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1112,
+      "date": 1620168634972,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1292,
+      "date": 1620148756932,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1208,
+      "date": 1620147918886,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1220,
+      "date": 1620147112325,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1230,
+      "date": 1620146278444,
+      "seriesTitle": "Wizards of Dos"
+    }
+  ],
+  [
+    {
+      "duration": 1273,
+      "date": 1620145441855,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1275,
+      "date": 1620143855581,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1253,
+      "date": 1620143031057,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1290,
+      "date": 1620142123565,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1284,
+      "date": 1620141236596,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1276,
+      "date": 1620140393998,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1260,
+      "date": 1620140091880,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1277,
+      "date": 1620124062760,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1258,
+      "date": 1620123239467,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1206,
+      "date": 1620122440815,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1267,
+      "date": 1620121753756,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1254,
+      "date": 1620118124747,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1197,
+      "date": 1620080836892,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1278,
+      "date": 1620079994553,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1271,
+      "date": 1620079144445,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1269,
+      "date": 1620052067867,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1303,
+      "date": 1620051764128,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1205,
+      "date": 1620037669357,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1185,
+      "date": 1620036936319,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1309,
+      "date": 1620034072219,
+      "seriesTitle": "Wizards of Dos"
+    }
+  ],
+  [
+    {
+      "duration": 1200,
+      "date": 1619996401962,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1298,
+      "date": 1619995555640,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1202,
+      "date": 1619994764087,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1315,
+      "date": 1619993950012,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1236,
+      "date": 1619993138390,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1166,
+      "date": 1619976278454,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1206,
+      "date": 1619975622911,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1269,
+      "date": 1619909566100,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1257,
+      "date": 1619908736445,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1206,
+      "date": 1619907949879,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1235,
+      "date": 1619907144567,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1235,
+      "date": 1619906913555,
+      "seriesTitle": "How I Wrote Your Code"
+    },
+    {
+      "duration": 2562,
+      "date": 1619906788421,
+      "seriesTitle": "OSDev for Beginners"
+    },
+    {
+      "duration": 2404,
+      "date": 1619906754046,
+      "seriesTitle": "OSDev for Beginners"
+    },
+    {
+      "duration": 3139,
+      "date": 1619906636132,
+      "seriesTitle": "Magic for Noobs"
+    },
+    {
+      "duration": 1318,
+      "date": 1619822105126,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1263,
+      "date": 1619821275762,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1368,
+      "date": 1619821153279,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1311,
+      "date": 1619818400074,
+      "seriesTitle": "How I Wrote Your Code"
+    },
+    {
+      "duration": 1311,
+      "date": 1619817321275,
+      "seriesTitle": "How I Wrote Your Code"
+    }
+  ],
+  [
+    {
+      "duration": 1384,
+      "date": 1619795562411,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1190,
+      "date": 1619794709234,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1224,
+      "date": 1619793910512,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1189,
+      "date": 1619793074730,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1140,
+      "date": 1619792247218,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1209,
+      "date": 1619791485855,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1288,
+      "date": 1619791317689,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1173,
+      "date": 1619777055429,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1202,
+      "date": 1619775490316,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1264,
+      "date": 1619737881472,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1168,
+      "date": 1619737545743,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1204,
+      "date": 1619736225452,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1190,
+      "date": 1619735473648,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1155,
+      "date": 1619734758778,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1244,
+      "date": 1619714738634,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1214,
+      "date": 1619713939540,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1259,
+      "date": 1619713912038,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1150,
+      "date": 1619702559474,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1149,
+      "date": 1619701776116,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1128,
+      "date": 1619691740490,
+      "seriesTitle": "Wizards of Dos"
+    }
+  ],
+  [
+    {
+      "duration": 1135,
+      "date": 1619690918776,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1220,
+      "date": 1619651203634,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1265,
+      "date": 1619649890366,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1233,
+      "date": 1619649106834,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1298,
+      "date": 1619648272459,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1205,
+      "date": 1619647431925,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1145,
+      "date": 1619646685072,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1231,
+      "date": 1619645709365,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1264,
+      "date": 1619644622046,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1239,
+      "date": 1619625689596,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1214,
+      "date": 1619624606173,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1228,
+      "date": 1619623679161,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1129,
+      "date": 1619622940516,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1258,
+      "date": 1619622139405,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1163,
+      "date": 1619618338977,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1274,
+      "date": 1619617462841,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1219,
+      "date": 1619616656848,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1185,
+      "date": 1619614772879,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1284,
+      "date": 1619613872691,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1135,
+      "date": 1619613130196,
+      "seriesTitle": "Wizards of Dos"
+    }
+  ],
+  [
+    {
+      "duration": 1129,
+      "date": 1619612215349,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1179,
+      "date": 1619611445789,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1272,
+      "date": 1619611199543,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1137,
+      "date": 1619569503848,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1247,
+      "date": 1619568667852,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1221,
+      "date": 1619567868802,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1274,
+      "date": 1619566987313,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1239,
+      "date": 1619565099165,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1170,
+      "date": 1619564318368,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1151,
+      "date": 1619563595789,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1197,
+      "date": 1619562749452,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1181,
+      "date": 1619561926621,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1147,
+      "date": 1619560828600,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 2384,
+      "date": 1619535010184,
+      "seriesTitle": "OSDev for Beginners"
+    },
+    {
+      "duration": 2440,
+      "date": 1619534597829,
+      "seriesTitle": "OSDev for Beginners"
+    },
+    {
+      "duration": 3635,
+      "date": 1619392416453,
+      "seriesTitle": "CS Crowd"
+    },
+    {
+      "duration": 3365,
+      "date": 1619392364284,
+      "seriesTitle": "CS Crowd"
+    },
+    {
+      "duration": 3563,
+      "date": 1619307300615,
+      "seriesTitle": "CS Crowd"
+    },
+    {
+      "duration": 3225,
+      "date": 1619299796031,
+      "seriesTitle": "CS Crowd"
+    },
+    {
+      "duration": 3535,
+      "date": 1619296308905,
+      "seriesTitle": "CS Crowd"
+    }
+  ],
+  [
+    {
+      "duration": 3267,
+      "date": 1619293158307,
+      "seriesTitle": "CS Crowd"
+    },
+    {
+      "duration": 3591,
+      "date": 1619281036971,
+      "seriesTitle": "CS Crowd"
+    },
+    {
+      "duration": 3579,
+      "date": 1619276544766,
+      "seriesTitle": "CS Crowd"
+    },
+    {
+      "duration": 3305,
+      "date": 1619273169892,
+      "seriesTitle": "CS Crowd"
+    },
+    {
+      "duration": 3515,
+      "date": 1619269156063,
+      "seriesTitle": "CS Crowd"
+    },
+    {
+      "duration": 3579,
+      "date": 1619268513994,
+      "seriesTitle": "CS Crowd"
+    },
+    {
+      "duration": 3343,
+      "date": 1619220510484,
+      "seriesTitle": "CS Crowd"
+    },
+    {
+      "duration": 3766,
+      "date": 1619214023533,
+      "seriesTitle": "CS Crowd"
+    },
+    {
+      "duration": 3313,
+      "date": 1619209258122,
+      "seriesTitle": "CS Crowd"
+    },
+    {
+      "duration": 3239,
+      "date": 1619208372293,
+      "seriesTitle": "CS Crowd"
+    },
+    {
+      "duration": 3473,
+      "date": 1619196820897,
+      "seriesTitle": "CS Crowd"
+    },
+    {
+      "duration": 3469,
+      "date": 1619192675509,
+      "seriesTitle": "CS Crowd"
+    },
+    {
+      "duration": 3453,
+      "date": 1619189117330,
+      "seriesTitle": "CS Crowd"
+    },
+    {
+      "duration": 3621,
+      "date": 1619129449864,
+      "seriesTitle": "CS Crowd"
+    },
+    {
+      "duration": 3063,
+      "date": 1619126452136,
+      "seriesTitle": "CS Crowd"
+    },
+    {
+      "duration": 4506,
+      "date": 1619117691582,
+      "seriesTitle": "CS Crowd"
+    },
+    {
+      "duration": 3331,
+      "date": 1619106406004,
+      "seriesTitle": "CS Crowd"
+    },
+    {
+      "duration": 3623,
+      "date": 1619102917734,
+      "seriesTitle": "CS Crowd"
+    },
+    {
+      "duration": 3541,
+      "date": 1619099397577,
+      "seriesTitle": "CS Crowd"
+    },
+    {
+      "duration": 3363,
+      "date": 1619095423222,
+      "seriesTitle": "CS Crowd"
+    }
+  ],
+  [
+    {
+      "duration": 3305,
+      "date": 1619092113999,
+      "seriesTitle": "CS Crowd"
+    },
+    {
+      "duration": 5297,
+      "date": 1619086867698,
+      "seriesTitle": "CS Crowd"
+    },
+    {
+      "duration": 3597,
+      "date": 1619048399924,
+      "seriesTitle": "CS Crowd"
+    },
+    {
+      "duration": 3327,
+      "date": 1619043306306,
+      "seriesTitle": "CS Crowd"
+    },
+    {
+      "duration": 3547,
+      "date": 1619020991157,
+      "seriesTitle": "CS Crowd"
+    },
+    {
+      "duration": 3337,
+      "date": 1619017177754,
+      "seriesTitle": "CS Crowd"
+    },
+    {
+      "duration": 3601,
+      "date": 1619016850349,
+      "seriesTitle": "CS Crowd"
+    },
+    {
+      "duration": 3829,
+      "date": 1618961908464,
+      "seriesTitle": "CS Crowd"
+    },
+    {
+      "duration": 3133,
+      "date": 1618956505142,
+      "seriesTitle": "CS Crowd"
+    },
+    {
+      "duration": 3073,
+      "date": 1618934033338,
+      "seriesTitle": "CS Crowd"
+    },
+    {
+      "duration": 3447,
+      "date": 1618919785457,
+      "seriesTitle": "CS Crowd"
+    },
+    {
+      "duration": 3399,
+      "date": 1618876583759,
+      "seriesTitle": "CS Crowd"
+    },
+    {
+      "duration": 3523,
+      "date": 1618873135738,
+      "seriesTitle": "CS Crowd"
+    },
+    {
+      "duration": 3553,
+      "date": 1618850205485,
+      "seriesTitle": "CS Crowd"
+    },
+    {
+      "duration": 3515,
+      "date": 1618849407088,
+      "seriesTitle": "CS Crowd"
+    },
+    {
+      "duration": 3377,
+      "date": 1618790145699,
+      "seriesTitle": "CS Crowd"
+    },
+    {
+      "duration": 3489,
+      "date": 1618784648680,
+      "seriesTitle": "CS Crowd"
+    },
+    {
+      "duration": 3431,
+      "date": 1618779750316,
+      "seriesTitle": "CS Crowd"
+    },
+    {
+      "duration": 3473,
+      "date": 1618776380399,
+      "seriesTitle": "CS Crowd"
+    },
+    {
+      "duration": 3559,
+      "date": 1618773981682,
+      "seriesTitle": "CS Crowd"
+    }
+  ],
+  [
+    {
+      "duration": 3559,
+      "date": 1618762480471,
+      "seriesTitle": "CS Crowd"
+    },
+    {
+      "duration": 3585,
+      "date": 1618757885281,
+      "seriesTitle": "CS Crowd"
+    },
+    {
+      "duration": 3331,
+      "date": 1618698398045,
+      "seriesTitle": "CS Crowd"
+    },
+    {
+      "duration": 3299,
+      "date": 1618694744930,
+      "seriesTitle": "CS Crowd"
+    },
+    {
+      "duration": 3443,
+      "date": 1618694419216,
+      "seriesTitle": "CS Crowd"
+    },
+    {
+      "duration": 3455,
+      "date": 1618678746998,
+      "seriesTitle": "CS Crowd"
+    },
+    {
+      "duration": 3405,
+      "date": 1618656129084,
+      "seriesTitle": "CS Crowd"
+    },
+    {
+      "duration": 3337,
+      "date": 1618612013618,
+      "seriesTitle": "CS Crowd"
+    },
+    {
+      "duration": 3573,
+      "date": 1618611458071,
+      "seriesTitle": "CS Crowd"
+    },
+    {
+      "duration": 1311,
+      "date": 1618565526996,
+      "seriesTitle": "How I Wrote Your Code"
+    },
+    {
+      "duration": 2522,
+      "date": 1618504918381,
+      "seriesTitle": "OSDev for Beginners"
+    },
+    {
+      "duration": 2582,
+      "date": 1618404128194,
+      "seriesTitle": "OSDev for Beginners"
+    },
+    {
+      "duration": 1329,
+      "date": 1618386125162,
+      "seriesTitle": "How I Wrote Your Code"
+    },
+    {
+      "duration": 1399,
+      "date": 1618386101866,
+      "seriesTitle": "1337 f0r n00b5"
+    },
+    {
+      "duration": 1439,
+      "date": 1618386083750,
+      "seriesTitle": "1337 f0r n00b5"
+    },
+    {
+      "duration": 1479,
+      "date": 1618386030532,
+      "seriesTitle": "1337 f0r n00b5"
+    },
+    {
+      "duration": 1419,
+      "date": 1618386027821,
+      "seriesTitle": "1337 f0r n00b5"
+    },
+    {
+      "duration": 2594,
+      "date": 1618328894659,
+      "seriesTitle": "OSDev for Beginners"
+    },
+    {
+      "duration": 2506,
+      "date": 1618328328492,
+      "seriesTitle": "OSDev for Beginners"
+    },
+    {
+      "duration": 2530,
+      "date": 1618315964897,
+      "seriesTitle": "OSDev for Beginners"
+    }
+  ],
+  [
+    {
+      "duration": 2480,
+      "date": 1618240734908,
+      "seriesTitle": "OSDev for Beginners"
+    },
+    {
+      "duration": 2352,
+      "date": 1618231464176,
+      "seriesTitle": "OSDev for Beginners"
+    },
+    {
+      "duration": 2402,
+      "date": 1618229057933,
+      "seriesTitle": "OSDev for Beginners"
+    },
+    {
+      "duration": 2488,
+      "date": 1618228574072,
+      "seriesTitle": "OSDev for Beginners"
+    },
+    {
+      "duration": 2592,
+      "date": 1618180724909,
+      "seriesTitle": "OSDev for Beginners"
+    },
+    {
+      "duration": 3572,
+      "date": 1618175354900,
+      "seriesTitle": "DIY Phone in 3 steps"
+    },
+    {
+      "duration": 2996,
+      "date": 1618172154778,
+      "seriesTitle": "DIY Phone in 3 steps"
+    },
+    {
+      "duration": 3280,
+      "date": 1618168675159,
+      "seriesTitle": "DIY Phone in 3 steps"
+    },
+    {
+      "duration": 3188,
+      "date": 1618155327491,
+      "seriesTitle": "DIY Phone in 3 steps"
+    },
+    {
+      "duration": 3070,
+      "date": 1618152000136,
+      "seriesTitle": "DIY Phone in 3 steps"
+    },
+    {
+      "duration": 2936,
+      "date": 1618151127959,
+      "seriesTitle": "DIY Phone in 3 steps"
+    },
+    {
+      "duration": 3046,
+      "date": 1618142523630,
+      "seriesTitle": "DIY Phone in 3 steps"
+    },
+    {
+      "duration": 3078,
+      "date": 1618096661702,
+      "seriesTitle": "DIY Phone in 3 steps"
+    },
+    {
+      "duration": 3176,
+      "date": 1618092866310,
+      "seriesTitle": "DIY Phone in 3 steps"
+    },
+    {
+      "duration": 3106,
+      "date": 1618089752399,
+      "seriesTitle": "DIY Phone in 3 steps"
+    },
+    {
+      "duration": 2986,
+      "date": 1618089703192,
+      "seriesTitle": "DIY Phone in 3 steps"
+    },
+    {
+      "duration": 2362,
+      "date": 1618007274877,
+      "seriesTitle": "OSDev for Beginners"
+    },
+    {
+      "duration": 2582,
+      "date": 1617922198071,
+      "seriesTitle": "OSDev for Beginners"
+    },
+    {
+      "duration": 2538,
+      "date": 1617921688663,
+      "seriesTitle": "OSDev for Beginners"
+    },
+    {
+      "duration": 3216,
+      "date": 1617917452420,
+      "seriesTitle": "Vegan Lifestyle"
+    }
+  ],
+  [
+    {
+      "duration": 2670,
+      "date": 1617916810902,
+      "seriesTitle": "Vegan Lifestyle"
+    },
+    {
+      "duration": 2942,
+      "date": 1617910770346,
+      "seriesTitle": "Vegan Lifestyle"
+    },
+    {
+      "duration": 3300,
+      "date": 1617896534631,
+      "seriesTitle": "Vegan Lifestyle"
+    },
+    {
+      "duration": 3096,
+      "date": 1617892819921,
+      "seriesTitle": "Vegan Lifestyle"
+    },
+    {
+      "duration": 3356,
+      "date": 1617887541158,
+      "seriesTitle": "Vegan Lifestyle"
+    },
+    {
+      "duration": 2510,
+      "date": 1617839267790,
+      "seriesTitle": "OSDev for Beginners"
+    },
+    {
+      "duration": 3308,
+      "date": 1617831151043,
+      "seriesTitle": "Vegan Lifestyle"
+    },
+    {
+      "duration": 3458,
+      "date": 1617827442193,
+      "seriesTitle": "Vegan Lifestyle"
+    },
+    {
+      "duration": 1311,
+      "date": 1617729989635,
+      "seriesTitle": "Why JS sucks"
+    },
+    {
+      "duration": 1312,
+      "date": 1617728063808,
+      "seriesTitle": "Why JS sucks"
+    },
+    {
+      "duration": 1313,
+      "date": 1617728022025,
+      "seriesTitle": "Why JS sucks"
+    },
+    {
+      "duration": 1310,
+      "date": 1617727854806,
+      "seriesTitle": "Why JS sucks"
+    },
+    {
+      "duration": 2464,
+      "date": 1617720679556,
+      "seriesTitle": "OSDev for Beginners"
+    },
+    {
+      "duration": 2564,
+      "date": 1617717139791,
+      "seriesTitle": "OSDev for Beginners"
+    },
+    {
+      "duration": 2350,
+      "date": 1617717096409,
+      "seriesTitle": "OSDev for Beginners"
+    },
+    {
+      "duration": 1307,
+      "date": 1617668910710,
+      "seriesTitle": "How I Wrote Your Code"
+    },
+    {
+      "duration": 1309,
+      "date": 1617668901805,
+      "seriesTitle": "How I Wrote Your Code"
+    },
+    {
+      "duration": 3846,
+      "date": 1617666662773,
+      "seriesTitle": "Parry Hotter"
+    }
+  ],
+  [
+    {
+      "duration": 3063,
+      "date": 1617625437372,
+      "seriesTitle": "Parry Hotter"
+    },
+    {
+      "duration": 2342,
+      "date": 1617579133517,
+      "seriesTitle": "OSDev for Beginners"
+    },
+    {
+      "duration": 2554,
+      "date": 1617492643902,
+      "seriesTitle": "OSDev for Beginners"
+    },
+    {
+      "duration": 2590,
+      "date": 1617492634117,
+      "seriesTitle": "OSDev for Beginners"
+    },
+    {
+      "duration": 3494,
+      "date": 1617407093572,
+      "seriesTitle": "Parry Hotter"
+    },
+    {
+      "duration": 3327,
+      "date": 1617377441416,
+      "seriesTitle": "Parry Hotter"
+    },
+    {
+      "duration": 3692,
+      "date": 1617320975392,
+      "seriesTitle": "Parry Hotter"
+    },
+    {
+      "duration": 3496,
+      "date": 1617300015445,
+      "seriesTitle": "Parry Hotter"
+    },
+    {
+      "duration": 3588,
+      "date": 1617284822701,
+      "seriesTitle": "Parry Hotter"
+    },
+    {
+      "duration": 3618,
+      "date": 1617281579301,
+      "seriesTitle": "Parry Hotter"
+    },
+    {
+      "duration": 3654,
+      "date": 1617268963898,
+      "seriesTitle": "Parry Hotter"
+    },
+    {
+      "duration": 3333,
+      "date": 1617268860521,
+      "seriesTitle": "Parry Hotter"
+    },
+    {
+      "duration": 3526,
+      "date": 1617233008182,
+      "seriesTitle": "Parry Hotter"
+    },
+    {
+      "duration": 3464,
+      "date": 1617224693991,
+      "seriesTitle": "Parry Hotter"
+    },
+    {
+      "duration": 3540,
+      "date": 1617221913705,
+      "seriesTitle": "Parry Hotter"
+    },
+    {
+      "duration": 3504,
+      "date": 1617206810904,
+      "seriesTitle": "Parry Hotter"
+    },
+    {
+      "duration": 3417,
+      "date": 1617203255459,
+      "seriesTitle": "Parry Hotter"
+    },
+    {
+      "duration": 3654,
+      "date": 1617199047243,
+      "seriesTitle": "Parry Hotter"
+    },
+    {
+      "duration": 3730,
+      "date": 1617195283741,
+      "seriesTitle": "Parry Hotter"
+    },
+    {
+      "duration": 3245,
+      "date": 1617192491545,
+      "seriesTitle": "Parry Hotter"
+    }
+  ],
+  [
+    {
+      "duration": 3484,
+      "date": 1617183550968,
+      "seriesTitle": "Parry Hotter"
+    },
+    {
+      "duration": 3253,
+      "date": 1617180498084,
+      "seriesTitle": "Parry Hotter"
+    },
+    {
+      "duration": 3476,
+      "date": 1617142630887,
+      "seriesTitle": "Parry Hotter"
+    },
+    {
+      "duration": 3826,
+      "date": 1617123199008,
+      "seriesTitle": "Parry Hotter"
+    },
+    {
+      "duration": 3702,
+      "date": 1617094610220,
+      "seriesTitle": "Parry Hotter"
+    },
+    {
+      "duration": 3393,
+      "date": 1617056398641,
+      "seriesTitle": "Parry Hotter"
+    },
+    {
+      "duration": 3321,
+      "date": 1617056247079,
+      "seriesTitle": "Parry Hotter"
+    },
+    {
+      "duration": 3355,
+      "date": 1617035721546,
+      "seriesTitle": "Parry Hotter"
+    },
+    {
+      "duration": 3834,
+      "date": 1617032002390,
+      "seriesTitle": "Parry Hotter"
+    },
+    {
+      "duration": 3674,
+      "date": 1617026319838,
+      "seriesTitle": "Parry Hotter"
+    },
+    {
+      "duration": 3401,
+      "date": 1617023299470,
+      "seriesTitle": "Parry Hotter"
+    },
+    {
+      "duration": 3331,
+      "date": 1616951532587,
+      "seriesTitle": "Parry Hotter"
+    },
+    {
+      "duration": 3005,
+      "date": 1616881931384,
+      "seriesTitle": "Parry Hotter"
+    },
+    {
+      "duration": 3245,
+      "date": 1616795447744,
+      "seriesTitle": "Parry Hotter"
+    },
+    {
+      "duration": 3630,
+      "date": 1616793771185,
+      "seriesTitle": "Parry Hotter"
+    },
+    {
+      "duration": 3462,
+      "date": 1616769811843,
+      "seriesTitle": "Parry Hotter"
+    },
+    {
+      "duration": 3439,
+      "date": 1616754522967,
+      "seriesTitle": "Parry Hotter"
+    },
+    {
+      "duration": 3716,
+      "date": 1616712666687,
+      "seriesTitle": "Parry Hotter"
+    },
+    {
+      "duration": 1311,
+      "date": 1616684419141,
+      "seriesTitle": "How I Wrote Your Code"
+    },
+    {
+      "duration": 1311,
+      "date": 1616683287991,
+      "seriesTitle": "How I Wrote Your Code"
+    }
+  ],
+  [
+    {
+      "duration": 1114,
+      "date": 1616596467949,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 1187,
+      "date": 1616595308506,
+      "seriesTitle": "Wizards of Dos"
+    },
+    {
+      "duration": 2404,
+      "date": 1616595283881,
+      "seriesTitle": "WHY?"
+    },
+    {
+      "duration": 1309,
+      "date": 1616521523767,
+      "seriesTitle": "How I Wrote Your Code"
+    },
+    {
+      "duration": 1313,
+      "date": 1616433143596,
+      "seriesTitle": "How I Wrote Your Code"
+    },
+    {
+      "duration": 1311,
+      "date": 1616339759208,
+      "seriesTitle": "How I Wrote Your Code"
+    },
+    {
+      "duration": 1309,
+      "date": 1616338311350,
+      "seriesTitle": "How I Wrote Your Code"
+    },
+    {
+      "duration": 1315,
+      "date": 1616283663323,
+      "seriesTitle": "How I Wrote Your Code"
+    },
+    {
+      "duration": 1319,
+      "date": 1616282211040,
+      "seriesTitle": "How I Wrote Your Code"
+    },
+    {
+      "duration": 3372,
+      "date": 1616190001742,
+      "seriesTitle": "I Can't C#"
+    },
+    {
+      "duration": 2682,
+      "date": 1616175535192,
+      "seriesTitle": "I Can't C#"
+    },
+    {
+      "duration": 2574,
+      "date": 1615987780472,
+      "seriesTitle": "OSDev for Beginners"
+    },
+    {
+      "duration": 2780,
+      "date": 1615913583512,
+      "seriesTitle": "5D Chess"
+    },
+    {
+      "duration": 3558,
+      "date": 1615913571481,
+      "seriesTitle": "5D Chess"
+    },
+    {
+      "duration": 3618,
+      "date": 1615913551559,
+      "seriesTitle": "5D Chess"
+    },
+    {
+      "duration": 2380,
+      "date": 1615886842021,
+      "seriesTitle": "OSDev for Beginners"
+    },
+    {
+      "duration": 2586,
+      "date": 1615824652568,
+      "seriesTitle": "OSDev for Beginners"
+    },
+    {
+      "duration": 2532,
+      "date": 1615824070342,
+      "seriesTitle": "OSDev for Beginners"
+    },
+    {
+      "duration": 2594,
+      "date": 1615823834890,
+      "seriesTitle": "OSDev for Beginners"
+    }
+  ],
+  [
+    {
+      "duration": 2506,
+      "date": 1615720414037,
+      "seriesTitle": "OSDev for Beginners"
+    },
+    {
+      "duration": 2618,
+      "date": 1615675858275,
+      "seriesTitle": "I Can't C#"
+    },
+    {
+      "duration": 2662,
+      "date": 1615675392217,
+      "seriesTitle": "How to Walk"
+    },
+    {
+      "duration": 1367,
+      "date": 1615541048014,
+      "seriesTitle": "1337 f0r n00b5"
+    },
+    {
+      "duration": 3596,
+      "date": 1615500986760,
+      "seriesTitle": "Cooking for Noobs"
+    },
+    {
+      "duration": 3332,
+      "date": 1615499056739,
+      "seriesTitle": "Cooking for Noobs"
+    },
+    {
+      "duration": 3234,
+      "date": 1615495156960,
+      "seriesTitle": "Cooking for Noobs"
+    },
+    {
+      "duration": 3326,
+      "date": 1615480417987,
+      "seriesTitle": "Cooking for Noobs"
+    },
+    {
+      "duration": 3332,
+      "date": 1615476681108,
+      "seriesTitle": "Cooking for Noobs"
+    },
+    {
+      "duration": 3510,
+      "date": 1615472559145,
+      "seriesTitle": "Cooking for Noobs"
+    },
+    {
+      "duration": 3592,
+      "date": 1615468878094,
+      "seriesTitle": "Cooking for Noobs"
+    },
+    {
+      "duration": 3098,
+      "date": 1615467451606,
+      "seriesTitle": "Cooking for Noobs"
+    },
+    {
+      "duration": 2892,
+      "date": 1615410560062,
+      "seriesTitle": "Cooking for Noobs"
+    },
+    {
+      "duration": 3230,
+      "date": 1615404784980,
+      "seriesTitle": "Cooking for Noobs"
+    },
+    {
+      "duration": 2482,
+      "date": 1615393543199,
+      "seriesTitle": "OSDev for Beginners"
+    },
+    {
+      "duration": 3352,
+      "date": 1615388286199,
+      "seriesTitle": "I Can't C#"
+    },
+    {
+      "duration": 2622,
+      "date": 1615388223751,
+      "seriesTitle": "I Can't C#"
+    },
+    {
+      "duration": 2696,
+      "date": 1615372632024,
+      "seriesTitle": "I Can't C#"
+    },
+    {
+      "duration": 2942,
+      "date": 1615369926244,
+      "seriesTitle": "I Can't C#"
+    },
+    {
+      "duration": 2684,
+      "date": 1615329811966,
+      "seriesTitle": "I Can't C#"
+    }
+  ],
+  [
+    {
+      "duration": 2632,
+      "date": 1615328465158,
+      "seriesTitle": "I Can't C#"
+    },
+    {
+      "duration": 3154,
+      "date": 1615221960383,
+      "seriesTitle": "I Can't C#"
+    },
+    {
+      "duration": 3106,
+      "date": 1615219038436,
+      "seriesTitle": "I Can't C#"
+    },
+    {
+      "duration": 2542,
+      "date": 1614989241548,
+      "seriesTitle": "I Can't C#"
+    },
+    {
+      "duration": 2918,
+      "date": 1614896366392,
+      "seriesTitle": "I Can't C#"
+    },
+    {
+      "duration": 2444,
+      "date": 1614896101998,
+      "seriesTitle": "OSDev for Beginners"
+    },
+    {
+      "duration": 2434,
+      "date": 1614895246361,
+      "seriesTitle": "OSDev for Beginners"
+    },
+    {
+      "duration": 2562,
+      "date": 1614895242734,
+      "seriesTitle": "OSDev for Beginners"
+    },
+    {
+      "duration": 1447,
+      "date": 1614871651362,
+      "seriesTitle": "1337 f0r n00b5"
+    },
+    {
+      "duration": 1321,
+      "date": 1614871631474,
+      "seriesTitle": "1337 f0r n00b5"
+    },
+    {
+      "duration": 2560,
+      "date": 1614869757238,
+      "seriesTitle": "OSDev for Beginners"
+    },
+    {
+      "duration": 2592,
+      "date": 1614867159570,
+      "seriesTitle": "OSDev for Beginners"
+    },
+    {
+      "duration": 2574,
+      "date": 1614814796097,
+      "seriesTitle": "OSDev for Beginners"
+    },
+    {
+      "duration": 2540,
+      "date": 1614783990322,
+      "seriesTitle": "OSDev for Beginners"
+    },
+    {
+      "duration": 2410,
+      "date": 1614727829997,
+      "seriesTitle": "OSDev for Beginners"
+    },
+    {
+      "duration": 2592,
+      "date": 1614725306853,
+      "seriesTitle": "OSDev for Beginners"
+    },
+    {
+      "duration": 2450,
+      "date": 1614725281911,
+      "seriesTitle": "OSDev for Beginners"
+    },
+    {
+      "duration": 2408,
+      "date": 1614700957022,
+      "seriesTitle": "OSDev for Beginners"
+    },
+    {
+      "duration": 2416,
+      "date": 1614700790435,
+      "seriesTitle": "OSDev for Beginners"
+    }
+  ],
+  [
+    {
+      "duration": 3299,
+      "date": 1614633373180,
+      "seriesTitle": "history of the entire world"
+    },
+    {
+      "duration": 3405,
+      "date": 1614630089262,
+      "seriesTitle": "history of the entire world"
+    },
+    {
+      "duration": 3349,
+      "date": 1614626789376,
+      "seriesTitle": "history of the entire world"
+    },
+    {
+      "duration": 3341,
+      "date": 1614626646165,
+      "seriesTitle": "history of the entire world"
+    },
+    {
+      "duration": 3287,
+      "date": 1614615309121,
+      "seriesTitle": "history of the entire world"
+    },
+    {
+      "duration": 3259,
+      "date": 1614603072405,
+      "seriesTitle": "history of the entire world"
+    },
+    {
+      "duration": 3081,
+      "date": 1614560633178,
+      "seriesTitle": "history of the entire world"
+    },
+    {
+      "duration": 3031,
+      "date": 1614557703777,
+      "seriesTitle": "history of the entire world"
+    },
+    {
+      "duration": 3021,
+      "date": 1614553876673,
+      "seriesTitle": "history of the entire world"
+    },
+    {
+      "duration": 3499,
+      "date": 1614550487120,
+      "seriesTitle": "history of the entire world"
+    },
+    {
+      "duration": 3044,
+      "date": 1614469579604,
+      "seriesTitle": "Women in Black"
+    },
+    {
+      "duration": 2792,
+      "date": 1614465064126,
+      "seriesTitle": "Women in Black"
+    },
+    {
+      "duration": 3190,
+      "date": 1614460040012,
+      "seriesTitle": "Women in Black"
+    },
+    {
+      "duration": 3020,
+      "date": 1614388560447,
+      "seriesTitle": "Women in Black"
+    },
+    {
+      "duration": 2996,
+      "date": 1614387563053,
+      "seriesTitle": "Women in Black"
+    },
+    {
+      "duration": 2576,
+      "date": 1614352073696,
+      "seriesTitle": "OSDev for Beginners"
+    },
+    {
+      "duration": 2492,
+      "date": 1614295991269,
+      "seriesTitle": "OSDev for Beginners"
+    },
+    {
+      "duration": 3040,
+      "date": 1614292903711,
+      "seriesTitle": "Women in Black"
+    },
+    {
+      "duration": 2536,
+      "date": 1614262337833,
+      "seriesTitle": "OSDev for Beginners"
+    },
+    {
+      "duration": 2484,
+      "date": 1614210122024,
+      "seriesTitle": "OSDev for Beginners"
+    }
+  ],
+  [
+    {
+      "duration": 2468,
+      "date": 1614207683377,
+      "seriesTitle": "OSDev for Beginners"
+    },
+    {
+      "duration": 2584,
+      "date": 1614180975633,
+      "seriesTitle": "OSDev for Beginners"
+    },
+    {
+      "duration": 2400,
+      "date": 1614177605258,
+      "seriesTitle": "OSDev for Beginners"
+    },
+    {
+      "duration": 2612,
+      "date": 1614120418841,
+      "seriesTitle": "OSDev for Beginners"
+    },
+    {
+      "duration": 2436,
+      "date": 1614093832127,
+      "seriesTitle": "OSDev for Beginners"
+    },
+    {
+      "duration": 2502,
+      "date": 1614092750914,
+      "seriesTitle": "OSDev for Beginners"
+    },
+    {
+      "duration": 1317,
+      "date": 1614035821085,
+      "seriesTitle": "Why JS sucks"
+    },
+    {
+      "duration": 2614,
+      "date": 1614032619554,
+      "seriesTitle": "OSDev for Beginners"
+    },
+    {
+      "duration": 2556,
+      "date": 1614012286289,
+      "seriesTitle": "OSDev for Beginners"
+    },
+    {
+      "duration": 2550,
+      "date": 1613953485929,
+      "seriesTitle": "OSDev for Beginners"
+    },
+    {
+      "duration": 2622,
+      "date": 1613919982621,
+      "seriesTitle": "OSDev for Beginners"
+    },
+    {
+      "duration": 2516,
+      "date": 1613919858916,
+      "seriesTitle": "OSDev for Beginners"
+    },
+    {
+      "duration": 3009,
+      "date": 1613664179015,
+      "seriesTitle": "Guide to the Space"
+    },
+    {
+      "duration": 2809,
+      "date": 1613662496958,
+      "seriesTitle": "Guide to the Space"
+    },
+    {
+      "duration": 2573,
+      "date": 1613604541393,
+      "seriesTitle": "Guide to the Space"
+    },
+    {
+      "duration": 2947,
+      "date": 1613601625078,
+      "seriesTitle": "Guide to the Space"
+    },
+    {
+      "duration": 2567,
+      "date": 1613599137714,
+      "seriesTitle": "Guide to the Space"
+    },
+    {
+      "duration": 2647,
+      "date": 1613576238004,
+      "seriesTitle": "Guide to the Space"
+    },
+    {
+      "duration": 2697,
+      "date": 1613574623083,
+      "seriesTitle": "Guide to the Space"
+    },
+    {
+      "duration": 2731,
+      "date": 1613559038107,
+      "seriesTitle": "Guide to the Space"
+    }
+  ],
+  [
+    {
+      "duration": 2883,
+      "date": 1613518334171,
+      "seriesTitle": "Guide to the Space"
+    },
+    {
+      "duration": 2887,
+      "date": 1613515542502,
+      "seriesTitle": "Guide to the Space"
+    },
+    {
+      "duration": 2745,
+      "date": 1613515488563,
+      "seriesTitle": "Guide to the Space"
+    },
+    {
+      "duration": 2701,
+      "date": 1613515476190,
+      "seriesTitle": "Guide to the Space"
+    },
+    {
+      "duration": 2685,
+      "date": 1613515408339,
+      "seriesTitle": "Guide to the Space"
+    },
+    {
+      "duration": 1313,
+      "date": 1613472785489,
+      "seriesTitle": "Why JS sucks"
+    },
+    {
+      "duration": 2685,
+      "date": 1613439291756,
+      "seriesTitle": "Guide to the Space"
+    },
+    {
+      "duration": 2685,
+      "date": 1613436695862,
+      "seriesTitle": "Guide to the Space"
+    },
+    {
+      "duration": 2685,
+      "date": 1613432034875,
+      "seriesTitle": "Guide to the Space"
+    },
+    {
+      "duration": 2685,
+      "date": 1613431660600,
+      "seriesTitle": "Guide to the Space"
+    },
+    {
+      "duration": 2685,
+      "date": 1613403054353,
+      "seriesTitle": "Guide to the Space"
+    },
+    {
+      "duration": 2697,
+      "date": 1613351398007,
+      "seriesTitle": "Guide to the Space"
+    },
+    {
+      "duration": 2685,
+      "date": 1613345003521,
+      "seriesTitle": "Guide to the Space"
+    },
+    {
+      "duration": 2735,
+      "date": 1613344550874,
+      "seriesTitle": "Guide to the Space"
+    },
+    {
+      "duration": 2719,
+      "date": 1613262925101,
+      "seriesTitle": "Guide to the Space"
+    },
+    {
+      "duration": 2683,
+      "date": 1613244890379,
+      "seriesTitle": "Guide to the Space"
+    },
+    {
+      "duration": 2749,
+      "date": 1613169881585,
+      "seriesTitle": "Guide to the Space"
+    },
+    {
+      "duration": 2683,
+      "date": 1613139360658,
+      "seriesTitle": "Guide to the Space"
+    },
+    {
+      "duration": 1313,
+      "date": 1613129238993,
+      "seriesTitle": "Why JS sucks"
+    }
+  ],
+  [
+    {
+      "duration": 2771,
+      "date": 1613126481068,
+      "seriesTitle": "Guide to the Space"
+    },
+    {
+      "duration": 1312,
+      "date": 1613084838598,
+      "seriesTitle": "Why JS sucks"
+    },
+    {
+      "duration": 1314,
+      "date": 1613084722679,
+      "seriesTitle": "Why JS sucks"
+    },
+    {
+      "duration": 2743,
+      "date": 1612975012607,
+      "seriesTitle": "Guide to the Space"
+    },
+    {
+      "duration": 2677,
+      "date": 1612912943950,
+      "seriesTitle": "Guide to the Space"
+    },
+    {
+      "duration": 2695,
+      "date": 1612833278101,
+      "seriesTitle": "Guide to the Space"
+    },
+    {
+      "duration": 2713,
+      "date": 1612831015870,
+      "seriesTitle": "Guide to the Space"
+    },
+    {
+      "duration": 2727,
+      "date": 1612798908232,
+      "seriesTitle": "Guide to the Space"
+    },
+    {
+      "duration": 2811,
+      "date": 1612798839754,
+      "seriesTitle": "Guide to the Space"
+    },
+    {
+      "duration": 1311,
+      "date": 1612659720108,
+      "seriesTitle": "How I Wrote Your Code"
+    },
+    {
+      "duration": 1315,
+      "date": 1612658434773,
+      "seriesTitle": "How I Wrote Your Code"
+    },
+    {
+      "duration": 1307,
+      "date": 1612658425334,
+      "seriesTitle": "How I Wrote Your Code"
+    },
+    {
+      "duration": 2797,
+      "date": 1612657600530,
+      "seriesTitle": "Guide to the Space"
+    },
+    {
+      "duration": 3013,
+      "date": 1612573739372,
+      "seriesTitle": "Guide to the Space"
+    },
+    {
+      "duration": 1353,
+      "date": 1612539912136,
+      "seriesTitle": "Why JS sucks"
+    },
+    {
+      "duration": 1301,
+      "date": 1612523210794,
+      "seriesTitle": "Why JS sucks"
+    },
+    {
+      "duration": 2981,
+      "date": 1612482833770,
+      "seriesTitle": "Tar Shrek"
+    },
+    {
+      "duration": 2981,
+      "date": 1612480035345,
+      "seriesTitle": "Tar Shrek"
+    },
+    {
+      "duration": 3103,
+      "date": 1612313752099,
+      "seriesTitle": "Tar Shrek"
+    },
+    {
+      "duration": 3089,
+      "date": 1612313631792,
+      "seriesTitle": "Tar Shrek"
+    }
+  ],
+  [
+    {
+      "duration": 2823,
+      "date": 1612295330187,
+      "seriesTitle": "Tar Shrek"
+    },
+    {
+      "duration": 2783,
+      "date": 1612294625767,
+      "seriesTitle": "Tar Shrek"
+    },
+    {
+      "duration": 2755,
+      "date": 1612277688475,
+      "seriesTitle": "Tar Shrek"
+    },
+    {
+      "duration": 2703,
+      "date": 1612274659476,
+      "seriesTitle": "Tar Shrek"
+    },
+    {
+      "duration": 2905,
+      "date": 1612272042494,
+      "seriesTitle": "Tar Shrek"
+    },
+    {
+      "duration": 2871,
+      "date": 1612262600267,
+      "seriesTitle": "Tar Shrek"
+    },
+    {
+      "duration": 3039,
+      "date": 1612226460809,
+      "seriesTitle": "Tar Shrek"
+    },
+    {
+      "duration": 2965,
+      "date": 1612221875158,
+      "seriesTitle": "Tar Shrek"
+    },
+    {
+      "duration": 2707,
+      "date": 1612219342169,
+      "seriesTitle": "Tar Shrek"
+    },
+    {
+      "duration": 2837,
+      "date": 1611958820998,
+      "seriesTitle": "Tar Shrek"
+    },
+    {
+      "duration": 2739,
+      "date": 1611956273229,
+      "seriesTitle": "Tar Shrek"
+    },
+    {
+      "duration": 1312,
+      "date": 1611934679646,
+      "seriesTitle": "Why JS sucks"
+    },
+    {
+      "duration": 2915,
+      "date": 1611931792147,
+      "seriesTitle": "Tar Shrek"
+    },
+    {
+      "duration": 2526,
+      "date": 1611915934566,
+      "seriesTitle": "Tar Shrek"
+    },
+    {
+      "duration": 1312,
+      "date": 1611880962017,
+      "seriesTitle": "Why JS sucks"
+    },
+    {
+      "duration": 1312,
+      "date": 1611880835995,
+      "seriesTitle": "Why JS sucks"
+    },
+    {
+      "duration": 2963,
+      "date": 1611876786094,
+      "seriesTitle": "Tar Shrek"
+    },
+    {
+      "duration": 2811,
+      "date": 1611873934534,
+      "seriesTitle": "Tar Shrek"
+    },
+    {
+      "duration": 3069,
+      "date": 1611871348425,
+      "seriesTitle": "Tar Shrek"
+    },
+    {
+      "duration": 2464,
+      "date": 1611847860729,
+      "seriesTitle": "OSDev for Beginners"
+    }
+  ],
+  [
+    {
+      "duration": 2488,
+      "date": 1611703226424,
+      "seriesTitle": "OSDev for Beginners"
+    },
+    {
+      "duration": 2588,
+      "date": 1611686230435,
+      "seriesTitle": "OSDev for Beginners"
+    },
+    {
+      "duration": 2786,
+      "date": 1611686221838,
+      "seriesTitle": "How to Fly"
+    },
+    {
+      "duration": 2540,
+      "date": 1611678991985,
+      "seriesTitle": "I like trains"
+    },
+    {
+      "duration": 2226,
+      "date": 1611676915029,
+      "seriesTitle": "I like trains"
+    },
+    {
+      "duration": 2488,
+      "date": 1611674473740,
+      "seriesTitle": "I like trains"
+    },
+    {
+      "duration": 2390,
+      "date": 1611654350889,
+      "seriesTitle": "I like trains"
+    },
+    {
+      "duration": 1315,
+      "date": 1611617415051,
+      "seriesTitle": "The Sitting Sitcom"
+    },
+    {
+      "duration": 2801,
+      "date": 1611615843719,
+      "seriesTitle": "I like trains"
+    },
+    {
+      "duration": 2707,
+      "date": 1611597820887,
+      "seriesTitle": "I like trains"
+    },
+    {
+      "duration": 2663,
+      "date": 1611591004500,
+      "seriesTitle": "I like trains"
+    },
+    {
+      "duration": 2781,
+      "date": 1611588064538,
+      "seriesTitle": "I like trains"
+    },
+    {
+      "duration": 2412,
+      "date": 1611534361940,
+      "seriesTitle": "I like trains"
+    },
+    {
+      "duration": 3057,
+      "date": 1611530296192,
+      "seriesTitle": "I like trains"
+    },
+    {
+      "duration": 2480,
+      "date": 1611509858337,
+      "seriesTitle": "OSDev for Beginners"
+    },
+    {
+      "duration": 3232,
+      "date": 1611358041988,
+      "seriesTitle": "Fun With Flags"
+    },
+    {
+      "duration": 3018,
+      "date": 1611355181796,
+      "seriesTitle": "Fun With Flags"
+    },
+    {
+      "duration": 2822,
+      "date": 1611353207012,
+      "seriesTitle": "Fun With Flags"
+    },
+    {
+      "duration": 3118,
+      "date": 1611338158602,
+      "seriesTitle": "Fun With Flags"
+    },
+    {
+      "duration": 2884,
+      "date": 1611335425215,
+      "seriesTitle": "Fun With Flags"
+    }
+  ],
+  [
+    {
+      "duration": 3222,
+      "date": 1611326140945,
+      "seriesTitle": "Fun With Flags"
+    },
+    {
+      "duration": 1317,
+      "date": 1611308035661,
+      "seriesTitle": "The Sitting Sitcom"
+    },
+    {
+      "duration": 1317,
+      "date": 1611269321743,
+      "seriesTitle": "The Sitting Sitcom"
+    },
+    {
+      "duration": 2596,
+      "date": 1611267608895,
+      "seriesTitle": "OSDev for Beginners"
+    },
+    {
+      "duration": 2524,
+      "date": 1611265846185,
+      "seriesTitle": "OSDev for Beginners"
+    },
+    {
+      "duration": 1312,
+      "date": 1611248168791,
+      "seriesTitle": "Why JS sucks"
+    },
+    {
+      "duration": 2496,
+      "date": 1611245626980,
+      "seriesTitle": "OSDev for Beginners"
+    },
+    {
+      "duration": 1313,
+      "date": 1611186058893,
+      "seriesTitle": "Why JS sucks"
+    },
+    {
+      "duration": 2484,
+      "date": 1611183656893,
+      "seriesTitle": "OSDev for Beginners"
+    },
+    {
+      "duration": 2494,
+      "date": 1611181864383,
+      "seriesTitle": "OSDev for Beginners"
+    },
+    {
+      "duration": 2474,
+      "date": 1611160632412,
+      "seriesTitle": "OSDev for Beginners"
+    },
+    {
+      "duration": 2524,
+      "date": 1611157783623,
+      "seriesTitle": "OSDev for Beginners"
+    },
+    {
+      "duration": 2594,
+      "date": 1611156665587,
+      "seriesTitle": "OSDev for Beginners"
+    },
+    {
+      "duration": 2486,
+      "date": 1611099067680,
+      "seriesTitle": "OSDev for Beginners"
+    },
+    {
+      "duration": 1315,
+      "date": 1611097813212,
+      "seriesTitle": "The Sitting Sitcom"
+    },
+    {
+      "duration": 1313,
+      "date": 1611071980211,
+      "seriesTitle": "Why JS sucks"
+    },
+    {
+      "duration": 1326,
+      "date": 1611070693498,
+      "seriesTitle": "Why JS sucks"
+    },
+    {
+      "duration": 1326,
+      "date": 1611069387254,
+      "seriesTitle": "Why JS sucks"
+    },
+    {
+      "duration": 1327,
+      "date": 1611047794110,
+      "seriesTitle": "Why JS sucks"
+    },
+    {
+      "duration": 1323,
+      "date": 1611010228609,
+      "seriesTitle": "Why JS sucks"
+    }
+  ],
+  [
+    {
+      "duration": 1315,
+      "date": 1610961869859,
+      "seriesTitle": "The Sitting Sitcom"
+    },
+    {
+      "duration": 1333,
+      "date": 1610927380874,
+      "seriesTitle": "The Sitting Sitcom"
+    },
+    {
+      "duration": 1315,
+      "date": 1610904642217,
+      "seriesTitle": "The Sitting Sitcom"
+    },
+    {
+      "duration": 1315,
+      "date": 1610846241855,
+      "seriesTitle": "The Sitting Sitcom"
+    },
+    {
+      "duration": 1317,
+      "date": 1610845034904,
+      "seriesTitle": "The Sitting Sitcom"
+    },
+    {
+      "duration": 3480,
+      "date": 1610844202789,
+      "seriesTitle": "Purpose of Life"
+    },
+    {
+      "duration": 4360,
+      "date": 1610757679042,
+      "seriesTitle": "Purpose of Life"
+    },
+    {
+      "duration": 3654,
+      "date": 1610753637049,
+      "seriesTitle": "Purpose of Life"
+    },
+    {
+      "duration": 3436,
+      "date": 1610752643946,
+      "seriesTitle": "Purpose of Life"
+    },
+    {
+      "duration": 3680,
+      "date": 1610744577595,
+      "seriesTitle": "Purpose of Life"
+    },
+    {
+      "duration": 3672,
+      "date": 1610741731999,
+      "seriesTitle": "Purpose of Life"
+    },
+    {
+      "duration": 3424,
+      "date": 1610733233852,
+      "seriesTitle": "Purpose of Life"
+    },
+    {
+      "duration": 3702,
+      "date": 1610729115591,
+      "seriesTitle": "Purpose of Life"
+    },
+    {
+      "duration": 1326,
+      "date": 1610704031781,
+      "seriesTitle": "Why JS sucks"
+    },
+    {
+      "duration": 1317,
+      "date": 1610616951061,
+      "seriesTitle": "The Sitting Sitcom"
+    },
+    {
+      "duration": 1315,
+      "date": 1610529907922,
+      "seriesTitle": "The Sitting Sitcom"
+    },
+    {
+      "duration": 1329,
+      "date": 1610474420241,
+      "seriesTitle": "Why JS sucks"
+    },
+    {
+      "duration": 1329,
+      "date": 1610444733229,
+      "seriesTitle": "Why JS sucks"
+    },
+    {
+      "duration": 2242,
+      "date": 1610381234589,
+      "seriesTitle": "Tar Wars"
+    }
+  ],
+  [
+    {
+      "duration": 2238,
+      "date": 1610378403600,
+      "seriesTitle": "Tar Wars"
+    },
+    {
+      "duration": 1333,
+      "date": 1610360043161,
+      "seriesTitle": "The Sitting Sitcom"
+    },
+    {
+      "duration": 1329,
+      "date": 1610360024095,
+      "seriesTitle": "Why JS sucks"
+    },
+    {
+      "duration": 2652,
+      "date": 1610313691187,
+      "seriesTitle": "Chanandler Bong"
+    },
+    {
+      "duration": 2888,
+      "date": 1610310850663,
+      "seriesTitle": "Chanandler Bong"
+    },
+    {
+      "duration": 2564,
+      "date": 1610310644004,
+      "seriesTitle": "Chanandler Bong"
+    },
+    {
+      "duration": 3190,
+      "date": 1610299951664,
+      "seriesTitle": "Chanandler Bong"
+    },
+    {
+      "duration": 2888,
+      "date": 1610297115593,
+      "seriesTitle": "Chanandler Bong"
+    },
+    {
+      "duration": 1321,
+      "date": 1610154536732,
+      "seriesTitle": "The Sitting Sitcom"
+    },
+    {
+      "duration": 1315,
+      "date": 1610153529710,
+      "seriesTitle": "The Sitting Sitcom"
+    },
+    {
+      "duration": 1319,
+      "date": 1610148328873,
+      "seriesTitle": "The Sitting Sitcom"
+    },
+    {
+      "duration": 1321,
+      "date": 1610147025734,
+      "seriesTitle": "The Sitting Sitcom"
+    },
+    {
+      "duration": 1317,
+      "date": 1610120587542,
+      "seriesTitle": "The Sitting Sitcom"
+    },
+    {
+      "duration": 1319,
+      "date": 1610119203013,
+      "seriesTitle": "The Sitting Sitcom"
+    },
+    {
+      "duration": 1317,
+      "date": 1610117898292,
+      "seriesTitle": "The Sitting Sitcom"
+    },
+    {
+      "duration": 1315,
+      "date": 1610102168863,
+      "seriesTitle": "The Sitting Sitcom"
+    },
+    {
+      "duration": 1317,
+      "date": 1610067997158,
+      "seriesTitle": "The Sitting Sitcom"
+    },
+    {
+      "duration": 1319,
+      "date": 1610066693212,
+      "seriesTitle": "The Sitting Sitcom"
+    },
+    {
+      "duration": 1319,
+      "date": 1610063993544,
+      "seriesTitle": "The Sitting Sitcom"
+    },
+    {
+      "duration": 1317,
+      "date": 1610062698943,
+      "seriesTitle": "The Sitting Sitcom"
+    }
+  ],
+  [
+    {
+      "duration": 1319,
+      "date": 1610061356289,
+      "seriesTitle": "The Sitting Sitcom"
+    },
+    {
+      "duration": 1317,
+      "date": 1610060052735,
+      "seriesTitle": "The Sitting Sitcom"
+    },
+    {
+      "duration": 1319,
+      "date": 1610059234518,
+      "seriesTitle": "The Sitting Sitcom"
+    },
+    {
+      "duration": 1349,
+      "date": 1610038763137,
+      "seriesTitle": "The Sitting Sitcom"
+    },
+    {
+      "duration": 1317,
+      "date": 1610017443274,
+      "seriesTitle": "The Sitting Sitcom"
+    },
+    {
+      "duration": 1319,
+      "date": 1609984520790,
+      "seriesTitle": "The Sitting Sitcom"
+    },
+    {
+      "duration": 1315,
+      "date": 1609983213834,
+      "seriesTitle": "The Sitting Sitcom"
+    },
+    {
+      "duration": 1319,
+      "date": 1609981911433,
+      "seriesTitle": "The Sitting Sitcom"
+    },
+    {
+      "duration": 1317,
+      "date": 1609980608381,
+      "seriesTitle": "The Sitting Sitcom"
+    },
+    {
+      "duration": 1328,
+      "date": 1609842900734,
+      "seriesTitle": "Why JS sucks"
+    },
+    {
+      "duration": 1321,
+      "date": 1609842873202,
+      "seriesTitle": "Why JS sucks"
+    },
+    {
+      "duration": 1327,
+      "date": 1609804413364,
+      "seriesTitle": "Why JS sucks"
+    },
+    {
+      "duration": 2248,
+      "date": 1609802204853,
+      "seriesTitle": "Tar Wars"
+    },
+    {
+      "duration": 2132,
+      "date": 1609800237821,
+      "seriesTitle": "Tar Wars"
+    },
+    {
+      "duration": 2290,
+      "date": 1609800164767,
+      "seriesTitle": "Tar Wars"
+    },
+    {
+      "duration": 1293,
+      "date": 1609798870422,
+      "seriesTitle": "The Sitting Sitcom"
+    },
+    {
+      "duration": 1429,
+      "date": 1609797457393,
+      "seriesTitle": "The Sitting Sitcom"
+    },
+    {
+      "duration": 1329,
+      "date": 1609777505255,
+      "seriesTitle": "Why JS sucks"
+    },
+    {
+      "duration": 1326,
+      "date": 1609777488770,
+      "seriesTitle": "Why JS sucks"
+    },
+    {
+      "duration": 1329,
+      "date": 1609634045202,
+      "seriesTitle": "Why JS sucks"
+    }
+  ],
+  [
+    {
+      "duration": 1328,
+      "date": 1609633101424,
+      "seriesTitle": "Why JS sucks"
+    },
+    {
+      "duration": 1328,
+      "date": 1609603575646,
+      "seriesTitle": "Why JS sucks"
+    },
+    {
+      "duration": 1328,
+      "date": 1609545071043,
+      "seriesTitle": "Why JS sucks"
+    },
+    {
+      "duration": 1328,
+      "date": 1609544002221,
+      "seriesTitle": "Why JS sucks"
+    },
+    {
+      "duration": 1327,
+      "date": 1609542575203,
+      "seriesTitle": "Why JS sucks"
+    },
+    {
+      "duration": 1328,
+      "date": 1609541313252,
+      "seriesTitle": "Why JS sucks"
+    }
+  ]
+]
diff --git a/index.html b/index.html
index 1bee661..dd347a0 100755
--- a/index.html
+++ b/index.html
@@ -22,7 +22,7 @@
     </head>
 
     <body>
-        <div id="cookie_wrap">
+        <div class="input" id="cookie_wrap">
             <label for="cookie">Enter your cookie:</label>
             <input
                 class="cookie"
@@ -40,21 +40,21 @@
             <h2>Netflix Statistics</h2>
             <div>Total watch time: <span id="totalSpent"></span></div>
             <div>
-                <canvas id="hourChart"></canvas>
+                <p>Title count per hour:</p>
+                <div class="chart" id="hourChart"></div>
             </div>
             <div>
                 <p>Most watched titles:</p>
-                <button data-current="bar" id="toggle">Toggle</button>
-                <canvas id="topChart"></canvas>
+                <button id="toggle">View all</button>
+                <div class="chart" id="topChart"></div>
             </div>
             <div>
-                <p>Overview of the year:</p>
-                <div id="information"></div>
-                <table class="heatMap" id="heatMap"></table>
+                <p>Title count per day this year:</p>
+                <div class="chart" id="heatMap"></div>
             </div>
         </div>
 
-        <script src="assets/js/chart.js"></script>
+        <script src="https://cdn.jsdelivr.net/npm/apexcharts"></script>
         <script src="assets/js/main.js"></script>
     </body>
 </html>
-- 
cgit v1.2.3