From 78b0780e12ed9c17023a28c9a449c9aa047e8f67 Mon Sep 17 00:00:00 2001 From: Troy Date: Mon, 7 Apr 2025 14:38:37 +0100 Subject: [PATCH] make cv a markdown page --- package-lock.json | 200 +++++------ package.json | 12 +- src/components/CvProjects.astro | 91 +++++ .../Still2025-04-07111623_1.1.1.avif | Bin 0 -> 6830 bytes .../Still2025-04-07111623_1.1.2.avif | Bin 0 -> 20419 bytes .../Still2025-04-07111623_1.1.3.avif | Bin 0 -> 9641 bytes .../Still2025-04-07111623_1.1.4.avif | Bin 0 -> 6810 bytes .../Still2025-04-07111623_1.1.6.avif | Bin 0 -> 9185 bytes .../projects/must-find-beans/index.mdx | 40 ++- src/layouts/Cv.astro | 88 +++++ src/pages/404.astro | 14 +- src/pages/cv.astro | 332 ------------------ src/pages/cv.mdx | 62 ++++ 13 files changed, 375 insertions(+), 464 deletions(-) create mode 100644 src/components/CvProjects.astro create mode 100644 src/content/projects/must-find-beans/Still2025-04-07111623_1.1.1.avif create mode 100644 src/content/projects/must-find-beans/Still2025-04-07111623_1.1.2.avif create mode 100644 src/content/projects/must-find-beans/Still2025-04-07111623_1.1.3.avif create mode 100644 src/content/projects/must-find-beans/Still2025-04-07111623_1.1.4.avif create mode 100644 src/content/projects/must-find-beans/Still2025-04-07111623_1.1.6.avif create mode 100644 src/layouts/Cv.astro delete mode 100644 src/pages/cv.astro create mode 100644 src/pages/cv.mdx diff --git a/package-lock.json b/package-lock.json index e0d9ea5..c787ce8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,22 +9,22 @@ "version": "0.0.1", "dependencies": { "@astrojs/check": "0.9.4", - "@astrojs/mdx": "^4.2.2", + "@astrojs/mdx": "^4.2.3", "@astrojs/rss": "^4.0.11", "@astrojs/sitemap": "3.3.0", "@fontsource-variable/outfit": "^5.2.5", "@fontsource-variable/red-hat-mono": "^5.2.5", - "@tailwindcss/vite": "^4.0.17", - "astro": "^5.5.5", + "@tailwindcss/vite": "^4.1.3", + "astro": "^5.6.1", "astro-icon": "^1.1.5", "rehype-external-links": "^3.0.0", - "tailwindcss": "^4.0.17", - "typescript": "^5.8.2" + "tailwindcss": "^4.1.3", + "typescript": "^5.8.3" }, "devDependencies": { "@iconify-json/mdi": "^1.2.3", "@tailwindcss/typography": "^0.5.16", - "@types/node": "^22.13.13", + "@types/node": "^22.14.0", "npm-check-updates": "^17.1.16", "prettier": "^3.5.3", "prettier-plugin-astro": "^0.14.1", @@ -154,9 +154,9 @@ } }, "node_modules/@astrojs/mdx": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@astrojs/mdx/-/mdx-4.2.2.tgz", - "integrity": "sha512-nWDvuCPenxoxbog3YK3yVWF3Jw7Lq1+ziWSAOc9fy6zAUbPDSr2bt3c6r6+oa1ll0miCQByj5UVts6eJvN/y+g==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/@astrojs/mdx/-/mdx-4.2.3.tgz", + "integrity": "sha512-oteB88udzzZmix5kWWUMeMJfeB2Dj8g7jy9LVNuTzGlBh3mEkGhQr6FsIR43p0JKCN11fl5J7P/Ev4Q0Nf0KQQ==", "license": "MIT", "dependencies": { "@astrojs/markdown-remark": "6.3.1", @@ -1624,42 +1624,43 @@ "license": "MIT" }, "node_modules/@tailwindcss/node": { - "version": "4.0.17", - "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.0.17.tgz", - "integrity": "sha512-LIdNwcqyY7578VpofXyqjH6f+3fP4nrz7FBLki5HpzqjYfXdF2m/eW18ZfoKePtDGg90Bvvfpov9d2gy5XVCbg==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.3.tgz", + "integrity": "sha512-H/6r6IPFJkCfBJZ2dKZiPJ7Ueb2wbL592+9bQEl2r73qbX6yGnmQVIfiUvDRB2YI0a3PWDrzUwkvQx1XW1bNkA==", "license": "MIT", "dependencies": { "enhanced-resolve": "^5.18.1", "jiti": "^2.4.2", - "tailwindcss": "4.0.17" + "lightningcss": "1.29.2", + "tailwindcss": "4.1.3" } }, "node_modules/@tailwindcss/oxide": { - "version": "4.0.17", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.0.17.tgz", - "integrity": "sha512-B4OaUIRD2uVrULpAD1Yksx2+wNarQr2rQh65nXqaqbLY1jCd8fO+3KLh/+TH4Hzh2NTHQvgxVbPdUDOtLk7vAw==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.1.3.tgz", + "integrity": "sha512-t16lpHCU7LBxDe/8dCj9ntyNpXaSTAgxWm1u2XQP5NiIu4KGSyrDJJRlK9hJ4U9yJxx0UKCVI67MJWFNll5mOQ==", "license": "MIT", "engines": { "node": ">= 10" }, "optionalDependencies": { - "@tailwindcss/oxide-android-arm64": "4.0.17", - "@tailwindcss/oxide-darwin-arm64": "4.0.17", - "@tailwindcss/oxide-darwin-x64": "4.0.17", - "@tailwindcss/oxide-freebsd-x64": "4.0.17", - "@tailwindcss/oxide-linux-arm-gnueabihf": "4.0.17", - "@tailwindcss/oxide-linux-arm64-gnu": "4.0.17", - "@tailwindcss/oxide-linux-arm64-musl": "4.0.17", - "@tailwindcss/oxide-linux-x64-gnu": "4.0.17", - "@tailwindcss/oxide-linux-x64-musl": "4.0.17", - "@tailwindcss/oxide-win32-arm64-msvc": "4.0.17", - "@tailwindcss/oxide-win32-x64-msvc": "4.0.17" + "@tailwindcss/oxide-android-arm64": "4.1.3", + "@tailwindcss/oxide-darwin-arm64": "4.1.3", + "@tailwindcss/oxide-darwin-x64": "4.1.3", + "@tailwindcss/oxide-freebsd-x64": "4.1.3", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.3", + "@tailwindcss/oxide-linux-arm64-gnu": "4.1.3", + "@tailwindcss/oxide-linux-arm64-musl": "4.1.3", + "@tailwindcss/oxide-linux-x64-gnu": "4.1.3", + "@tailwindcss/oxide-linux-x64-musl": "4.1.3", + "@tailwindcss/oxide-win32-arm64-msvc": "4.1.3", + "@tailwindcss/oxide-win32-x64-msvc": "4.1.3" } }, "node_modules/@tailwindcss/oxide-android-arm64": { - "version": "4.0.17", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.0.17.tgz", - "integrity": "sha512-3RfO0ZK64WAhop+EbHeyxGThyDr/fYhxPzDbEQjD2+v7ZhKTb2svTWy+KK+J1PHATus2/CQGAGp7pHY/8M8ugg==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.3.tgz", + "integrity": "sha512-cxklKjtNLwFl3mDYw4XpEfBY+G8ssSg9ADL4Wm6//5woi3XGqlxFsnV5Zb6v07dxw1NvEX2uoqsxO/zWQsgR+g==", "cpu": [ "arm64" ], @@ -1673,9 +1674,9 @@ } }, "node_modules/@tailwindcss/oxide-darwin-arm64": { - "version": "4.0.17", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.0.17.tgz", - "integrity": "sha512-e1uayxFQCCDuzTk9s8q7MC5jFN42IY7nzcr5n0Mw/AcUHwD6JaBkXnATkD924ZsHyPDvddnusIEvkgLd2CiREg==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.3.tgz", + "integrity": "sha512-mqkf2tLR5VCrjBvuRDwzKNShRu99gCAVMkVsaEOFvv6cCjlEKXRecPu9DEnxp6STk5z+Vlbh1M5zY3nQCXMXhw==", "cpu": [ "arm64" ], @@ -1689,9 +1690,9 @@ } }, "node_modules/@tailwindcss/oxide-darwin-x64": { - "version": "4.0.17", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.0.17.tgz", - "integrity": "sha512-d6z7HSdOKfXQ0HPlVx1jduUf/YtBuCCtEDIEFeBCzgRRtDsUuRtofPqxIVaSCUTOk5+OfRLonje6n9dF6AH8wQ==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.3.tgz", + "integrity": "sha512-7sGraGaWzXvCLyxrc7d+CCpUN3fYnkkcso3rCzwUmo/LteAl2ZGCDlGvDD8Y/1D3ngxT8KgDj1DSwOnNewKhmg==", "cpu": [ "x64" ], @@ -1705,9 +1706,9 @@ } }, "node_modules/@tailwindcss/oxide-freebsd-x64": { - "version": "4.0.17", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.0.17.tgz", - "integrity": "sha512-EjrVa6lx3wzXz3l5MsdOGtYIsRjgs5Mru6lDv4RuiXpguWeOb3UzGJ7vw7PEzcFadKNvNslEQqoAABeMezprxQ==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.3.tgz", + "integrity": "sha512-E2+PbcbzIReaAYZe997wb9rId246yDkCwAakllAWSGqe6VTg9hHle67hfH6ExjpV2LSK/siRzBUs5wVff3RW9w==", "cpu": [ "x64" ], @@ -1721,9 +1722,9 @@ } }, "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { - "version": "4.0.17", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.0.17.tgz", - "integrity": "sha512-65zXfCOdi8wuaY0Ye6qMR5LAXokHYtrGvo9t/NmxvSZtCCitXV/gzJ/WP5ksXPhff1SV5rov0S+ZIZU+/4eyCQ==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.3.tgz", + "integrity": "sha512-GvfbJ8wjSSjbLFFE3UYz4Eh8i4L6GiEYqCtA8j2Zd2oXriPuom/Ah/64pg/szWycQpzRnbDiJozoxFU2oJZyfg==", "cpu": [ "arm" ], @@ -1737,9 +1738,9 @@ } }, "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { - "version": "4.0.17", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.0.17.tgz", - "integrity": "sha512-+aaq6hJ8ioTdbJV5IA1WjWgLmun4T7eYLTvJIToiXLHy5JzUERRbIZjAcjgK9qXMwnvuu7rqpxzej+hGoEcG5g==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.3.tgz", + "integrity": "sha512-35UkuCWQTeG9BHcBQXndDOrpsnt3Pj9NVIB4CgNiKmpG8GnCNXeMczkUpOoqcOhO6Cc/mM2W7kaQ/MTEENDDXg==", "cpu": [ "arm64" ], @@ -1753,9 +1754,9 @@ } }, "node_modules/@tailwindcss/oxide-linux-arm64-musl": { - "version": "4.0.17", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.0.17.tgz", - "integrity": "sha512-/FhWgZCdUGAeYHYnZKekiOC0aXFiBIoNCA0bwzkICiMYS5Rtx2KxFfMUXQVnl4uZRblG5ypt5vpPhVaXgGk80w==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.3.tgz", + "integrity": "sha512-dm18aQiML5QCj9DQo7wMbt1Z2tl3Giht54uVR87a84X8qRtuXxUqnKQkRDK5B4bCOmcZ580lF9YcoMkbDYTXHQ==", "cpu": [ "arm64" ], @@ -1769,9 +1770,9 @@ } }, "node_modules/@tailwindcss/oxide-linux-x64-gnu": { - "version": "4.0.17", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.0.17.tgz", - "integrity": "sha512-gELJzOHK6GDoIpm/539Golvk+QWZjxQcbkKq9eB2kzNkOvrP0xc5UPgO9bIMNt1M48mO8ZeNenCMGt6tfkvVBg==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.3.tgz", + "integrity": "sha512-LMdTmGe/NPtGOaOfV2HuO7w07jI3cflPrVq5CXl+2O93DCewADK0uW1ORNAcfu2YxDUS035eY2W38TxrsqngxA==", "cpu": [ "x64" ], @@ -1785,9 +1786,9 @@ } }, "node_modules/@tailwindcss/oxide-linux-x64-musl": { - "version": "4.0.17", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.0.17.tgz", - "integrity": "sha512-68NwxcJrZn94IOW4TysMIbYv5AlM6So1luTlbYUDIGnKma1yTFGBRNEJ+SacJ3PZE2rgcTBNRHX1TB4EQ/XEHw==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.3.tgz", + "integrity": "sha512-aalNWwIi54bbFEizwl1/XpmdDrOaCjRFQRgtbv9slWjmNPuJJTIKPHf5/XXDARc9CneW9FkSTqTbyvNecYAEGw==", "cpu": [ "x64" ], @@ -1801,9 +1802,9 @@ } }, "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { - "version": "4.0.17", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.0.17.tgz", - "integrity": "sha512-AkBO8efP2/7wkEXkNlXzRD4f/7WerqKHlc6PWb5v0jGbbm22DFBLbIM19IJQ3b+tNewQZa+WnPOaGm0SmwMNjw==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.3.tgz", + "integrity": "sha512-PEj7XR4OGTGoboTIAdXicKuWl4EQIjKHKuR+bFy9oYN7CFZo0eu74+70O4XuERX4yjqVZGAkCdglBODlgqcCXg==", "cpu": [ "arm64" ], @@ -1817,9 +1818,9 @@ } }, "node_modules/@tailwindcss/oxide-win32-x64-msvc": { - "version": "4.0.17", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.0.17.tgz", - "integrity": "sha512-7/DTEvXcoWlqX0dAlcN0zlmcEu9xSermuo7VNGX9tJ3nYMdo735SHvbrHDln1+LYfF6NhJ3hjbpbjkMOAGmkDg==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.3.tgz", + "integrity": "sha512-T8gfxECWDBENotpw3HR9SmNiHC9AOJdxs+woasRZ8Q/J4VHN0OMs7F+4yVNZ9EVN26Wv6mZbK0jv7eHYuLJLwA==", "cpu": [ "x64" ], @@ -1849,15 +1850,14 @@ } }, "node_modules/@tailwindcss/vite": { - "version": "4.0.17", - "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.0.17.tgz", - "integrity": "sha512-HJbBYDlDVg5cvYZzECb6xwc1IDCEM3uJi3hEZp3BjZGCNGJcTsnCpan+z+VMW0zo6gR0U6O6ElqU1OoZ74Dhww==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.1.3.tgz", + "integrity": "sha512-lUI/QaDxLtlV52Lho6pu07CG9pSnRYLOPmKGIQjyHdTBagemc6HmgZxyjGAQ/5HMPrNeWBfTVIpQl0/jLXvWHQ==", "license": "MIT", "dependencies": { - "@tailwindcss/node": "4.0.17", - "@tailwindcss/oxide": "4.0.17", - "lightningcss": "1.29.2", - "tailwindcss": "4.0.17" + "@tailwindcss/node": "4.1.3", + "@tailwindcss/oxide": "4.1.3", + "tailwindcss": "4.1.3" }, "peerDependencies": { "vite": "^5.2.0 || ^6" @@ -1945,12 +1945,12 @@ } }, "node_modules/@types/node": { - "version": "22.13.13", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.13.tgz", - "integrity": "sha512-ClsL5nMwKaBRwPcCvH8E7+nU4GxHVx1axNvMZTFHMEfNI7oahimt26P5zjVCRrjiIWj6YFXfE1v3dEp94wLcGQ==", + "version": "22.14.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.14.0.tgz", + "integrity": "sha512-Kmpl+z84ILoG+3T/zQFyAJsU6EPTmOCj8/2+83fSN6djd6I4o7uOuGIH6vq3PrjY5BGitSbFuMN18j3iknubbA==", "license": "MIT", "dependencies": { - "undici-types": "~6.20.0" + "undici-types": "~6.21.0" } }, "node_modules/@types/sax": { @@ -2261,9 +2261,9 @@ } }, "node_modules/astro": { - "version": "5.5.5", - "resolved": "https://registry.npmjs.org/astro/-/astro-5.5.5.tgz", - "integrity": "sha512-fdnnK5dhWNIQT/cXzvaGs9il4T5noi4jafobdntbuNOrRxI1JnOxDfrtBadUo6cknCRCFhYrXh4VndCqj1a4Sg==", + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/astro/-/astro-5.6.1.tgz", + "integrity": "sha512-aQ2TV7wIf+q2Oi6gGWMINHWEAZqoP0eH6/mihodfTJYATPWyd03JIGVfjtYUJlkNdNSKxDXwEe/r/Zx4CZ1FPg==", "license": "MIT", "dependencies": { "@astrojs/compiler": "^2.11.0", @@ -2302,26 +2302,26 @@ "neotraverse": "^0.6.18", "p-limit": "^6.2.0", "p-queue": "^8.1.0", - "package-manager-detector": "^1.0.0", + "package-manager-detector": "^1.1.0", "picomatch": "^4.0.2", "prompts": "^2.4.2", "rehype": "^13.0.2", "semver": "^7.7.1", - "shiki": "^3.0.0", + "shiki": "^3.2.1", "tinyexec": "^0.3.2", "tinyglobby": "^0.2.12", "tsconfck": "^3.1.5", - "ultrahtml": "^1.5.3", + "ultrahtml": "^1.6.0", "unist-util-visit": "^5.0.0", "unstorage": "^1.15.0", "vfile": "^6.0.3", - "vite": "^6.2.3", + "vite": "^6.2.4", "vitefu": "^1.0.6", "xxhash-wasm": "^1.1.0", "yargs-parser": "^21.1.1", "yocto-spinner": "^0.2.1", "zod": "^3.24.2", - "zod-to-json-schema": "^3.24.3", + "zod-to-json-schema": "^3.24.5", "zod-to-ts": "^1.2.0" }, "bin": { @@ -2352,9 +2352,9 @@ } }, "node_modules/astro/node_modules/package-manager-detector": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-1.0.0.tgz", - "integrity": "sha512-7elnH+9zMsRo7aS72w6MeRugTpdRvInmEB4Kmm9BVvPw/SLG8gXUGQ+4wF0Mys0RSWPz0B9nuBbDe8vFeA2sfg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-1.1.0.tgz", + "integrity": "sha512-Y8f9qUlBzW8qauJjd/eu6jlpJZsuPJm2ZAV0cDVd420o4EdpH5RPdoCv+60/TdJflGatr4sDfpAL6ArWZbM5tA==", "license": "MIT" }, "node_modules/asynckit": { @@ -7163,9 +7163,9 @@ } }, "node_modules/tailwindcss": { - "version": "4.0.17", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.0.17.tgz", - "integrity": "sha512-OErSiGzRa6rLiOvaipsDZvLMSpsBZ4ysB4f0VKGXUrjw2jfkJRd6kjRKV2+ZmTCNvwtvgdDam5D7w6WXsdLJZw==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.3.tgz", + "integrity": "sha512-2Q+rw9vy1WFXu5cIxlvsabCwhU2qUwodGq03ODhLJ0jW4ek5BUtoCsnLB0qG+m8AHgEsSJcJGDSDe06FXlP74g==", "license": "MIT" }, "node_modules/tapable": { @@ -7303,9 +7303,9 @@ "license": "MIT" }, "node_modules/typescript": { - "version": "5.8.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.2.tgz", - "integrity": "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==", + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", @@ -7331,9 +7331,9 @@ "license": "MIT" }, "node_modules/ultrahtml": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/ultrahtml/-/ultrahtml-1.5.3.tgz", - "integrity": "sha512-GykOvZwgDWZlTQMtp5jrD4BVL+gNn2NVlVafjcFUJ7taY20tqYdwdoWBFy6GBJsNTZe1GkGPkSl5knQAjtgceg==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ultrahtml/-/ultrahtml-1.6.0.tgz", + "integrity": "sha512-R9fBn90VTJrqqLDwyMph+HGne8eqY1iPfYhPzZrvKpIfwkWZbcYlfpsb8B9dTvBfpy1/hqAD7Wi8EKfP9e8zdw==", "license": "MIT" }, "node_modules/uncrypto": { @@ -7352,9 +7352,9 @@ } }, "node_modules/undici-types": { - "version": "6.20.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", - "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", "license": "MIT" }, "node_modules/unified": { @@ -7654,9 +7654,9 @@ } }, "node_modules/vite": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/vite/-/vite-6.2.3.tgz", - "integrity": "sha512-IzwM54g4y9JA/xAeBPNaDXiBF8Jsgl3VBQ2YQ/wOY6fyW3xMdSoltIV3Bo59DErdqdE6RxUfv8W69DvUorE4Eg==", + "version": "6.2.4", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.2.4.tgz", + "integrity": "sha512-veHMSew8CcRzhL5o8ONjy8gkfmFJAd5Ac16oxBUjlwgX3Gq2Wqr+qNC3TjPIpy7TPV/KporLga5GT9HqdrCizw==", "license": "MIT", "dependencies": { "esbuild": "^0.25.0", @@ -8309,9 +8309,9 @@ } }, "node_modules/zod-to-json-schema": { - "version": "3.24.3", - "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.24.3.tgz", - "integrity": "sha512-HIAfWdYIt1sssHfYZFCXp4rU1w2r8hVVXYIlmoa0r0gABLs5di3RCqPU5DDROogVz1pAdYBaz7HK5n9pSUNs3A==", + "version": "3.24.5", + "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.24.5.tgz", + "integrity": "sha512-/AuWwMP+YqiPbsJx5D6TfgRTc4kTLjsh5SOcd4bLsfUg2RcEXrFMJl1DGgdHy2aCfsIA/cr/1JM0xcB2GZji8g==", "license": "ISC", "peerDependencies": { "zod": "^3.24.1" diff --git a/package.json b/package.json index 02228ca..3f9bbb6 100644 --- a/package.json +++ b/package.json @@ -13,22 +13,22 @@ }, "dependencies": { "@astrojs/check": "0.9.4", - "@astrojs/mdx": "^4.2.2", + "@astrojs/mdx": "^4.2.3", "@astrojs/rss": "^4.0.11", "@astrojs/sitemap": "3.3.0", "@fontsource-variable/outfit": "^5.2.5", "@fontsource-variable/red-hat-mono": "^5.2.5", - "@tailwindcss/vite": "^4.0.17", - "astro": "^5.5.5", + "@tailwindcss/vite": "^4.1.3", + "astro": "^5.6.1", "astro-icon": "^1.1.5", "rehype-external-links": "^3.0.0", - "tailwindcss": "^4.0.17", - "typescript": "^5.8.2" + "tailwindcss": "^4.1.3", + "typescript": "^5.8.3" }, "devDependencies": { "@iconify-json/mdi": "^1.2.3", "@tailwindcss/typography": "^0.5.16", - "@types/node": "^22.13.13", + "@types/node": "^22.14.0", "npm-check-updates": "^17.1.16", "prettier": "^3.5.3", "prettier-plugin-astro": "^0.14.1", diff --git a/src/components/CvProjects.astro b/src/components/CvProjects.astro new file mode 100644 index 0000000..880633e --- /dev/null +++ b/src/components/CvProjects.astro @@ -0,0 +1,91 @@ +--- +import Link from "@components/Link.astro"; +import { createSlug } from "@lib/utils"; + +const projects = [ + { + id: 1, + name: "MUST FIND BEANS", + description: + "A fast-paced first person shooter set following the realization that you’re all out of beans. The problem is, you’re nearing the end of cooking all the other items and you can’t just not have them. Without beans, the day just won’t be started off right.", + tags: ["Godot", "Blender", "GIMP", "Steamworks"], + link: "/projects/must-find-beans", + done: false, + }, + { + id: 2, + name: "troylusty.com", + description: + "My personal website made using Astro as a way to show off my portfolio of work and display blog posts.", + tags: [ + "Astro", + "Tailwind CSS", + "TypeScript", + "Self-hosted Forgejo Actions", + "Docker", + ], + link: "https://code.troylusty.com/troy/troylusty.com", + done: true, + }, + { + id: 3, + name: "Artwork", + description: + "A collection of digital artwork created with a variety of tools.", + tags: ["Blender", "Cinema 4D", "DaVinci Resolve"], + link: "/projects", + done: true, + }, + { + id: 4, + name: "Packard", + description: + "Packard is a simple terminal based RSS aggregator meant to allow you to take a quick glance at what’s occurring in topics you care about.", + tags: ["Rust", "Tokio", "Clap", "NixOS Flake"], + link: "https://code.troylusty.com/troy/packard", + done: true, + }, +]; +const sortedProjects = [...projects].sort((a, b) => a.id - b.id); +--- + +
    + { + sortedProjects.map((project) => ( +
  1. +
    +
    + <> +

    + + {project.done ? ( + + ) : ( + + )} + {project.name} + +

    +

    {project.description}

    + +
    +
    +
    +
    + {project.tags.map((tag) => ( + + {tag} + + ))} +
    +
    +
  2. + )) + } +
