add optimised svgs and do some aria labelling

This commit is contained in:
Tom 2024-07-30 10:24:28 +01:00
parent d27a94bc6e
commit 07c9141d7e
32 changed files with 60 additions and 48 deletions

View File

@ -11,6 +11,8 @@ A list of things to check once in a while to make sure I haven't broken them ina
- Check the rss feed https://validator.w3.org/feed/check.cgi?url=https%3A%2F%2Fthomashodson.com%2Ffeed.xml - Check the rss feed https://validator.w3.org/feed/check.cgi?url=https%3A%2F%2Fthomashodson.com%2Ffeed.xml
## Todo ## Todo
- add svgo https://github.com/svg/svgo
- Figure out a JS bundling script so that I don't have to include node_modules in the deployed site
- change the OG image used for the landing page so it's not just my face. - change the OG image used for the landing page so it's not just my face.
- add humans.txt https://humanstxt.org/ - add humans.txt https://humanstxt.org/
- fix the OG tags so that https://cards-dev.twitter.com/validator works - fix the OG tags so that https://cards-dev.twitter.com/validator works

View File

@ -1,7 +1,7 @@
<!-- See https://microformats.org/wiki/h-card for meaning of h-card, u-photo etc classes --> <!-- See https://microformats.org/wiki/h-card for meaning of h-card, u-photo etc classes -->
<header class = "h-card"> <header class = "h-card">
<div class = "profile-pic-name"> <div class = "profile-pic-name">
<img src="/assets/images/avatar.jpeg" class = "u-photo avatar" alt = "A picture of me."> <img src="/assets/images/avatar.jpeg" class = "u-photo avatar" alt = "A picture of me." height="175" width="175">
<a class="p-name u-url u-uid" href="https://thomashodson.com"><h1>Tom Hodson</h1></a> <a class="p-name u-url u-uid" href="https://thomashodson.com"><h1>Tom Hodson</h1></a>
</div> </div>
<p class="p-note bio"> <p class="p-note bio">
@ -19,7 +19,7 @@
<div class="user-toggle"> <div class="user-toggle">
<div role="status" class="visually-hidden js-mode-status"></div> <div role="status" class="visually-hidden js-mode-status"></div>
<button class="toggle-button js-mode-toggle"> <button class="toggle-button js-mode-toggle" aria-label="Night Mode Toggle">
<span class="toggle-button__icon" aria-hidden="true"></span> <span class="toggle-button__icon" aria-hidden="true"></span>
</button> </button>
</div> </div>

View File

@ -11,12 +11,14 @@
<article class="h-entry blogroll {% if is_draft %}draft{%endif%}"> <article class="h-entry blogroll {% if is_draft %}draft{%endif%}">
<a class="u-uid u-url" href="{{ post.url }}"> <a class="u-uid u-url" href="{{ post.url }}" aria-label="Blog Post: {{ post.title }}">
<figure> <figure>
<img class="u-photo" <img class="u-photo"
src = "{{ post.thumbnail | default: post.image}}" src = "{{ post.thumbnail | default: post.image}}"
class = "{{ post.image_class }}" class = "{{ post.image_class }}"
alt="{{post.alt | smartify}}"> alt="{{post.alt | smartify}}"
width=128 height=128
>
</figure> </figure>
</a> </a>

View File

@ -1,8 +1,10 @@
<article class="h-entry project"> <article class="h-entry project">
<a class="u-uid u-url photo" href="{{ post.url }}"> <a class="u-uid u-url photo" href="{{ post.url }}" aria-label="Project: {{ post.title }}">
{% assign default_thumbnail = post.assets | append: '/thumbnail.min.svg' %}
<img class="u-photo {{post.img.class}}" <img class="u-photo {{post.img.class}}"
src = "{{post.img.src}}" src = "{{post.img.src | default: default_thumbnail}}"
alt="{{post.img.alt | smartify}}"> alt="{{post.img.alt | smartify}}"
width=128 height=128>
</a> </a>
<section> <section>

View File

@ -1,5 +1,5 @@
<!doctype html> <!doctype html>
<html class = "no-js"> <html class = "no-js" lang="en">
<head> <head>
{% include default_head_tags.html%} {% include default_head_tags.html%}
</head> </head>

View File

@ -1,7 +1,7 @@
--- ---
--- ---
<!doctype html> <!doctype html>
<html> <html lang="en">
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">

View File

