diff options
author | Minteck <minteck@phoenixnet.tech> | 2021-11-03 19:12:27 +0100 |
---|---|---|
committer | Minteck <minteck@phoenixnet.tech> | 2021-11-03 19:12:27 +0100 |
commit | 89cf52a10dfe7cfeb02c3f7f4b6842892eb04300 (patch) | |
tree | c8873cf4908491893c880d92aabbc8fb414bb7a7 | |
parent | 6a0056b00deb2bda815567635b7a554bdc5e74de (diff) | |
download | wolfeye-js-89cf52a10dfe7cfeb02c3f7f4b6842892eb04300.tar.gz wolfeye-js-89cf52a10dfe7cfeb02c3f7f4b6842892eb04300.tar.bz2 wolfeye-js-89cf52a10dfe7cfeb02c3f7f4b6842892eb04300.zip |
Reverse proxy support
39 files changed, 303 insertions, 5 deletions
diff --git a/archives/minteck-autouptime-v1.json b/archives/minteck-autouptime-v1.json new file mode 100644 index 0000000..9f53229 --- /dev/null +++ b/archives/minteck-autouptime-v1.json @@ -0,0 +1,9 @@ +{ + "title": "Auto-uptime", + "date": "11/2019", + "unreleased": false, + "description": { + "en": "Website pinging service", + "fr": "Service de questionnement de site Web" + } +}
\ No newline at end of file diff --git a/archives/minteck-autouptime-v2.json b/archives/minteck-autouptime-v2.json new file mode 100644 index 0000000..1a5cc70 --- /dev/null +++ b/archives/minteck-autouptime-v2.json @@ -0,0 +1,9 @@ +{ + "title": "Auto-uptime Second Edition", + "date": "03/2020", + "unreleased": false, + "description": { + "en": "Website pinging service, new generation", + "fr": "Service de questionnement de site Web, nouvelle génération" + } +}
\ No newline at end of file diff --git a/archives/minteck-bettersearch.json b/archives/minteck-bettersearch.json new file mode 100644 index 0000000..56a7a82 --- /dev/null +++ b/archives/minteck-bettersearch.json @@ -0,0 +1,9 @@ +{ + "title": "BetterSearch", + "date": "12/2019", + "unreleased": false, + "description": { + "en": "Meta-search engine with AI-powered analysis", + "fr": "Méta-moteur de recherche avec une analyse par IA" + } +}
\ No newline at end of file diff --git a/archives/minteck-future.json b/archives/minteck-future.json new file mode 100644 index 0000000..67b0814 --- /dev/null +++ b/archives/minteck-future.json @@ -0,0 +1,9 @@ +{ + "title": "Future Desktop", + "date": "04/2020", + "unreleased": true, + "description": { + "en": "A desktop environment for Linux systems using Web technologies", + "fr": "Un environnement de bureau pour les systèmes Linux qui utilise les technologies Web" + } +} diff --git a/archives/minteck-game-launcher.json b/archives/minteck-game-launcher.json new file mode 100644 index 0000000..0543eab --- /dev/null +++ b/archives/minteck-game-launcher.json @@ -0,0 +1,9 @@ +{ + "title": "Game Launcher", + "date": "07/2020", + "unreleased": false, + "description": { + "en": "Simple game and app launcher for Linux", + "fr": "Lanceur de jeu et d'application simple pour Linux" + } +}
\ No newline at end of file diff --git a/archives/minteck-horizon.json b/archives/minteck-horizon.json new file mode 100644 index 0000000..c787fc3 --- /dev/null +++ b/archives/minteck-horizon.json @@ -0,0 +1,9 @@ +{ + "title": "Horizon", + "date": "02/2019", + "unreleased": false, + "description": { + "en": "General-purpose Discord bot", + "fr": "Le couteau suisse des robots Discord" + } +}
\ No newline at end of file diff --git a/archives/minteck-mpnotes.json b/archives/minteck-mpnotes.json new file mode 100644 index 0000000..6fa2f51 --- /dev/null +++ b/archives/minteck-mpnotes.json @@ -0,0 +1,9 @@ +{ + "title": "Minteck Projects Account/Notes", + "date": "04/2019", + "unreleased": false, + "description": { + "en": "Online notes syncing service", + "fr": "Service de synchronisation en ligne de notes" + } +}
\ No newline at end of file diff --git a/archives/minteck-mprjnet1.json b/archives/minteck-mprjnet1.json new file mode 100644 index 0000000..890a9ac --- /dev/null +++ b/archives/minteck-mprjnet1.json @@ -0,0 +1,9 @@ +{ + "title": "Minteck Projects.net 1", + "date": "12/2018", + "unreleased": false, + "description": { + "en": "The first Minteck Projects website", + "fr": "Le premier site Web de Minteck Projects" + } +}
\ No newline at end of file diff --git a/archives/minteck-mprjnet3.json b/archives/minteck-mprjnet3.json new file mode 100644 index 0000000..f3baad3 --- /dev/null +++ b/archives/minteck-mprjnet3.json @@ -0,0 +1,9 @@ +{ + "title": "Minteck Projects.net 3", + "date": "05/2019", + "unreleased": false, + "description": { + "en": "The third Minteck Projects website, introducing a new rock-solid rendering engine", + "fr": "Le troisième site Web de Minteck Projects, apportant un nouveau moteur de rendu très fiable" + } +}
\ No newline at end of file diff --git a/archives/minteck-mprjnet5.json b/archives/minteck-mprjnet5.json new file mode 100644 index 0000000..119cdec --- /dev/null +++ b/archives/minteck-mprjnet5.json @@ -0,0 +1,9 @@ +{ + "title": "Minteck Projects.net 5", + "date": "12/2019", + "unreleased": false, + "description": { + "en": "Last Minteck Projects website to use the v3 rendering engine", + "fr": "Dernier site de Minteck Projects à utiliser le moteur de rendu v3" + } +}
\ No newline at end of file diff --git a/archives/minteck-neutron2.json b/archives/minteck-neutron2.json new file mode 100644 index 0000000..ae33c84 --- /dev/null +++ b/archives/minteck-neutron2.json @@ -0,0 +1,9 @@ +{ + "title": "Neutron 2", + "date": "09/2019", + "unreleased": false, + "description": { + "en": "Second stable Neutron release", + "fr": "Deuxième version stable de Neutron" + } +}
\ No newline at end of file diff --git a/archives/minteck-neutronstore.json b/archives/minteck-neutronstore.json new file mode 100644 index 0000000..7aba029 --- /dev/null +++ b/archives/minteck-neutronstore.json @@ -0,0 +1,9 @@ +{ + "title": "Neutron Store (CMS Store)", + "date": "10/2019", + "unreleased": false, + "description": { + "en": "Optional features store for legacy versions of Neutron", + "fr": "Boutique de fonctionnalités optionnelles pour les anciennes versions de Neutron" + } +}
\ No newline at end of file diff --git a/archives/minteck-plasmawalls.json b/archives/minteck-plasmawalls.json new file mode 100644 index 0000000..077845d --- /dev/null +++ b/archives/minteck-plasmawalls.json @@ -0,0 +1,9 @@ +{ + "title": "PlasmaWalls", + "date": "02/2021", + "unreleased": false, + "description": { + "en": "Synced with Git, website that helps download KDE Plasma's wallpapers", + "fr": "Synchronisé avec Git, site Web qui permet de télécharger les fonds d'écran de KDE Plasma" + } +}
\ No newline at end of file diff --git a/archives/minteck-polymer3.json b/archives/minteck-polymer3.json new file mode 100644 index 0000000..7962f81 --- /dev/null +++ b/archives/minteck-polymer3.json @@ -0,0 +1,9 @@ +{ + "title": "Minteck Projects.net 6 (Project Polymer 3)", + "date": "04/2020", + "unreleased": true, + "description": { + "en": "New Minteck Projects website project, featuring a new modular rendering engine", + "fr": "Projet de nouveau site de Minteck Projects, constitué d'un nouveau moteur de rendu modulaire" + } +}
\ No newline at end of file diff --git a/archives/minteck-pwrite.json b/archives/minteck-pwrite.json new file mode 100644 index 0000000..424c040 --- /dev/null +++ b/archives/minteck-pwrite.json @@ -0,0 +1,9 @@ +{ + "title": "pWrite Text Editor", + "date": "11/2019", + "unreleased": false, + "description": { + "en": "Open-source word processor powered by Web technologies", + "fr": "Traitement de texte libre de droits propulsé par des technologies Web" + } +}
\ No newline at end of file diff --git a/archives/minteck-ttshell.json b/archives/minteck-ttshell.json new file mode 100644 index 0000000..8249b24 --- /dev/null +++ b/archives/minteck-ttshell.json @@ -0,0 +1,9 @@ +{ + "title": "Titou Shell", + "date": "07/2018", + "unreleased": false, + "description": { + "en": "Alternative shell simulator for Windows Vista and newer", + "fr": "Simulateur de shell alternatif pour Windows Vista et suivant" + } +}
\ No newline at end of file diff --git a/archives/minteck-tysonbots.json b/archives/minteck-tysonbots.json new file mode 100644 index 0000000..ecb45e9 --- /dev/null +++ b/archives/minteck-tysonbots.json @@ -0,0 +1,9 @@ +{ + "title": "Tyson Bots", + "date": "02/2020", + "unreleased": false, + "description": { + "en": "Discord and Web-based chatbot powered by Google Dialogflow", + "fr": "Robot de discussion sur le Web et pour Discord propulsé par Google Dialogflow" + } +}
\ No newline at end of file diff --git a/archives/minteck-tysonfans.json b/archives/minteck-tysonfans.json new file mode 100644 index 0000000..95cef2b --- /dev/null +++ b/archives/minteck-tysonfans.json @@ -0,0 +1,9 @@ +{ + "title": "Tyson Fans", + "date": "02/2020", + "unreleased": false, + "description": { + "en": "Sub-group from Minteck Projects that tributes to Tyson Tan", + "fr": "Sous-groupe de Minteck Projects qui rend hommage à Tyson Tan" + } +}
\ No newline at end of file diff --git a/archives/minteck-webserver.json b/archives/minteck-webserver.json new file mode 100644 index 0000000..ccd9245 --- /dev/null +++ b/archives/minteck-webserver.json @@ -0,0 +1,9 @@ +{ + "title": "Minteck Projects Web Server", + "date": "04/2019", + "unreleased": true, + "description": { + "en": "JavaScript-powered lightweight Web server. Served as a base for Sattelite Server.", + "fr": "Serveur Web léger propulsé par JavaScript" + } +}
\ No newline at end of file diff --git a/archives/minteck-webspace.json b/archives/minteck-webspace.json new file mode 100644 index 0000000..23bdc1a --- /dev/null +++ b/archives/minteck-webspace.json @@ -0,0 +1,9 @@ +{ + "title": "Minteck Projects WebSpace", + "date": "06/2020", + "unreleased": true, + "description": { + "en": "Desktop application for Minteck Projects websites", + "fr": "Application de bureau pour les sites de Minteck Projects" + } +}
\ No newline at end of file diff --git a/htdocs/public/archive/index.ejs b/htdocs/public/archive/index.ejs new file mode 100644 index 0000000..b8bd4df --- /dev/null +++ b/htdocs/public/archive/index.ejs @@ -0,0 +1,58 @@ +<% global.title = "Archives"; %> +<%- include(`${private}/header.ejs`) %> + +<a href="/">← Go back home</a> + +<hr class="rnbwsquare-separator rnbwsquare-outer"> + +<h1>Archives</h1> +<!--<p>This is the page where all my active projects are, it is regularly updated from the projects I created on <a--> +<!-- href="https://source.minteck.org" target="_blank">source.minteck.org</a>. For projects I don't maintain--> +<!-- anymore, refer to the <a href="/archive">Archives</a> page.</p>--> + +<div class="grid-3 projects"> + <% + const monthNames = ["January", "February", "March", "April", "May", "June", + "July", "August", "September", "October", "November", "December" + ]; + archives = []; + for (let archive of fs.readdirSync(serverRoot + "/archives")) { + data = {}; + if (archive.endsWith(".json")) { + json = JSON.parse(fs.readFileSync(serverRoot + "/archives/" + archive).toString()) + + data.id = archive.substr(0, archive.length - 5); + data.name = json.title; + data.description = json.description.en; + data.date = (json.date.substr(3) + json.date.substr(0, 2)) - 1 + 1; + + if (json.unreleased) { + date = new Date(json.date.substr(3) + "-" + json.date.substr(0, 2) + "-01"); + data.info = "<span style='color:gold;'>Never released</span> · " + monthNames[date.getMonth()] + " " + date.getFullYear(); + } else { + data.info = "Officially released · " + monthNames[date.getMonth()] + " " + date.getFullYear(); + } + + archives.push(data); + } + } + archives = archives.sort((a, b) => a.date - b.date).reverse() + %> + <% for (let archive of archives) { %> + <div class="project"> + <img class="project-icon" + src="<%- fs.existsSync(serverRoot + "/htdocs/public/assets/archive/" + archive.id + ".png") ? "/assets/archive/" + archive.id + ".png" : "/assets/icons/project.svg" %>"> + <h2 class="project-name"><%- archive.name %></h2> + <p class="project-description"><%- archive.description %></p> + <p class="project-buttons"> + <a + href="https://archive.cdn.minteck.org/<%- archive.id %>.zip" + target="_blank" + class="big-button big-button-bg3">Download</a> + </p> + <p style="text-align: center;"><small><%- archive.info %></small></p> + </div> + <% } %> +</div> + +<%- include(`${private}/footer.ejs`) %>
\ No newline at end of file diff --git a/htdocs/public/assets/2D5CECF.jpg b/htdocs/public/assets/2D5CECF.jpg Binary files differnew file mode 100644 index 0000000..7d5deaa --- /dev/null +++ b/htdocs/public/assets/2D5CECF.jpg diff --git a/htdocs/public/assets/archive/minteck-bettersearch.png b/htdocs/public/assets/archive/minteck-bettersearch.png Binary files differnew file mode 100644 index 0000000..26c7092 --- /dev/null +++ b/htdocs/public/assets/archive/minteck-bettersearch.png diff --git a/htdocs/public/assets/archive/minteck-future.png b/htdocs/public/assets/archive/minteck-future.png Binary files differnew file mode 100644 index 0000000..f5c523c --- /dev/null +++ b/htdocs/public/assets/archive/minteck-future.png diff --git a/htdocs/public/assets/archive/minteck-game-launcher.png b/htdocs/public/assets/archive/minteck-game-launcher.png Binary files differnew file mode 100644 index 0000000..edb00f5 --- /dev/null +++ b/htdocs/public/assets/archive/minteck-game-launcher.png diff --git a/htdocs/public/assets/archive/minteck-mprjnet1.png b/htdocs/public/assets/archive/minteck-mprjnet1.png Binary files differnew file mode 100644 index 0000000..2909555 --- /dev/null +++ b/htdocs/public/assets/archive/minteck-mprjnet1.png diff --git a/htdocs/public/assets/archive/minteck-mprjnet3.png b/htdocs/public/assets/archive/minteck-mprjnet3.png Binary files differnew file mode 100644 index 0000000..801a6c4 --- /dev/null +++ b/htdocs/public/assets/archive/minteck-mprjnet3.png diff --git a/htdocs/public/assets/archive/minteck-mprjnet5.png b/htdocs/public/assets/archive/minteck-mprjnet5.png Binary files differnew file mode 100644 index 0000000..e01b9e3 --- /dev/null +++ b/htdocs/public/assets/archive/minteck-mprjnet5.png diff --git a/htdocs/public/assets/archive/minteck-neutron2.png b/htdocs/public/assets/archive/minteck-neutron2.png Binary files differnew file mode 100644 index 0000000..52cf795 --- /dev/null +++ b/htdocs/public/assets/archive/minteck-neutron2.png diff --git a/htdocs/public/assets/archive/minteck-neutronstore.png b/htdocs/public/assets/archive/minteck-neutronstore.png Binary files differnew file mode 100644 index 0000000..06fde81 --- /dev/null +++ b/htdocs/public/assets/archive/minteck-neutronstore.png diff --git a/htdocs/public/assets/archive/minteck-plasmawalls.png b/htdocs/public/assets/archive/minteck-plasmawalls.png Binary files differnew file mode 100644 index 0000000..689dc00 --- /dev/null +++ b/htdocs/public/assets/archive/minteck-plasmawalls.png diff --git a/htdocs/public/assets/archive/minteck-polymer3.png b/htdocs/public/assets/archive/minteck-polymer3.png Binary files differnew file mode 100644 index 0000000..455110f --- /dev/null +++ b/htdocs/public/assets/archive/minteck-polymer3.png diff --git a/htdocs/public/assets/archive/minteck-pwrite.png b/htdocs/public/assets/archive/minteck-pwrite.png Binary files differnew file mode 100644 index 0000000..cd78300 --- /dev/null +++ b/htdocs/public/assets/archive/minteck-pwrite.png diff --git a/htdocs/public/assets/archive/minteck-tysonfans.png b/htdocs/public/assets/archive/minteck-tysonfans.png Binary files differnew file mode 100644 index 0000000..8183a43 --- /dev/null +++ b/htdocs/public/assets/archive/minteck-tysonfans.png diff --git a/htdocs/public/assets/archive/minteck-webspace.png b/htdocs/public/assets/archive/minteck-webspace.png Binary files differnew file mode 100644 index 0000000..95a9067 --- /dev/null +++ b/htdocs/public/assets/archive/minteck-webspace.png diff --git a/htdocs/public/assets/css/main.css b/htdocs/public/assets/css/main.css index c662972..332f18d 100644 --- a/htdocs/public/assets/css/main.css +++ b/htdocs/public/assets/css/main.css @@ -242,4 +242,15 @@ html, body, #intro, #main { .main-icon-sub { margin-top: 10px; +} + +.sky { + position: absolute; + left: 0; + right: 0; + top: 0; + height: 86vh; + margin-left: auto; + margin-right: auto; + pointer-events: none; }
\ No newline at end of file diff --git a/htdocs/public/assets/sky.svg b/htdocs/public/assets/sky.svg new file mode 100644 index 0000000..0c2344d --- /dev/null +++ b/htdocs/public/assets/sky.svg @@ -0,0 +1,49 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 25.2.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 1920 1080" style="enable-background:new 0 0 1920 1080;" xml:space="preserve"> +<style type="text/css"> + .st0{display:none;} + .st1{fill:none;stroke:#333333;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;} + .st2{fill:none;stroke:#333333;stroke-width:5;stroke-miterlimit:10;} + .st3{fill:#333333;stroke:#333333;stroke-width:5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;} + .st4{fill:url(#SVGID_1_);} +</style> +<g id="Layer_1" class="st0"> + + <image style="display:inline;overflow:visible;" width="1919" height="1079" xlink:href="2D5CECF.jpg" transform="matrix(1 0 0 1 0.2215 0.3228)"> + </image> +</g> +<g id="Layer_2"> + <polygon class="st1" points="93.9,82.2 113.5,80.1 122.8,62.7 130.9,80.7 150.2,84.2 135.7,97.4 138.3,116.9 121.2,107.2 + 103.5,115.7 107.5,96.4 "/> + <polygon class="st1" points="1336.4,147.1 1349.6,132.6 1345.2,113.4 1363.1,121.5 1379.9,111.4 1377.8,130.9 1392.6,143.8 + 1373.4,147.8 1365.7,165.9 1356,148.8 "/> + <polygon class="st1" points="1545.6,83.4 1559.9,96.9 1579.1,92.9 1570.7,110.6 1580.5,127.7 1561,125.1 1547.8,139.7 + 1544.2,120.4 1526.3,112.3 1543.6,103 "/> + <polygon class="st1" points="1737.6,112.7 1756.6,107.8 1763.4,89.3 1774,105.9 1793.6,106.7 1781.1,121.8 1786.5,140.8 + 1768.2,133.5 1751.8,144.5 1753.1,124.9 "/> + <polygon class="st1" points="260.4,238.7 279.9,236.6 289.2,219.2 297.3,237.2 316.7,240.7 302.1,253.9 304.8,273.4 287.7,263.6 + 270,272.2 274,252.9 "/> + <polygon class="st1" points="564.7,104 584.2,101.8 593.5,84.5 601.6,102.4 621,105.9 606.4,119.1 609.1,138.6 592,128.9 + 574.3,137.4 578.3,118.2 "/> + <polygon class="st1" points="695.2,265.8 714.8,263.6 724.1,246.3 732.2,264.2 751.5,267.7 737,281 739.6,300.5 722.5,290.7 + 704.8,299.3 708.8,280 "/> + <polygon class="st1" points="1203.6,48.7 1223.1,46.6 1232.5,29.2 1240.6,47.2 1259.9,50.7 1245.4,63.9 1248,83.4 1230.9,73.6 + 1213.2,82.2 1217.2,62.9 "/> + <path id="path1185_1_" class="st2" d="M832.8,116.9c0,39.8,32.3,72.1,72.1,72.1l0,0c39.8,0,72.1-32.3,72.1-72.1l0,0 + c0-6.3-0.8-12.4-2.3-18.2l0,0c-0.3,29.9-24.1,54.1-53.4,54.1l0,0c-29.5,0-53.4-24.5-53.4-54.6l0,0c0-25.9,17.6-47.6,41.3-53.2l0,0 + c-1.4-0.1-2.9-0.1-4.3-0.1l0,0C865.1,44.8,832.8,77.1,832.8,116.9"/> + + <ellipse transform="matrix(0.9947 -0.1029 0.1029 0.9947 -31.0495 72.2341)" class="st3" cx="684.4" cy="337" rx="10.8" ry="10.8"/> +</g> +<g id="Layer_3"> + + <linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="53.3408" y1="234.7523" x2="579.9821" y2="234.7523" gradientTransform="matrix(0.7426 0.6697 -0.6697 0.7426 351.5418 -159.4522)"> + <stop offset="0" style="stop-color:#333333;stop-opacity:0"/> + <stop offset="1" style="stop-color:#333333"/> + </linearGradient> + <path class="st4" d="M675.4,346.7c-3.2-4.2-6.5-8.3-9.8-12.3c-67-80.7-204.8-189.9-502.1-205.7c76.1-5.9,245.9-7.6,408.5,96.3 + c51,32.6,90.9,68.9,121.6,102.3"/> +</g> +</svg> diff --git a/htdocs/public/index.ejs b/htdocs/public/index.ejs index c11f225..36ab6d2 100644 --- a/htdocs/public/index.ejs +++ b/htdocs/public/index.ejs @@ -3,6 +3,7 @@ <div id="intro" style="height:100vh;display:flex;align-items: center;justify-content: center;margin: -20px;"> <div style="text-align: center;"> + <img src="/assets/sky.svg" class="sky"> <img src="/assets/fursona/main.jpg" style="height:60vh;"> <div style="position: relative;top: -40px;"> <h1 class="rnbwsquare-title">Hello, I'm Minteck</h1> @@ -227,9 +228,7 @@ <div style="text-align: center;"> <h2>Archives</h2> <h3>All the stuff I did is kept on my website, whether it's maintained or not.</h3> - <a href="/archive" target="_blank" class="big-button big-button-bg2 big-button-pt1">Visit archives →</a><a - href="/timeline" target="_blank" class="big-button big-button-bg2 big-button-pt2">View timeline - →</a> + <a href="/archive" target="_blank" class="big-button big-button-bg2">Visit archives →</a> </div> <div style="text-align: center;"> <h2>Who?!</h2> diff --git a/htdocs/public/projects/index.ejs b/htdocs/public/projects/index.ejs index e224e0d..88749f9 100644 --- a/htdocs/public/projects/index.ejs +++ b/htdocs/public/projects/index.ejs @@ -6,8 +6,9 @@ <hr class="rnbwsquare-separator rnbwsquare-outer"> <h1>Projects</h1> -<p>This is the page where all legal documents are posted. All the content is signed using a GPG key, it's very important - that you check for the validity of the legal content you see on this website, as it may have been compromised.</p> +<p>This is the page where all my active projects are, it is regularly updated from the projects I created on <a + href="https://source.minteck.org" target="_blank">source.minteck.org</a>. For projects I don't maintain + anymore, refer to the <a href="/archive">Archives</a> page.</p> <div class="grid-3 projects"> <% for (let project of JSON.parse(fs.readFileSync(serverRoot + "/global/gitea.json").toString()).sort((a, b) => a.update - b.update).reverse()) { %> |