diff --git a/src/content/projects/must-find-beans/Still2025-04-07111623_1.1.1.avif b/src/content/projects/must-find-beans/Still2025-04-07111623_1.1.1.avif new file mode 100644 index 0000000000000000000000000000000000000000..cb538ae27859c2248bdea18bef60a12b59c73695 GIT binary patch literal 6830 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 literal 0 HcmV?d00001 diff --git a/src/content/projects/must-find-beans/Still2025-04-07111623_1.1.2.avif b/src/content/projects/must-find-beans/Still2025-04-07111623_1.1.2.avif new file mode 100644 index 0000000000000000000000000000000000000000..f2cd703bf30ab1f74d335d26bb2e5b562be42230 GIT binary patch literal 20419 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 OKO-%*&eEs+>o)+$z@n1? literal 0 HcmV?d00001 diff --git a/src/content/projects/must-find-beans/Still2025-04-07111623_1.1.3.avif b/src/content/projects/must-find-beans/Still2025-04-07111623_1.1.3.avif new file mode 100644 index 0000000000000000000000000000000000000000..505bf7320230554359f2637b4e567396e9eade0a GIT binary patch literal 9641 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%0AkutMf|p_r^{Jq3!w4 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 +

Please Note

+

This game is very early in development.

+ -**THIS GAME IS VERY EARLY IN PRODUCTION** +![](capsule.avif) -Demonstrate your culinary combat skills in MUST FIND BEANS, a chaos driven FPS set in an endless arena full of enemies in an eat or be eaten situation. +[MUST FIND BEANS](https://store.steampowered.com/app/3012740/MUST_FIND_BEANS/) is a fast-paced first person shooter set following the realization that you're all out of beans. The problem is, you're nearing the end of cooking all the other items and you can't just not have them. Without beans, the day just won't be started off right. -### Culinary combat +Many will try to stop you as you race out in search of the final piece of your meal. But you must not let them. Find a can of beans by any means necessary before everything else you began cooking burns. -Prepare and serve up your opponents using a variety of cutlery and condiments, each fit for a different scenario! +Gameplay in MUST FIND BEANS aims to mimic games similar to the original Quake, and other modern “boomer shooters” such as ULTRAKILL, DUSK, or CRUEL. This extends not only to the fast and difficult yet predictable combat, but also the movement which has taken significant inspiration from that found within Source engine titles. -### Leaderboard - -Go against players all around the world with the in-game leaderboard. - -### Other key features - -- Ultra-wide support +Visuals and imagery included imitate apartment and hotel interiors within and around Miami in the 1980s. This is will be most evident though the use of a combination of brutalist architecture along with collections of interior foliage. Whilst it might not be entirely present within the presented version of the game, each “enemy” will be styled after one of the breakfast items which have been left cooking as a way to visualise the character’s paranoid and overly determined mental state. ## Early screenshots +![](Still2025-04-07111623_1.1.1.avif) +![](Still2025-04-07111623_1.1.6.avif) +![](Still2025-04-07111623_1.1.4.avif) +![](Still2025-04-07111623_1.1.2.avif) +![](Still2025-04-07111623_1.1.3.avif) + +## Even earlier screenshots + ![](ss_8340a3c02235371547350c557fefb830e6e2d067.avif) ![](ss_c578870d1c22722983b76c3effe7fba7f5d1cb5e.avif) ![](ss_b2dc5ca65e2f24088afac3faf79f450057e13383.avif) diff --git a/src/layouts/Cv.astro b/src/layouts/Cv.astro new file mode 100644 index 0000000..f54aaff --- /dev/null +++ b/src/layouts/Cv.astro @@ -0,0 +1,88 @@ +--- +import Layout from "@layouts/Layout.astro"; +import { SITE, CV } from "@consts"; +import { Image } from "astro:assets"; +import { Icon } from "astro-icon/components"; +import Link from "@components/Link.astro"; +import icon from "public/assets/icon.png"; +--- + + +
+
+

+ {CV.TITLE}{CV.DESCRIPTION} +

+

Digital designer.

+ + + Devon, United Kingdom, GMT + +

+ + + + + + + + + + + + + +
+ +
+ Troy Lusty + +
+
+
+ +
+
+
diff --git a/src/pages/404.astro b/src/pages/404.astro index 964b0d2..a28b2e4 100644 --- a/src/pages/404.astro +++ b/src/pages/404.astro @@ -10,20 +10,14 @@ import Button from "@components/Button.astro"; class="flex flex-col items-start justify-between gap-6 md:flex-row md:items-center" >
-

404 -

-

+

Content not found -

-
-
-
diff --git a/src/pages/cv.astro b/src/pages/cv.astro deleted file mode 100644 index b2a7a21..0000000 --- a/src/pages/cv.astro +++ /dev/null @@ -1,332 +0,0 @@ ---- -import Layout from "@layouts/Layout.astro"; -import { SITE, CV } from "@consts"; -import { Image } from "astro:assets"; -import { Icon } from "astro-icon/components"; -import Link from "@components/Link.astro"; -import icon from "public/assets/icon.png"; - -const skills = [ - { id: 1, name: "Python" }, - { id: 2, name: "Rust" }, - { id: 3, name: "TypeScript" }, - { id: 4, name: "Git" }, - { id: 5, name: "Docker" }, - { id: 6, name: "Linux" }, - { id: 7, name: "Shopify" }, - { id: 8, name: "Astro" }, - { id: 9, name: "Steamworks" }, - { id: 10, name: "Blender" }, - { id: 11, name: "Godot" }, - { id: 12, name: "Unreal Engine" }, - { id: 13, name: "Adobe Photoshop" }, - { id: 14, name: "GIMP" }, - { id: 15, name: "Inkscape" }, - { id: 16, name: "DaVinci Resolve" }, - { id: 17, name: "Pixelmator Pro" }, - { id: 99, name: "Full drivers licence (A & B)" }, -]; -const sortedSkills = [...skills].sort((a, b) => a.id - b.id); - -const projects = [ - { - id: 1, - name: "troylusty.com", - description: "My personal portfolio website made using Astro.", - tags: ["Astro", "Tailwind CSS", "TypeScript", "Actions", "Docker"], - link: "https://code.troylusty.com/troy/troylusty.com", - }, - { - id: 2, - name: "Artwork", - description: - "A collection of digital artwork created with a variety of tools.", - tags: ["Blender"], - link: "/projects", - }, - { - id: 3, - name: "Packard", - description: "Terminal based feed checker.", - tags: ["Rust", "Tokio", "Clap", "NixOS Flake"], - link: "https://code.troylusty.com/troy/packard", - }, -]; -const sortedProjects = [...projects].sort((a, b) => a.id - b.id); - -const education = [ - { - id: 1, - school: "University of Plymouth", - course: "BA (Hons) Game Arts and Design", - dates: "2024 - 2025", - description: ["1st year: Estimated completion May 2025"], - }, - { - id: 2, - school: "University Centre South Devon", - course: "FdA Games and Interactive Design", - dates: "2022 - 2024", - description: [ - "2nd year: 70.25% State Aggregate Mark", - "1st year: 69.43% State Aggregate Mark", - ], - }, - { - id: 3, - school: "South Devon College", - course: - "UAL Level 3 Extended Diploma in Creative Media Production and Technology", - dates: "2020 - 2022", - description: [ - "2nd year: Extended Diploma - Distinction", - "1st year: Diploma - Distinction", - ], - }, - { - id: 4, - school: "Kennicott Sixth Form", - course: "BTEC & A-level", - dates: "2018 - 2020", - description: [ - "Pearson BTEC Level 3 National Extended Diploma in Art and Design - Distinction Merit Merit", - "AQA GCE/A Computer Science ADV (Python) - C", - ], - }, - { - id: 5, - school: "King Edward VI Community College", - course: "GCSEs & Cambridge Nationals qualification", - dates: "2014 - 2018", - description: [ - "10 GCSEs including Maths and English", - "OCR Cambridge Nationals Creative iMedia Level 1/2 Award/Certificate - Merit at Level 2", - ], - }, -]; -const sortedEducation = [...education].sort((a, b) => a.id - b.id); ---- - - -
-
-

{SITE.AUTHOR}

- Digital designer. -

- - - Devon, United Kingdom, GMT - -

- - - - - - - - - - - - - -
-
- Troy Lusty - -
- -
-

About

- My specific chosen area of focus is design, lighting, and rendering - focusing on 3D environments within software such as Blender and Unreal - Engine. Using either real-time or offline rendering techniques. In - addition to this I also have interests in web development and cyber - security. My portfolio of work can be found on my website at troylusty.com/projects. -

-
-
-

Experience

-
-
-
-

- - - Camouflage Store - -

- 2020 - Current -
-

- E-commerce Business Management -

-
- My role has me in charge of managing an online e-commerce store in - addition to creating, editing, and publishing informational YouTube and - social media content for a family run outdoors store. This includes the - recent redesign and also any maintenance and general upkeep of the site - with all its related systems. -
    -
  • Migration of content to Shopify
  • -
  • Branding refresh and site redesign
  • -
  • VPS setup and self-hosted analytics platform
  • -
-
-
-
-
-
-

- Smaller Roles -

-
-

Production Assistant

-
- SDC Radiant Rumble (2024) -
-

Photogrammetrist

-
- Paignton Picture House (2023) -
-
-
-
-

Education

- { - sortedEducation.map((education) => ( -
-
-
-

{education.school}

-
- {education.dates} -
-
-
-
- {education.course} -
    - {education.description.map((line) => ( -
  • {line}
  • - ))} -
-
-
- )) - } -
-
-

Skills & Tools

    - { - sortedSkills.map((skill) => ( -
  • - {skill.name} -
  • - )) - } -
-
-
-

Projects

-
    - { - sortedProjects.map((project) => ( -
  1. -
    -
    - <> -

    - - - {project.name} - -

    - -

    - {project.description} -

    - -
    -
    -
    -
    - {project.tags.map((tag) => ( -
    - {tag} -
    - ))} -
    -
    -
  2. - )) - } -
-
-
diff --git a/src/pages/cv.mdx b/src/pages/cv.mdx new file mode 100644 index 0000000..392bfe3 --- /dev/null +++ b/src/pages/cv.mdx @@ -0,0 +1,62 @@ +--- +title: Troy Lusty +description: Curriculum Vitae +layout: "@layouts/Cv.astro" +--- + +import Projects from "@components/CvProjects.astro"; + +## About + +I'm a [Game Arts and Design](#education) degree student with a chosen area of focus on the design, lighting, and rendering of 3D environments. Using either real-time or offline rendering techniques in software packages such as Blender and Unreal Engine. In addition to this I also have an interest in web development, graphic design, and cyber security which make up a large part of my hobbies. My current portfolio of work can be found on my website at [troylusty.com/projects](/projects). + +--- + +## Experience + +### **E-commerce Business Management**, [Camouflage Store](/projects/camouflage-store) (2020 - Current) + +My role has me in charge of managing an online e-commerce store in addition to creating, editing, and publishing informational YouTube and social media content for a family run outdoors store. This includes the recent branding redesign, migration of content to Shopify, and any maintenance or general upkeep of the site with all its related systems, such as the self-hosted analytics platform. + +### Volunteering + +- **Production Assistant**, SDC Radiant Rumble (2024) +- **Photogrammetrist**, Paignton Picture House (2023) + +--- + +## Education + +### **BA (Hons) Game Arts and Design**, University of Plymouth (2024 - 2025) + +- 1st year: Estimated completion May 2025 + +### **FdA Games and Interactive Design**, University Centre South Devon (2022 - 2024) + +- 2nd year: 70.25% State Aggregate Mark +- 1st year: 69.43% State Aggregate Mark + +### **UAL Level 3 Extended Diploma in Creative Media Production and Technology**, South Devon College (2020 - 2022) + +- 2nd year: Extended Diploma - Distinction +- 1st year: Diploma - Distinction + +### **BTEC & A-level**, Kennicott Sixth Form (2018 - 2020) + +- Pearson BTEC Level 3 National Extended Diploma in Art and Design - Distinction Merit Merit +- AQA GCE/A Computer Science ADV (Python) - C + +### **GCSEs & Cambridge Nationals qualification**, King Edward VI Community College (2014 - 2018) + +- 10 GCSEs including Maths and English +- OCR Cambridge Nationals Creative iMedia Level 1/2 Award/Certificate - Merit at Level 2 + +### Additional + +- Full drivers licence (A & B) + +--- + +## Projects + +