@ -1,5 +1,5 @@
<!doctype html> <!doctype html>
<html class = "no-js"> <html class = "no-js" lang="en">
<head> <head>
{% include default_head_tags.html%} {% include default_head_tags.html%}

View File

@ -3,9 +3,9 @@ title: Bathroom Shelf
layout: post layout: post
excerpt: A little modification to an IKEA thingy. excerpt: A little modification to an IKEA thingy.
permalink: /projects/bathroom_shelf permalink: /projects/bathroom_shelf
assets: /assets/projects/bathroom_shelf
img: img:
src: /assets/projects/bathroom_shelf/thumbnail.svg
alt: A small bathroom shelf. alt: A small bathroom shelf.
class: invertable class: invertable

View File

@ -3,9 +3,9 @@ title: Bike Lights
layout: post layout: post
excerpt: Making a custom 3W dynamo light for a bike. excerpt: Making a custom 3W dynamo light for a bike.
permalink: /projects/bike_lights permalink: /projects/bike_lights
assets: /assets/projects/bike_lights
img: img:
src: /assets/projects/bike_lights/thumbnail.svg
alt: A CAD model of a 3D printable mount for a common LED light onto a bike handlebar. alt: A CAD model of a 3D printable mount for a common LED light onto a bike handlebar.
class: invertable class: invertable

View File

@ -3,9 +3,9 @@ title: Ceramics
layout: post layout: post
excerpt: Ongoing explorations in making pots! excerpt: Ongoing explorations in making pots!
permalink: /projects/ceramics permalink: /projects/ceramics
assets: /assets/projects/ceramics
img: img:
src: /assets/projects/ceramics/thumbnail.svg
alt: alt:
class: invertable class: invertable

View File

@ -3,9 +3,9 @@ title: Helmet Lights
layout: post layout: post
excerpt: A few different custom mounts to attach lights to bike helmets. excerpt: A few different custom mounts to attach lights to bike helmets.
permalink: /projects/helmet_lights permalink: /projects/helmet_lights
assets: /assets/projects/helmet_lights
img: img:
src: /assets/projects/helmet_lights/thumbnail.svg
alt: A CAD model of a 3D printable mount for a common LED light onto a helmet. alt: A CAD model of a 3D printable mount for a common LED light onto a helmet.
class: invertable class: invertable

View File

@ -3,9 +3,9 @@ title: Lamps
layout: post layout: post
excerpt: 3D Printed Lamp Shades excerpt: 3D Printed Lamp Shades
permalink: /projects/lamps permalink: /projects/lamps
assets: /assets/projects/lamps
img: img:
src: /assets/projects/lamps/thumbnail.svg
alt: A CAD model of a 3D printable mount for a common LED light onto a helmet. alt: A CAD model of a 3D printable mount for a common LED light onto a helmet.
class: invertable class: invertable

View File

@ -3,9 +3,9 @@ title: Lasercut Stool
layout: post layout: post
excerpt: A lasercut hexagonal wooden stool. excerpt: A lasercut hexagonal wooden stool.
permalink: /projects/lasercut_stool permalink: /projects/lasercut_stool
assets: /assets/projects/lasercut_stool
img: img:
src: /assets/projects/lasercut_stool/thumbnail.svg
alt: A CAD model of the this hexagonal lasercut stool. alt: A CAD model of the this hexagonal lasercut stool.
class: invertable class: invertable

View File

@ -3,9 +3,9 @@ title: 3D Printed Lego Motor Adapters
layout: post layout: post
excerpt: Adapters to use common components with lego technic. excerpt: Adapters to use common components with lego technic.
permalink: /projects/lego_adapters permalink: /projects/lego_adapters
assets: /assets/projects/lego_adapters
img: img:
src: /assets/projects/lego_adapters/thumbnail.svg
alt: alt:
class: invertable class: invertable

View File

@ -3,9 +3,9 @@ title: Projector Shelf Mount
layout: post layout: post
excerpt: A mount for a projector underneath a shelf with a tilt swivel joint. excerpt: A mount for a projector underneath a shelf with a tilt swivel joint.
permalink: /projects/projector_mount permalink: /projects/projector_mount
assets: /assets/projects/projector_mount
img: img:
src: /assets/projects/projector_mount/thumbnail.svg
alt: A CAD model of a 3D printable mount for a common LED light onto a helmet. alt: A CAD model of a 3D printable mount for a common LED light onto a helmet.
class: invertable class: invertable

View File

@ -3,9 +3,9 @@ title: Toothbrush Shelf
layout: post layout: post
excerpt: A shelf to put your toothbrush charger on. excerpt: A shelf to put your toothbrush charger on.
permalink: /projects/toothbrush_shelf permalink: /projects/toothbrush_shelf
assets: /assets/projects/toothbrush_shelf
img: img:
src: /assets/projects/toothbrush_shelf/thumbnail.svg
alt: A CAD model of a small shelf to put a toothbrush right above the charging socket so that the cabling can be hidden inside the shelf. alt: A CAD model of a small shelf to put a toothbrush right above the charging socket so that the cabling can be hidden inside the shelf.
class: invertable class: invertable

View File

@ -3,10 +3,10 @@ title: USB-C Power Station
layout: post layout: post
excerpt: One charging station to rule them all! excerpt: One charging station to rule them all!
permalink: /projects/usbc_charging_station permalink: /projects/usbc_charging_station
assets: /assets/projects/usbc_power_supply
img: img:
src: /assets/projects/usbc_power_supply/thumbnail.svg alt: A line rendered CAD model of a laser-cut, book shaped device with exposed internal parts. It wouldn't be obvious without reading the description but it's a USB-C power supply.
alt:
class: invertable class: invertable
social_image: /assets/projects/usbc_power_supply/thumbnail.png social_image: /assets/projects/usbc_power_supply/thumbnail.png

View File

@ -3,9 +3,9 @@ title: Vector Magnet
layout: post layout: post
excerpt: Make your magnetic fields all 3D like. excerpt: Make your magnetic fields all 3D like.
permalink: /projects/vector_magnet permalink: /projects/vector_magnet
assets: /assets/projects/vector_magnet
img: img:
src: /assets/projects/vector_magnet/thumbnail.svg
alt: A line drawn CAD model of vector magnet. alt: A line drawn CAD model of vector magnet.
class: invertable class: invertable

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 30 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 16 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 583 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 39 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 8.7 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 17 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 54 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 16 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 23 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 61 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 126 KiB

35
package-lock.json generated
View File

@ -9,6 +9,7 @@
"es-module-shims": "^1.8.1", "es-module-shims": "^1.8.1",
"lil-gui": "^0.19.1", "lil-gui": "^0.19.1",
"mathjax": "^3.2.2", "mathjax": "^3.2.2",
"svgo": "^3.3.2",
"three": "^0.158.0" "three": "^0.158.0"
}, },
"devDependencies": { "devDependencies": {
@ -1246,7 +1247,6 @@
"version": "0.2.0", "version": "0.2.0",
"resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz",
"integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==",
"dev": true,
"engines": { "engines": {
"node": ">=10.13.0" "node": ">=10.13.0"
} }
@ -1355,8 +1355,7 @@
"node_modules/boolbase": { "node_modules/boolbase": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
"integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww=="
"dev": true
}, },
"node_modules/braces": { "node_modules/braces": {
"version": "3.0.2", "version": "3.0.2",
@ -1622,7 +1621,6 @@
"version": "5.1.0", "version": "5.1.0",
"resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz",
"integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==",
"dev": true,
"dependencies": { "dependencies": {
"boolbase": "^1.0.0", "boolbase": "^1.0.0",
"css-what": "^6.1.0", "css-what": "^6.1.0",
@ -1638,7 +1636,6 @@
"version": "2.3.1", "version": "2.3.1",
"resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz",
"integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==",
"dev": true,
"dependencies": { "dependencies": {
"mdn-data": "2.0.30", "mdn-data": "2.0.30",
"source-map-js": "^1.0.1" "source-map-js": "^1.0.1"
@ -1651,7 +1648,6 @@
"version": "6.1.0", "version": "6.1.0",
"resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz",
"integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==",
"dev": true,
"engines": { "engines": {
"node": ">= 6" "node": ">= 6"
}, },
@ -1663,7 +1659,6 @@
"version": "5.0.5", "version": "5.0.5",
"resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz",
"integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==",
"dev": true,
"dependencies": { "dependencies": {
"css-tree": "~2.2.0" "css-tree": "~2.2.0"
}, },
@ -1676,7 +1671,6 @@
"version": "2.2.1", "version": "2.2.1",
"resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz",
"integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==",
"dev": true,
"dependencies": { "dependencies": {
"mdn-data": "2.0.28", "mdn-data": "2.0.28",
"source-map-js": "^1.0.1" "source-map-js": "^1.0.1"
@ -1689,8 +1683,7 @@
"node_modules/csso/node_modules/mdn-data": { "node_modules/csso/node_modules/mdn-data": {
"version": "2.0.28", "version": "2.0.28",
"resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz",
"integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g=="
"dev": true
}, },
"node_modules/deepmerge": { "node_modules/deepmerge": {
"version": "4.3.1", "version": "4.3.1",
@ -1729,7 +1722,6 @@
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz",
"integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==",
"dev": true,
"dependencies": { "dependencies": {
"domelementtype": "^2.3.0", "domelementtype": "^2.3.0",
"domhandler": "^5.0.2", "domhandler": "^5.0.2",
@ -1743,7 +1735,6 @@
"version": "2.3.0", "version": "2.3.0",
"resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
"integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==",
"dev": true,
"funding": [ "funding": [
{ {
"type": "github", "type": "github",
@ -1755,7 +1746,6 @@
"version": "5.0.3", "version": "5.0.3",
"resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz",
"integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==",
"dev": true,
"dependencies": { "dependencies": {
"domelementtype": "^2.3.0" "domelementtype": "^2.3.0"
}, },
@ -1770,7 +1760,6 @@
"version": "3.1.0", "version": "3.1.0",
"resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz",
"integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==",
"dev": true,
"dependencies": { "dependencies": {
"dom-serializer": "^2.0.0", "dom-serializer": "^2.0.0",
"domelementtype": "^2.3.0", "domelementtype": "^2.3.0",
@ -1825,7 +1814,6 @@
"version": "4.5.0", "version": "4.5.0",
"resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
"integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
"dev": true,
"engines": { "engines": {
"node": ">=0.12" "node": ">=0.12"
}, },
@ -2479,8 +2467,7 @@
"node_modules/mdn-data": { "node_modules/mdn-data": {
"version": "2.0.30", "version": "2.0.30",
"resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz",
"integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA=="
"dev": true
}, },
"node_modules/merge2": { "node_modules/merge2": {
"version": "1.4.1", "version": "1.4.1",
@ -2560,7 +2547,6 @@
"version": "2.1.1", "version": "2.1.1",
"resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz",
"integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==",
"dev": true,
"dependencies": { "dependencies": {
"boolbase": "^1.0.0" "boolbase": "^1.0.0"
}, },
@ -2710,8 +2696,7 @@
"node_modules/picocolors": { "node_modules/picocolors": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
"integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
"dev": true
}, },
"node_modules/picomatch": { "node_modules/picomatch": {
"version": "2.3.1", "version": "2.3.1",
@ -3134,7 +3119,6 @@
"version": "1.2.0", "version": "1.2.0",
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz",
"integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==",
"dev": true,
"engines": { "engines": {
"node": ">=0.10.0" "node": ">=0.10.0"
} }
@ -3235,10 +3219,10 @@
} }
}, },
"node_modules/svgo": { "node_modules/svgo": {
"version": "3.2.0", "version": "3.3.2",
"resolved": "https://registry.npmjs.org/svgo/-/svgo-3.2.0.tgz", "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.2.tgz",
"integrity": "sha512-4PP6CMW/V7l/GmKRKzsLR8xxjdHTV4IMvhTnpuHwwBazSIlw5W/5SmPjN8Dwyt7lKbSJrRDgp4t9ph0HgChFBQ==", "integrity": "sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==",
"dev": true, "license": "MIT",
"dependencies": { "dependencies": {
"@trysound/sax": "0.2.0", "@trysound/sax": "0.2.0",
"commander": "^7.2.0", "commander": "^7.2.0",
@ -3263,7 +3247,6 @@
"version": "7.2.0", "version": "7.2.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
"integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
"dev": true,
"engines": { "engines": {
"node": ">= 10" "node": ">= 10"
} }

View File

@ -4,6 +4,7 @@
"es-module-shims": "^1.8.1", "es-module-shims": "^1.8.1",
"lil-gui": "^0.19.1", "lil-gui": "^0.19.1",
"mathjax": "^3.2.2", "mathjax": "^3.2.2",
"svgo": "^3.3.2",
"three": "^0.158.0" "three": "^0.158.0"
}, },
"devDependencies": { "devDependencies": {

11
scripts/optimise_svgs.py Normal file
View File

@ -0,0 +1,11 @@
import subprocess as sb
from pathlib import Path
svgs = Path("assets/projects/").rglob("*.svg")
for svg_path in svgs:
minified_name = svg_path.with_suffix(".min.svg")
print(svg_path, minified_name)
sb.run(
["svgo", str(svg_path), "-o", str(minified_name)]
)