feat: commit unoptimised assets to cleanup later
|
@ -1,4 +1,4 @@
|
||||||
import { defineConfig } from "astro/config";
|
import { defineConfig, fontProviders } from "astro/config";
|
||||||
import sitemap from "@astrojs/sitemap";
|
import sitemap from "@astrojs/sitemap";
|
||||||
import rehypeExternalLinks from "rehype-external-links";
|
import rehypeExternalLinks from "rehype-external-links";
|
||||||
import mdx from "@astrojs/mdx";
|
import mdx from "@astrojs/mdx";
|
||||||
|
@ -31,4 +31,23 @@ export default defineConfig({
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
redirects: {
|
||||||
|
"/archive": "/projects/archive",
|
||||||
|
},
|
||||||
|
experimental: {
|
||||||
|
fonts: [
|
||||||
|
{
|
||||||
|
provider: fontProviders.fontsource(),
|
||||||
|
name: "Outfit",
|
||||||
|
cssVariable: "--font-outfit",
|
||||||
|
weights: ["100 900"],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
provider: fontProviders.fontsource(),
|
||||||
|
name: "Red Hat Mono",
|
||||||
|
cssVariable: "--font-red-hat-mono",
|
||||||
|
weights: ["300 700"],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
});
|
});
|
||||||
|
|
205
package-lock.json
generated
|
@ -9,16 +9,14 @@
|
||||||
"version": "0.0.1",
|
"version": "0.0.1",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@astrojs/check": "0.9.4",
|
"@astrojs/check": "0.9.4",
|
||||||
"@astrojs/mdx": "^4.2.5",
|
"@astrojs/mdx": "^4.2.6",
|
||||||
"@astrojs/rss": "^4.0.11",
|
"@astrojs/rss": "^4.0.11",
|
||||||
"@astrojs/sitemap": "3.3.1",
|
"@astrojs/sitemap": "3.3.1",
|
||||||
"@fontsource-variable/outfit": "^5.2.5",
|
"@tailwindcss/vite": "^4.1.5",
|
||||||
"@fontsource-variable/red-hat-mono": "^5.2.5",
|
"astro": "^5.7.10",
|
||||||
"@tailwindcss/vite": "^4.1.4",
|
|
||||||
"astro": "^5.7.7",
|
|
||||||
"astro-icon": "^1.1.5",
|
"astro-icon": "^1.1.5",
|
||||||
"rehype-external-links": "^3.0.0",
|
"rehype-external-links": "^3.0.0",
|
||||||
"tailwindcss": "^4.1.4",
|
"tailwindcss": "^4.1.5",
|
||||||
"typescript": "^5.8.3"
|
"typescript": "^5.8.3"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
@ -154,9 +152,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@astrojs/mdx": {
|
"node_modules/@astrojs/mdx": {
|
||||||
"version": "4.2.5",
|
"version": "4.2.6",
|
||||||
"resolved": "https://registry.npmjs.org/@astrojs/mdx/-/mdx-4.2.5.tgz",
|
"resolved": "https://registry.npmjs.org/@astrojs/mdx/-/mdx-4.2.6.tgz",
|
||||||
"integrity": "sha512-iKGu9GssmypLWf6ycJu6OYa9E3W16KA2y3ApBPlZpz1pwR70xXEr2XugQUwxGfFCI2KcZLIND/9FdKM7ZXVffA==",
|
"integrity": "sha512-0i/GmOm6d0qq1/SCfcUgY/IjDc/bS0i42u7h85TkPFBmlFOcBZfkYhR5iyz6hZLwidvJOEq5yGfzt9B1Azku4w==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@astrojs/markdown-remark": "6.3.1",
|
"@astrojs/markdown-remark": "6.3.1",
|
||||||
|
@ -762,24 +760,6 @@
|
||||||
"node": ">=18"
|
"node": ">=18"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@fontsource-variable/outfit": {
|
|
||||||
"version": "5.2.5",
|
|
||||||
"resolved": "https://registry.npmjs.org/@fontsource-variable/outfit/-/outfit-5.2.5.tgz",
|
|
||||||
"integrity": "sha512-MejrIp6Cbmd3u5AZtsot8kmhZiyQM5CATsdcBB2hktYIrv5CVekRSUmFDXL4FpF7K70IvFp2ZMfImm5VhnVf7Q==",
|
|
||||||
"license": "OFL-1.1",
|
|
||||||
"funding": {
|
|
||||||
"url": "https://github.com/sponsors/ayuhito"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@fontsource-variable/red-hat-mono": {
|
|
||||||
"version": "5.2.5",
|
|
||||||
"resolved": "https://registry.npmjs.org/@fontsource-variable/red-hat-mono/-/red-hat-mono-5.2.5.tgz",
|
|
||||||
"integrity": "sha512-BP2zCfaBvjvx/+ijLYH6joqQ7aZyM5XecNuXSPUQ3G05fjU3q2MfEPT8CjIQ6LgsSpCxWOmrdlxOofDb/8pp2g==",
|
|
||||||
"license": "OFL-1.1",
|
|
||||||
"funding": {
|
|
||||||
"url": "https://github.com/sponsors/ayuhito"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@iconify-json/mdi": {
|
"node_modules/@iconify-json/mdi": {
|
||||||
"version": "1.2.3",
|
"version": "1.2.3",
|
||||||
"resolved": "https://registry.npmjs.org/@iconify-json/mdi/-/mdi-1.2.3.tgz",
|
"resolved": "https://registry.npmjs.org/@iconify-json/mdi/-/mdi-1.2.3.tgz",
|
||||||
|
@ -1644,44 +1624,44 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@tailwindcss/node": {
|
"node_modules/@tailwindcss/node": {
|
||||||
"version": "4.1.4",
|
"version": "4.1.5",
|
||||||
"resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.4.tgz",
|
"resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.5.tgz",
|
||||||
"integrity": "sha512-MT5118zaiO6x6hNA04OWInuAiP1YISXql8Z+/Y8iisV5nuhM8VXlyhRuqc2PEviPszcXI66W44bCIk500Oolhw==",
|
"integrity": "sha512-CBhSWo0vLnWhXIvpD0qsPephiaUYfHUX3U9anwDaHZAeuGpTiB3XmsxPAN6qX7bFhipyGBqOa1QYQVVhkOUGxg==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"enhanced-resolve": "^5.18.1",
|
"enhanced-resolve": "^5.18.1",
|
||||||
"jiti": "^2.4.2",
|
"jiti": "^2.4.2",
|
||||||
"lightningcss": "1.29.2",
|
"lightningcss": "1.29.2",
|
||||||
"tailwindcss": "4.1.4"
|
"tailwindcss": "4.1.5"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@tailwindcss/oxide": {
|
"node_modules/@tailwindcss/oxide": {
|
||||||
"version": "4.1.4",
|
"version": "4.1.5",
|
||||||
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.1.4.tgz",
|
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.1.5.tgz",
|
||||||
"integrity": "sha512-p5wOpXyOJx7mKh5MXh5oKk+kqcz8T+bA3z/5VWWeQwFrmuBItGwz8Y2CHk/sJ+dNb9B0nYFfn0rj/cKHZyjahQ==",
|
"integrity": "sha512-1n4br1znquEvyW/QuqMKQZlBen+jxAbvyduU87RS8R3tUSvByAkcaMTkJepNIrTlYhD+U25K4iiCIxE6BGdRYA==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">= 10"
|
"node": ">= 10"
|
||||||
},
|
},
|
||||||
"optionalDependencies": {
|
"optionalDependencies": {
|
||||||
"@tailwindcss/oxide-android-arm64": "4.1.4",
|
"@tailwindcss/oxide-android-arm64": "4.1.5",
|
||||||
"@tailwindcss/oxide-darwin-arm64": "4.1.4",
|
"@tailwindcss/oxide-darwin-arm64": "4.1.5",
|
||||||
"@tailwindcss/oxide-darwin-x64": "4.1.4",
|
"@tailwindcss/oxide-darwin-x64": "4.1.5",
|
||||||
"@tailwindcss/oxide-freebsd-x64": "4.1.4",
|
"@tailwindcss/oxide-freebsd-x64": "4.1.5",
|
||||||
"@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.4",
|
"@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.5",
|
||||||
"@tailwindcss/oxide-linux-arm64-gnu": "4.1.4",
|
"@tailwindcss/oxide-linux-arm64-gnu": "4.1.5",
|
||||||
"@tailwindcss/oxide-linux-arm64-musl": "4.1.4",
|
"@tailwindcss/oxide-linux-arm64-musl": "4.1.5",
|
||||||
"@tailwindcss/oxide-linux-x64-gnu": "4.1.4",
|
"@tailwindcss/oxide-linux-x64-gnu": "4.1.5",
|
||||||
"@tailwindcss/oxide-linux-x64-musl": "4.1.4",
|
"@tailwindcss/oxide-linux-x64-musl": "4.1.5",
|
||||||
"@tailwindcss/oxide-wasm32-wasi": "4.1.4",
|
"@tailwindcss/oxide-wasm32-wasi": "4.1.5",
|
||||||
"@tailwindcss/oxide-win32-arm64-msvc": "4.1.4",
|
"@tailwindcss/oxide-win32-arm64-msvc": "4.1.5",
|
||||||
"@tailwindcss/oxide-win32-x64-msvc": "4.1.4"
|
"@tailwindcss/oxide-win32-x64-msvc": "4.1.5"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@tailwindcss/oxide-android-arm64": {
|
"node_modules/@tailwindcss/oxide-android-arm64": {
|
||||||
"version": "4.1.4",
|
"version": "4.1.5",
|
||||||
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.4.tgz",
|
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.5.tgz",
|
||||||
"integrity": "sha512-xMMAe/SaCN/vHfQYui3fqaBDEXMu22BVwQ33veLc8ep+DNy7CWN52L+TTG9y1K397w9nkzv+Mw+mZWISiqhmlA==",
|
"integrity": "sha512-LVvM0GirXHED02j7hSECm8l9GGJ1RfgpWCW+DRn5TvSaxVsv28gRtoL4aWKGnXqwvI3zu1GABeDNDVZeDPOQrw==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
|
@ -1695,9 +1675,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@tailwindcss/oxide-darwin-arm64": {
|
"node_modules/@tailwindcss/oxide-darwin-arm64": {
|
||||||
"version": "4.1.4",
|
"version": "4.1.5",
|
||||||
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.4.tgz",
|
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.5.tgz",
|
||||||
"integrity": "sha512-JGRj0SYFuDuAGilWFBlshcexev2hOKfNkoX+0QTksKYq2zgF9VY/vVMq9m8IObYnLna0Xlg+ytCi2FN2rOL0Sg==",
|
"integrity": "sha512-//TfCA3pNrgnw4rRJOqavW7XUk8gsg9ddi8cwcsWXp99tzdBAZW0WXrD8wDyNbqjW316Pk2hiN/NJx/KWHl8oA==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
|
@ -1711,9 +1691,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@tailwindcss/oxide-darwin-x64": {
|
"node_modules/@tailwindcss/oxide-darwin-x64": {
|
||||||
"version": "4.1.4",
|
"version": "4.1.5",
|
||||||
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.4.tgz",
|
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.5.tgz",
|
||||||
"integrity": "sha512-sdDeLNvs3cYeWsEJ4H1DvjOzaGios4QbBTNLVLVs0XQ0V95bffT3+scptzYGPMjm7xv4+qMhCDrkHwhnUySEzA==",
|
"integrity": "sha512-XQorp3Q6/WzRd9OalgHgaqgEbjP3qjHrlSUb5k1EuS1Z9NE9+BbzSORraO+ecW432cbCN7RVGGL/lSnHxcd+7Q==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
|
@ -1727,9 +1707,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@tailwindcss/oxide-freebsd-x64": {
|
"node_modules/@tailwindcss/oxide-freebsd-x64": {
|
||||||
"version": "4.1.4",
|
"version": "4.1.5",
|
||||||
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.4.tgz",
|
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.5.tgz",
|
||||||
"integrity": "sha512-VHxAqxqdghM83HslPhRsNhHo91McsxRJaEnShJOMu8mHmEj9Ig7ToHJtDukkuLWLzLboh2XSjq/0zO6wgvykNA==",
|
"integrity": "sha512-bPrLWbxo8gAo97ZmrCbOdtlz/Dkuy8NK97aFbVpkJ2nJ2Jo/rsCbu0TlGx8joCuA3q6vMWTSn01JY46iwG+clg==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
|
@ -1743,9 +1723,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": {
|
"node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": {
|
||||||
"version": "4.1.4",
|
"version": "4.1.5",
|
||||||
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.4.tgz",
|
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.5.tgz",
|
||||||
"integrity": "sha512-OTU/m/eV4gQKxy9r5acuesqaymyeSCnsx1cFto/I1WhPmi5HDxX1nkzb8KYBiwkHIGg7CTfo/AcGzoXAJBxLfg==",
|
"integrity": "sha512-1gtQJY9JzMAhgAfvd/ZaVOjh/Ju/nCoAsvOVJenWZfs05wb8zq+GOTnZALWGqKIYEtyNpCzvMk+ocGpxwdvaVg==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm"
|
"arm"
|
||||||
],
|
],
|
||||||
|
@ -1759,9 +1739,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@tailwindcss/oxide-linux-arm64-gnu": {
|
"node_modules/@tailwindcss/oxide-linux-arm64-gnu": {
|
||||||
"version": "4.1.4",
|
"version": "4.1.5",
|
||||||
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.4.tgz",
|
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.5.tgz",
|
||||||
"integrity": "sha512-hKlLNvbmUC6z5g/J4H+Zx7f7w15whSVImokLPmP6ff1QqTVE+TxUM9PGuNsjHvkvlHUtGTdDnOvGNSEUiXI1Ww==",
|
"integrity": "sha512-dtlaHU2v7MtdxBXoqhxwsWjav7oim7Whc6S9wq/i/uUMTWAzq/gijq1InSgn2yTnh43kR+SFvcSyEF0GCNu1PQ==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
|
@ -1775,9 +1755,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@tailwindcss/oxide-linux-arm64-musl": {
|
"node_modules/@tailwindcss/oxide-linux-arm64-musl": {
|
||||||
"version": "4.1.4",
|
"version": "4.1.5",
|
||||||
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.4.tgz",
|
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.5.tgz",
|
||||||
"integrity": "sha512-X3As2xhtgPTY/m5edUtddmZ8rCruvBvtxYLMw9OsZdH01L2gS2icsHRwxdU0dMItNfVmrBezueXZCHxVeeb7Aw==",
|
"integrity": "sha512-fg0F6nAeYcJ3CriqDT1iVrqALMwD37+sLzXs8Rjy8Z1ZHshJoYceodfyUwGJEsQoTyWbliFNRs2wMQNXtT7MVA==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
|
@ -1791,9 +1771,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@tailwindcss/oxide-linux-x64-gnu": {
|
"node_modules/@tailwindcss/oxide-linux-x64-gnu": {
|
||||||
"version": "4.1.4",
|
"version": "4.1.5",
|
||||||
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.4.tgz",
|
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.5.tgz",
|
||||||
"integrity": "sha512-2VG4DqhGaDSmYIu6C4ua2vSLXnJsb/C9liej7TuSO04NK+JJJgJucDUgmX6sn7Gw3Cs5ZJ9ZLrnI0QRDOjLfNQ==",
|
"integrity": "sha512-SO+F2YEIAHa1AITwc8oPwMOWhgorPzzcbhWEb+4oLi953h45FklDmM8dPSZ7hNHpIk9p/SCZKUYn35t5fjGtHA==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
|
@ -1807,9 +1787,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@tailwindcss/oxide-linux-x64-musl": {
|
"node_modules/@tailwindcss/oxide-linux-x64-musl": {
|
||||||
"version": "4.1.4",
|
"version": "4.1.5",
|
||||||
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.4.tgz",
|
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.5.tgz",
|
||||||
"integrity": "sha512-v+mxVgH2kmur/X5Mdrz9m7TsoVjbdYQT0b4Z+dr+I4RvreCNXyCFELZL/DO0M1RsidZTrm6O1eMnV6zlgEzTMQ==",
|
"integrity": "sha512-6UbBBplywkk/R+PqqioskUeXfKcBht3KU7juTi1UszJLx0KPXUo10v2Ok04iBJIaDPkIFkUOVboXms5Yxvaz+g==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
|
@ -1823,9 +1803,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@tailwindcss/oxide-wasm32-wasi": {
|
"node_modules/@tailwindcss/oxide-wasm32-wasi": {
|
||||||
"version": "4.1.4",
|
"version": "4.1.5",
|
||||||
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.4.tgz",
|
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.5.tgz",
|
||||||
"integrity": "sha512-2TLe9ir+9esCf6Wm+lLWTMbgklIjiF0pbmDnwmhR9MksVOq+e8aP3TSsXySnBDDvTTVd/vKu1aNttEGj3P6l8Q==",
|
"integrity": "sha512-hwALf2K9FHuiXTPqmo1KeOb83fTRNbe9r/Ixv9ZNQ/R24yw8Ge1HOWDDgTdtzntIaIUJG5dfXCf4g9AD4RiyhQ==",
|
||||||
"bundleDependencies": [
|
"bundleDependencies": [
|
||||||
"@napi-rs/wasm-runtime",
|
"@napi-rs/wasm-runtime",
|
||||||
"@emnapi/core",
|
"@emnapi/core",
|
||||||
|
@ -1840,10 +1820,10 @@
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"optional": true,
|
"optional": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@emnapi/core": "^1.4.0",
|
"@emnapi/core": "^1.4.3",
|
||||||
"@emnapi/runtime": "^1.4.0",
|
"@emnapi/runtime": "^1.4.3",
|
||||||
"@emnapi/wasi-threads": "^1.0.1",
|
"@emnapi/wasi-threads": "^1.0.2",
|
||||||
"@napi-rs/wasm-runtime": "^0.2.8",
|
"@napi-rs/wasm-runtime": "^0.2.9",
|
||||||
"@tybys/wasm-util": "^0.9.0",
|
"@tybys/wasm-util": "^0.9.0",
|
||||||
"tslib": "^2.8.0"
|
"tslib": "^2.8.0"
|
||||||
},
|
},
|
||||||
|
@ -1852,9 +1832,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@tailwindcss/oxide-win32-arm64-msvc": {
|
"node_modules/@tailwindcss/oxide-win32-arm64-msvc": {
|
||||||
"version": "4.1.4",
|
"version": "4.1.5",
|
||||||
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.4.tgz",
|
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.5.tgz",
|
||||||
"integrity": "sha512-VlnhfilPlO0ltxW9/BgfLI5547PYzqBMPIzRrk4W7uupgCt8z6Trw/tAj6QUtF2om+1MH281Pg+HHUJoLesmng==",
|
"integrity": "sha512-oDKncffWzaovJbkuR7/OTNFRJQVdiw/n8HnzaCItrNQUeQgjy7oUiYpsm9HUBgpmvmDpSSbGaCa2Evzvk3eFmA==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
|
@ -1868,9 +1848,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@tailwindcss/oxide-win32-x64-msvc": {
|
"node_modules/@tailwindcss/oxide-win32-x64-msvc": {
|
||||||
"version": "4.1.4",
|
"version": "4.1.5",
|
||||||
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.4.tgz",
|
"resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.5.tgz",
|
||||||
"integrity": "sha512-+7S63t5zhYjslUGb8NcgLpFXD+Kq1F/zt5Xv5qTv7HaFTG/DHyHD9GA6ieNAxhgyA4IcKa/zy7Xx4Oad2/wuhw==",
|
"integrity": "sha512-WiR4dtyrFdbb+ov0LK+7XsFOsG+0xs0PKZKkt41KDn9jYpO7baE3bXiudPVkTqUEwNfiglCygQHl2jklvSBi7Q==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
|
@ -1900,14 +1880,14 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@tailwindcss/vite": {
|
"node_modules/@tailwindcss/vite": {
|
||||||
"version": "4.1.4",
|
"version": "4.1.5",
|
||||||
"resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.1.4.tgz",
|
"resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.1.5.tgz",
|
||||||
"integrity": "sha512-4UQeMrONbvrsXKXXp/uxmdEN5JIJ9RkH7YVzs6AMxC/KC1+Np7WZBaNIco7TEjlkthqxZbt8pU/ipD+hKjm80A==",
|
"integrity": "sha512-FE1stRoqdHSb7RxesMfCXE8icwI1W6zGE/512ae3ZDrpkQYTTYeSyUJPRCjZd8CwVAhpDUbi1YR8pcZioFJQ/w==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@tailwindcss/node": "4.1.4",
|
"@tailwindcss/node": "4.1.5",
|
||||||
"@tailwindcss/oxide": "4.1.4",
|
"@tailwindcss/oxide": "4.1.5",
|
||||||
"tailwindcss": "4.1.4"
|
"tailwindcss": "4.1.5"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"vite": "^5.2.0 || ^6"
|
"vite": "^5.2.0 || ^6"
|
||||||
|
@ -2311,9 +2291,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/astro": {
|
"node_modules/astro": {
|
||||||
"version": "5.7.7",
|
"version": "5.7.10",
|
||||||
"resolved": "https://registry.npmjs.org/astro/-/astro-5.7.7.tgz",
|
"resolved": "https://registry.npmjs.org/astro/-/astro-5.7.10.tgz",
|
||||||
"integrity": "sha512-nmp8U3oQLZ/eDlobF1UG0hiSycVvHrVyPDMXZxuohpd24Z2aO2Ea0YnfZxS5Sx4uh9c8UBxy4fHTcoQlXNx3TQ==",
|
"integrity": "sha512-9TQcFZqP2w6//JXXUHfw8/5PX7KUx9EkG5O3m+hISuyeUztvjY1q5+p7+C5HiXyg24Zs3KkpieoL5BGRXGCAGA==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@astrojs/compiler": "^2.11.0",
|
"@astrojs/compiler": "^2.11.0",
|
||||||
|
@ -2363,11 +2343,11 @@
|
||||||
"tinyglobby": "^0.2.12",
|
"tinyglobby": "^0.2.12",
|
||||||
"tsconfck": "^3.1.5",
|
"tsconfck": "^3.1.5",
|
||||||
"ultrahtml": "^1.6.0",
|
"ultrahtml": "^1.6.0",
|
||||||
"unifont": "~0.4.0",
|
"unifont": "~0.4.1",
|
||||||
"unist-util-visit": "^5.0.0",
|
"unist-util-visit": "^5.0.0",
|
||||||
"unstorage": "^1.15.0",
|
"unstorage": "^1.15.0",
|
||||||
"vfile": "^6.0.3",
|
"vfile": "^6.0.3",
|
||||||
"vite": "^6.2.6",
|
"vite": "^6.3.4",
|
||||||
"vitefu": "^1.0.6",
|
"vitefu": "^1.0.6",
|
||||||
"xxhash-wasm": "^1.1.0",
|
"xxhash-wasm": "^1.1.0",
|
||||||
"yargs-parser": "^21.1.1",
|
"yargs-parser": "^21.1.1",
|
||||||
|
@ -3665,9 +3645,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/fdir": {
|
"node_modules/fdir": {
|
||||||
"version": "6.4.3",
|
"version": "6.4.4",
|
||||||
"resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.3.tgz",
|
"resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.4.tgz",
|
||||||
"integrity": "sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==",
|
"integrity": "sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"picomatch": "^3 || ^4"
|
"picomatch": "^3 || ^4"
|
||||||
|
@ -7343,9 +7323,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/tailwindcss": {
|
"node_modules/tailwindcss": {
|
||||||
"version": "4.1.4",
|
"version": "4.1.5",
|
||||||
"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.4.tgz",
|
"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.5.tgz",
|
||||||
"integrity": "sha512-1ZIUqtPITFbv/DxRmDr5/agPqJwF69d24m9qmM1939TJehgY539CtzeZRjbLt5G6fSy/7YqqYsfvoTEw9xUI2A==",
|
"integrity": "sha512-nYtSPfWGDiWgCkwQG/m+aX83XCwf62sBgg3bIlNiiOcggnS1x3uVRDAuyelBFL+vJdOPPCGElxv9DjHJjRHiVA==",
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/tapable": {
|
"node_modules/tapable": {
|
||||||
|
@ -7396,12 +7376,12 @@
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/tinyglobby": {
|
"node_modules/tinyglobby": {
|
||||||
"version": "0.2.12",
|
"version": "0.2.13",
|
||||||
"resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.12.tgz",
|
"resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.13.tgz",
|
||||||
"integrity": "sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==",
|
"integrity": "sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"fdir": "^6.4.3",
|
"fdir": "^6.4.4",
|
||||||
"picomatch": "^4.0.2"
|
"picomatch": "^4.0.2"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
|
@ -7894,14 +7874,17 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/vite": {
|
"node_modules/vite": {
|
||||||
"version": "6.2.6",
|
"version": "6.3.4",
|
||||||
"resolved": "https://registry.npmjs.org/vite/-/vite-6.2.6.tgz",
|
"resolved": "https://registry.npmjs.org/vite/-/vite-6.3.4.tgz",
|
||||||
"integrity": "sha512-9xpjNl3kR4rVDZgPNdTL0/c6ao4km69a/2ihNQbcANz8RuCOK3hQBmLSJf3bRKVQjVMda+YvizNE8AwvogcPbw==",
|
"integrity": "sha512-BiReIiMS2fyFqbqNT/Qqt4CVITDU9M9vE+DKcVAsB+ZV0wvTKd+3hMbkpxz1b+NmEDMegpVbisKiAZOnvO92Sw==",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"esbuild": "^0.25.0",
|
"esbuild": "^0.25.0",
|
||||||
|
"fdir": "^6.4.4",
|
||||||
|
"picomatch": "^4.0.2",
|
||||||
"postcss": "^8.5.3",
|
"postcss": "^8.5.3",
|
||||||
"rollup": "^4.30.1"
|
"rollup": "^4.34.9",
|
||||||
|
"tinyglobby": "^0.2.13"
|
||||||
},
|
},
|
||||||
"bin": {
|
"bin": {
|
||||||
"vite": "bin/vite.js"
|
"vite": "bin/vite.js"
|
||||||
|
|
10
package.json
|
@ -13,16 +13,14 @@
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@astrojs/check": "0.9.4",
|
"@astrojs/check": "0.9.4",
|
||||||
"@astrojs/mdx": "^4.2.5",
|
"@astrojs/mdx": "^4.2.6",
|
||||||
"@astrojs/rss": "^4.0.11",
|
"@astrojs/rss": "^4.0.11",
|
||||||
"@astrojs/sitemap": "3.3.1",
|
"@astrojs/sitemap": "3.3.1",
|
||||||
"@fontsource-variable/outfit": "^5.2.5",
|
"@tailwindcss/vite": "^4.1.5",
|
||||||
"@fontsource-variable/red-hat-mono": "^5.2.5",
|
"astro": "^5.7.10",
|
||||||
"@tailwindcss/vite": "^4.1.4",
|
|
||||||
"astro": "^5.7.7",
|
|
||||||
"astro-icon": "^1.1.5",
|
"astro-icon": "^1.1.5",
|
||||||
"rehype-external-links": "^3.0.0",
|
"rehype-external-links": "^3.0.0",
|
||||||
"tailwindcss": "^4.1.4",
|
"tailwindcss": "^4.1.5",
|
||||||
"typescript": "^5.8.3"
|
"typescript": "^5.8.3"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
|
|
@ -9,7 +9,7 @@ const { href, link } = Astro.props;
|
||||||
|
|
||||||
<a href={`${href}`}>
|
<a href={`${href}`}>
|
||||||
<div
|
<div
|
||||||
class="bg-button text-secondary hover:bg-button-active flex w-fit flex-row items-center gap-1 justify-self-center rounded-full px-3 py-1.5 text-center text-sm font-medium text-nowrap capitalize transition-colors duration-300"
|
class="bg-button text-secondary hover:bg-button-active flex w-fit flex-row items-center gap-1 justify-self-center rounded-md px-3 py-1.5 text-center text-sm font-medium text-nowrap capitalize transition-colors duration-300"
|
||||||
>
|
>
|
||||||
{link}
|
{link}
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -78,7 +78,7 @@ const sortedProjects = [...projects].sort((a, b) => a.id - b.id);
|
||||||
{project.tags.map((tag) => (
|
{project.tags.map((tag) => (
|
||||||
<a
|
<a
|
||||||
href={`/tags/${createSlug(tag)}`}
|
href={`/tags/${createSlug(tag)}`}
|
||||||
class="bg-button text-secondary hover:bg-button-active flex w-fit flex-row items-center gap-1 justify-self-center rounded-full px-2 py-1 text-center font-sans text-[10px] font-light text-nowrap capitalize no-underline transition-colors duration-300"
|
class="bg-button text-secondary hover:bg-button-active flex w-fit flex-row items-center gap-1 justify-self-center rounded-sm px-2 py-1 text-center font-sans text-[10px] font-light text-nowrap capitalize no-underline transition-colors duration-300"
|
||||||
>
|
>
|
||||||
{tag}
|
{tag}
|
||||||
</a>
|
</a>
|
||||||
|
|
|
@ -17,16 +17,15 @@ const { items } = Astro.props as Props;
|
||||||
<div class="grid grid-cols-1 gap-3 md:grid-cols-2">
|
<div class="grid grid-cols-1 gap-3 md:grid-cols-2">
|
||||||
{
|
{
|
||||||
items.map((item: Item) => (
|
items.map((item: Item) => (
|
||||||
<div class="aspect-[2/1] flex-col overflow-hidden rounded-sm">
|
<div class="flex-col overflow-hidden rounded-sm">
|
||||||
{item.src && (
|
{item.src && (
|
||||||
<a href={item.src.src} target="_blank">
|
<Image
|
||||||
<Image
|
src={item.src}
|
||||||
src={item.src}
|
alt={item.alt}
|
||||||
alt={item.alt}
|
title={item.alt}
|
||||||
loading="eager"
|
loading="eager"
|
||||||
class="mt-0 mb-0 aspect-[2/1] h-full w-full cursor-zoom-in object-cover transition-all duration-300 ease-in-out hover:brightness-50"
|
class="mt-0 mb-0 h-full max-h-[90svh] w-full object-cover"
|
||||||
/>
|
/>
|
||||||
</a>
|
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
))
|
))
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
import { SITE } from "@consts";
|
import { SITE } from "@consts";
|
||||||
import gradient from "../../public/assets/gradient.avif";
|
import gradient from "../../public/assets/gradient.avif";
|
||||||
import { ClientRouter } from "astro:transitions";
|
import { ClientRouter } from "astro:transitions";
|
||||||
|
import { Font } from "astro:assets";
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
title: string;
|
title: string;
|
||||||
|
@ -20,9 +21,6 @@ let { tags } = Astro.props;
|
||||||
if (typeof tags !== "undefined") {
|
if (typeof tags !== "undefined") {
|
||||||
tags = SITE.KEYWORDS.concat(tags);
|
tags = SITE.KEYWORDS.concat(tags);
|
||||||
}
|
}
|
||||||
|
|
||||||
import outfit from "@fontsource-variable/outfit/files/outfit-latin-wght-normal.woff2?url";
|
|
||||||
import redhatmono from "@fontsource-variable/red-hat-mono/files/red-hat-mono-latin-wght-normal.woff2?url";
|
|
||||||
---
|
---
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
|
@ -96,18 +94,6 @@ import redhatmono from "@fontsource-variable/red-hat-mono/files/red-hat-mono-lat
|
||||||
<ClientRouter />
|
<ClientRouter />
|
||||||
|
|
||||||
<!-- Font Preload -->
|
<!-- Font Preload -->
|
||||||
<link
|
<Font cssVariable="--font-outfit" preload />
|
||||||
rel="preload"
|
<Font cssVariable="--font-red-hat-mono" preload />
|
||||||
as="font"
|
|
||||||
type="font/woff2"
|
|
||||||
href={outfit}
|
|
||||||
crossorigin="anonymous"
|
|
||||||
/>
|
|
||||||
<link
|
|
||||||
rel="preload"
|
|
||||||
as="font"
|
|
||||||
type="font/woff2"
|
|
||||||
href={redhatmono}
|
|
||||||
crossorigin="anonymous"
|
|
||||||
/>
|
|
||||||
</head>
|
</head>
|
||||||
|
|
|
@ -5,26 +5,26 @@
|
||||||
<span class="text-nowrap">Troy Lusty</span>
|
<span class="text-nowrap">Troy Lusty</span>
|
||||||
<span class="text-tertiary text-pretty">Digital Designer</span>
|
<span class="text-tertiary text-pretty">Digital Designer</span>
|
||||||
</h1>
|
</h1>
|
||||||
<div
|
<p
|
||||||
class="text-secondary/70 animate-reveal text-lg font-medium opacity-0 [animation-delay:0.1s]"
|
class="text-secondary/70 animate-reveal text-lg font-medium opacity-0 [animation-delay:0.1s]"
|
||||||
>
|
>
|
||||||
I am in my final year of studying on a Game Arts and Design BA (Hons) degree
|
I am in my final year of studying on a Game Arts and Design BA (Hons) degree
|
||||||
and on the side I manage online operations for a family run
|
and on the side I manage online operations for a family run
|
||||||
<a
|
<a
|
||||||
href="/projects/camouflage-store"
|
href="/projects/camouflage-store"
|
||||||
class="underline decoration-2 underline-offset-2 hover:no-underline"
|
class="text-secondary underline decoration-2 underline-offset-2 hover:no-underline"
|
||||||
>outdoor apparel business</a
|
>outdoor apparel business</a
|
||||||
>.
|
>.
|
||||||
</div>
|
</p>
|
||||||
<div
|
<p
|
||||||
class="text-tertiary animate-reveal text-lg font-medium opacity-0 [animation-delay:0.2s]"
|
class="text-tertiary animate-reveal text-lg font-medium opacity-0 [animation-delay:0.2s]"
|
||||||
>
|
>
|
||||||
Think I could help with a project you're working on?
|
Think I could help with a project you're working on?
|
||||||
<a
|
<a
|
||||||
href="mailto:hello@troylusty.com"
|
href="mailto:hello@troylusty.com"
|
||||||
class="ml-1 w-fit rounded-full bg-lime-500/20 px-2 py-1 text-sm text-lime-800 ring ring-lime-500 transition-colors duration-300 hover:bg-lime-500/30 dark:text-lime-200"
|
class="ml-1 w-fit rounded-sm bg-lime-500/20 px-2 py-1 text-sm text-lime-800 ring ring-lime-500 transition-colors duration-300 hover:bg-lime-500/30 dark:text-lime-200"
|
||||||
>
|
>
|
||||||
Send me a message
|
Send me a message
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</p>
|
||||||
</section>
|
</section>
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
<div
|
<div
|
||||||
class="prose prose-neutral dark:prose-invert prose-lg prose-img:max-h-[90svh] prose-img:rounded-sm prose-img:w-auto prose-img:max-w-full prose-video:max-h-[90svh] prose-video:rounded-sm prose-video:w-auto prose-video::max-w-full prose-a:hover:no-underline"
|
class="prose prose-neutral dark:prose-invert prose-lg prose-img:max-h-[90svh] prose-img:rounded-sm prose-img:w-auto prose-img:max-w-full prose-video:max-h-[90svh] prose-video:rounded-sm prose-video:w-auto prose-video::max-w-full prose-a:hover:no-underline prose-a:decoration-2 prose-a:underline-offset-2"
|
||||||
>
|
>
|
||||||
<slot />
|
<slot />
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -19,7 +19,7 @@ const next = items[(index + 1) % items.length];
|
||||||
|
|
||||||
{
|
{
|
||||||
items.length > 1 ? (
|
items.length > 1 ? (
|
||||||
<div class="animate-reveal mx-auto flex w-full flex-col-reverse items-center justify-between gap-4 opacity-0 [animation-delay:0.1s] md:flex-row">
|
<div class="animate-reveal mx-auto flex w-full flex-row flex-wrap items-center justify-between gap-2 opacity-0 [animation-delay:0.1s]">
|
||||||
<Button
|
<Button
|
||||||
href={`/${prev.collection}/${prev.slug}`}
|
href={`/${prev.collection}/${prev.slug}`}
|
||||||
link={`Previous: ${prev.data.title}`}
|
link={`Previous: ${prev.data.title}`}
|
||||||
|
|
|
@ -34,6 +34,11 @@ export const SITE: Site = {
|
||||||
href: "/sitemap-index.xml",
|
href: "/sitemap-index.xml",
|
||||||
icon: "mdi:sitemap",
|
icon: "mdi:sitemap",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "Curriculum vitae",
|
||||||
|
href: "/cv",
|
||||||
|
icon: "mdi:trophy",
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: "Email",
|
name: "Email",
|
||||||
href: "mailto:hello@troylusty.com",
|
href: "mailto:hello@troylusty.com",
|
||||||
|
@ -59,14 +64,6 @@ export const SITE: Site = {
|
||||||
name: "Posts",
|
name: "Posts",
|
||||||
href: "/posts",
|
href: "/posts",
|
||||||
},
|
},
|
||||||
{
|
|
||||||
name: "Archive",
|
|
||||||
href: "/archive",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "CV",
|
|
||||||
href: "/cv",
|
|
||||||
},
|
|
||||||
],
|
],
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -87,11 +84,6 @@ export const POSTS: Metadata = {
|
||||||
DESCRIPTION: "A collection of articles on topics I am passionate about.",
|
DESCRIPTION: "A collection of articles on topics I am passionate about.",
|
||||||
};
|
};
|
||||||
|
|
||||||
export const ARCHIVE: Metadata = {
|
|
||||||
TITLE: "Archive",
|
|
||||||
DESCRIPTION: "A collection of small, unfinished, or historic personal works.",
|
|
||||||
};
|
|
||||||
|
|
||||||
export const ABOUT: Metadata = {
|
export const ABOUT: Metadata = {
|
||||||
TITLE: "About",
|
TITLE: "About",
|
||||||
DESCRIPTION: "About me.",
|
DESCRIPTION: "About me.",
|
||||||
|
|
After Width: | Height: | Size: 103 KiB |
Before Width: | Height: | Size: 94 KiB After Width: | Height: | Size: 94 KiB |
Before Width: | Height: | Size: 2.2 MiB After Width: | Height: | Size: 2.2 MiB |
Before Width: | Height: | Size: 2.5 MiB After Width: | Height: | Size: 2.5 MiB |
Before Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 8.9 KiB |
Before Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 20 KiB |
Before Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 106 KiB |
Before Width: | Height: | Size: 1.9 MiB |
Before Width: | Height: | Size: 1.7 MiB |
Before Width: | Height: | Size: 2 MiB |
Before Width: | Height: | Size: 1.8 MiB |
Before Width: | Height: | Size: 2.3 MiB |
Before Width: | Height: | Size: 216 KiB |
Before Width: | Height: | Size: 282 KiB |
Before Width: | Height: | Size: 663 KiB |
Before Width: | Height: | Size: 2.7 MiB |
Before Width: | Height: | Size: 2.9 MiB |
Before Width: | Height: | Size: 3 MiB |
Before Width: | Height: | Size: 3.1 MiB |
Before Width: | Height: | Size: 3 MiB |
Before Width: | Height: | Size: 3.1 MiB |
Before Width: | Height: | Size: 180 KiB |
Before Width: | Height: | Size: 2.4 MiB |
Before Width: | Height: | Size: 870 KiB |
Before Width: | Height: | Size: 2.7 MiB |
Before Width: | Height: | Size: 2.4 MiB |
Before Width: | Height: | Size: 133 KiB |
Before Width: | Height: | Size: 113 KiB |
Before Width: | Height: | Size: 132 KiB |
Before Width: | Height: | Size: 121 KiB |
Before Width: | Height: | Size: 122 KiB |
Before Width: | Height: | Size: 133 KiB |
Before Width: | Height: | Size: 90 KiB |
Before Width: | Height: | Size: 7.1 KiB |
|
@ -1,5 +1,5 @@
|
||||||
---
|
---
|
||||||
title: "A Long Way Down (Demo)"
|
title: "A Long Way Down"
|
||||||
description: "A short, atmospheric linear adventure created for my FdA Games and Interactive Design degree."
|
description: "A short, atmospheric linear adventure created for my FdA Games and Interactive Design degree."
|
||||||
date: 2023-05-11
|
date: 2023-05-11
|
||||||
featured: true
|
featured: true
|
||||||
|
@ -9,76 +9,62 @@ categories: ["education"]
|
||||||
extraAuthors: [{ name: "Sam Griffiths", url: "https://samgriffiths.dev" }]
|
extraAuthors: [{ name: "Sam Griffiths", url: "https://samgriffiths.dev" }]
|
||||||
---
|
---
|
||||||
|
|
||||||
|
import Gallery from "@components/Gallery.astro";
|
||||||
|
|
||||||
|
import image1 from "alwd-img1.jpg";
|
||||||
|
import image2 from "alwd-img2.jpg";
|
||||||
|
import image3 from "alwd-img3.jpg";
|
||||||
|
import image4 from "alwd-img4.jpg";
|
||||||
|
import image5 from "alwd-img5.jpg";
|
||||||
|
import image6 from "alwd-img6.jpg";
|
||||||
|
import image7 from "29ff3-alwd-introarea-24042023.jpg";
|
||||||
|
import image8 from "Screenshot_20230402_222043.png";
|
||||||
|
import image9 from "Screenshot from 2023-03-07 15-30-43.png";
|
||||||
|
import image10 from "Screenshot from 2023-03-01 20-02-00.jpg";
|
||||||
|
|
||||||
import alongwaydown_demo_walkthrough from "alongwaydown-demo-walkthrough.webm";
|
import alongwaydown_demo_walkthrough from "alongwaydown-demo-walkthrough.webm";
|
||||||
|
|
||||||
A Long Way Down is a short, atmospheric linear adventure created alongside my friend [Sam](https://samgriffiths.dev) as a project for our FdA Games and Interactive Design degree. My role was art direction including the lighting, level design, and majority of asset creation for the project. It is the follow up project to our previous work: [Nightmare](#nightmare), and was made to be an evolutionary improvement of it. Currently the [demo](https://samandtroy.itch.io/alongwaydown) is available to download and play on Itch.io.
|
A Long Way Down is a short, atmospheric linear adventure created alongside my friend Sam as a project for our FdA Games and Interactive Design degree. My role was art direction including the lighting, level design, and majority of asset creation for the project. This is the follow up project to our previous work: [Nightmare](#nightmare), and was made to be an evolutionary improvement of it. Currently the [demo](https://samandtroy.itch.io/alongwaydown) is available to download and play on Itch.io.
|
||||||
|
|
||||||
<video preload="metadata" controls>
|
<video preload="metadata" poster={image1.src} controls>
|
||||||
<source src={alongwaydown_demo_walkthrough} type="video/webm" />
|
<source src={alongwaydown_demo_walkthrough} type="video/webm" />
|
||||||
</video>
|
</video>
|
||||||
|
|
||||||
_Demo walkthrough_
|
<Gallery
|
||||||
|
items={[
|
||||||

|
{ src: image1, alt: "A Long Way Down Intro Showcase" },
|
||||||
|
{ src: image2, alt: "A Long Way Down Forest Showcase" },
|
||||||
_Intro_
|
{ src: image3, alt: "A Long Way Down Tree Bridge Showcase" },
|
||||||
|
{ src: image4, alt: "A Long Way Down Swamp Showcase" },
|
||||||

|
{ src: image5, alt: "A Long Way Down Final Climb" },
|
||||||
|
{ src: image6, alt: "A Long Way Down Cliff Jump" },
|
||||||
_Forest_
|
{ src: image7, alt: "Alternate night lighting idea" },
|
||||||
|
{ src: image8, alt: "Old colour grade on forest section" },
|
||||||

|
{ src: image9, alt: "Early environment stage" },
|
||||||
|
{ src: image10, alt: "Initial style experiments" },
|
||||||
_Tree bridge_
|
]}
|
||||||
|
/>
|
||||||

|
|
||||||
|
|
||||||
_Swamp_
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
_Final climb_
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
_Cliff jump_
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
_Alternate night lighting idea_
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
_Old colour grade on forest section_
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
_Early environment stage_
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
_Initial style experiments_
|
|
||||||
|
|
||||||
## Nightmare
|
## Nightmare
|
||||||
|
|
||||||
|
import image11 from "troy-lusty-nightmare.avif";
|
||||||
|
import image12 from "troy-lusty-nightmare-frame-1182.avif";
|
||||||
|
import image13 from "troy-lusty-highresscreenshot00000.png";
|
||||||
|
import image14 from "troy-lusty-untitled.png";
|
||||||
|
|
||||||
import nightmare from "nightmare.webm";
|
import nightmare from "nightmare.webm";
|
||||||
|
|
||||||
This is the environment I created in collaboration with Sam Griffiths for our Unit 8 - Developing a Creative Media Production Project - Final Major Project which concluded 2021-04-21. I was in charge of the art side of the project including asset production, composition, and lighting although we both helped one another out when necessary with blueprints etc. Additionally, I created this short cinematic in Unreal Engine's cinematic level sequencer by keyframing the transform values and focus distance of a camera.
|
This is the environment I created in collaboration with Sam Griffiths for our Unit 8 - Developing a Creative Media Production Project - Final Major Project which concluded 2021-04-21. I was in charge of the art side of the project including asset production, composition, and lighting. Additionally, I created this short cinematic in Unreal Engine's cinematic level sequencer by keyframing the transform values and focus distance of a camera.
|
||||||
|
|
||||||
<video preload="metadata" muted controls>
|
<video preload="metadata" muted controls>
|
||||||
<source src={nightmare} type="video/webm" />
|
<source src={nightmare} type="video/webm" />
|
||||||
</video>
|
</video>
|
||||||
|
|
||||||
_Environment cinematic_
|
<Gallery
|
||||||
|
items={[
|
||||||

|
{ src: image11, alt: "Frame 0600" },
|
||||||
|
{ src: image12, alt: "Frame 1182" },
|
||||||
_Frame 0600_
|
{ src: image13, alt: "Development image 1" },
|
||||||
|
{ src: image14, alt: "Development image 2" },
|
||||||

|
]}
|
||||||
|
/>
|
||||||
_Frame 1182_
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
_Frame 1700_
|
|
||||||
|
|
After Width: | Height: | Size: 1.4 MiB |
Before Width: | Height: | Size: 2.6 KiB |
BIN
src/content/projects/a-long-way-down/troy-lusty-untitled.png
Normal file
After Width: | Height: | Size: 2.4 MiB |
Before Width: | Height: | Size: 879 KiB After Width: | Height: | Size: 879 KiB |
Before Width: | Height: | Size: 296 KiB After Width: | Height: | Size: 296 KiB |
Before Width: | Height: | Size: 2.6 MiB After Width: | Height: | Size: 2.6 MiB |
Before Width: | Height: | Size: 3.3 MiB After Width: | Height: | Size: 3.3 MiB |
Before Width: | Height: | Size: 374 KiB After Width: | Height: | Size: 374 KiB |
Before Width: | Height: | Size: 83 KiB After Width: | Height: | Size: 83 KiB |
BIN
src/content/projects/archive/2023-01-05.jpg
Normal file
After Width: | Height: | Size: 174 KiB |
BIN
src/content/projects/archive/2023-04-18.avif
Normal file
After Width: | Height: | Size: 7.8 KiB |
Before Width: | Height: | Size: 199 KiB After Width: | Height: | Size: 199 KiB |
Before Width: | Height: | Size: 314 KiB After Width: | Height: | Size: 314 KiB |
Before Width: | Height: | Size: 329 KiB After Width: | Height: | Size: 329 KiB |
Before Width: | Height: | Size: 1.2 MiB After Width: | Height: | Size: 1.2 MiB |
Before Width: | Height: | Size: 808 KiB After Width: | Height: | Size: 808 KiB |
BIN
src/content/projects/archive/2024-07-19.jpg
Normal file
After Width: | Height: | Size: 191 KiB |
Before Width: | Height: | Size: 494 KiB After Width: | Height: | Size: 494 KiB |
Before Width: | Height: | Size: 306 KiB After Width: | Height: | Size: 306 KiB |
Before Width: | Height: | Size: 8.9 MiB After Width: | Height: | Size: 8.9 MiB |
Before Width: | Height: | Size: 20 MiB After Width: | Height: | Size: 20 MiB |
113
src/content/projects/archive/index.mdx
Normal file
|
@ -0,0 +1,113 @@
|
||||||
|
---
|
||||||
|
title: "Archive"
|
||||||
|
description: "A collection of smaller, unfinished, or historic personal works."
|
||||||
|
date: 2021-01-15
|
||||||
|
featured: true
|
||||||
|
image: { url: "2023-11-23.jpg", alt: "Ugolino and His Sons lighting" }
|
||||||
|
tags:
|
||||||
|
[
|
||||||
|
"blender",
|
||||||
|
"unreal engine",
|
||||||
|
"davinci resolve",
|
||||||
|
"photoshop",
|
||||||
|
"gimp",
|
||||||
|
"affinity photo",
|
||||||
|
]
|
||||||
|
categories: ["personal"]
|
||||||
|
---
|
||||||
|
|
||||||
|
import Gallery from "@components/Gallery.astro";
|
||||||
|
|
||||||
|
Whilst not all of these pieces are large enough to have their own project page, I still think they showcase what I am interested in and it didn't feel right to exclude them entirely. This page receives updates periodically.
|
||||||
|
|
||||||
|
import video2023_04_08 from "./2023-04-08.webm";
|
||||||
|
import video2023_02_08 from "./2023-02-08.webm";
|
||||||
|
import video2023_01_08 from "./2023-01-08.webm";
|
||||||
|
import video2023_07_19 from "./2023-07-19.webm";
|
||||||
|
|
||||||
|
<div class="mb-6 grid grid-cols-1 gap-3 md:grid-cols-2">
|
||||||
|
<video
|
||||||
|
preload="metadata"
|
||||||
|
autoplay
|
||||||
|
muted
|
||||||
|
loop
|
||||||
|
class="mt-0 mb-0 aspect-square h-full max-h-[90svh] w-full object-cover"
|
||||||
|
>
|
||||||
|
<source src={video2023_04_08} type="video/webm" />
|
||||||
|
</video>
|
||||||
|
<video
|
||||||
|
preload="metadata"
|
||||||
|
autoplay
|
||||||
|
muted
|
||||||
|
loop
|
||||||
|
class="mt-0 mb-0 aspect-square h-full max-h-[90svh] w-full object-cover"
|
||||||
|
>
|
||||||
|
<source src={video2023_02_08} type="video/webm" />
|
||||||
|
</video>
|
||||||
|
<video
|
||||||
|
preload="metadata"
|
||||||
|
autoplay
|
||||||
|
muted
|
||||||
|
loop
|
||||||
|
class="mt-0 mb-0 aspect-square h-full max-h-[90svh] w-full object-cover"
|
||||||
|
>
|
||||||
|
<source src={video2023_01_08} type="video/webm" />
|
||||||
|
</video>
|
||||||
|
<video
|
||||||
|
preload="metadata"
|
||||||
|
autoplay
|
||||||
|
muted
|
||||||
|
loop
|
||||||
|
class="mt-0 mb-0 aspect-square h-full max-h-[90svh] w-full object-cover"
|
||||||
|
>
|
||||||
|
<source src={video2023_07_19} type="video/webm" />
|
||||||
|
</video>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
import image2024_04_01 from "./2024-04-01.jpg";
|
||||||
|
import image2022_01_27 from "./2022-01-27.jpg";
|
||||||
|
import image2022_01_06 from "./2022-01-06.jpg";
|
||||||
|
import image2023_11_23 from "./2023-11-23.jpg";
|
||||||
|
import image2024_02_15 from "./2024-02-15.jpg";
|
||||||
|
import image2023_10_12 from "./2023-10-12.jpg";
|
||||||
|
import image2022_09_26 from "./2022-09-26.jpg";
|
||||||
|
import image2023_11_02 from "./2023-11-02.jpg";
|
||||||
|
import image2022_03_27 from "./2022-03-27.png";
|
||||||
|
import image2022_05_17 from "./2022-05-17.jpg";
|
||||||
|
import image2023_01_05 from "./2023-01-05.jpg";
|
||||||
|
import image2024_07_19 from "./2024-07-19.jpg";
|
||||||
|
import image2025_01_24 from "./2025-01-24.jpg";
|
||||||
|
import image2022_03_28 from "./2022-03-28.jpg";
|
||||||
|
import image2023_044_18 from "./2023-04-18.avif";
|
||||||
|
import imageforestfire from "./forestfire.jpg";
|
||||||
|
import imagedatsun from "./datsun.jpg";
|
||||||
|
import imageedit from "./edit.jpg";
|
||||||
|
import imagezomax from "./zomax.jpg";
|
||||||
|
import imagesea from "./sea.jpg";
|
||||||
|
import imagelovesongs from "./lovesongs-2-2153-P.jpg";
|
||||||
|
|
||||||
|
<Gallery
|
||||||
|
items={[
|
||||||
|
{ src: image2024_04_01, alt: "224 Torquay Road" },
|
||||||
|
{ src: image2022_01_27, alt: "Studying Spider" },
|
||||||
|
{ src: image2022_01_06, alt: "Firespline" },
|
||||||
|
{ src: image2023_11_23, alt: "Ugolino and His Sons lighting" },
|
||||||
|
{ src: image2024_02_15, alt: "Austin" },
|
||||||
|
{ src: image2023_10_12, alt: "Austin" },
|
||||||
|
{ src: image2022_09_26, alt: "Wes Cockx" },
|
||||||
|
{ src: image2023_11_02, alt: "Trees" },
|
||||||
|
{ src: image2022_03_27, alt: "Sewer" },
|
||||||
|
{ src: image2022_05_17, alt: "Hanging light fixtures" },
|
||||||
|
{ src: image2023_01_05, alt: "Digital Artefact: Corridor" },
|
||||||
|
{ src: image2024_07_19, alt: "DOF tiles" },
|
||||||
|
{ src: imageforestfire, alt: "Forest fire" },
|
||||||
|
{ src: image2025_01_24, alt: "Escalator" },
|
||||||
|
{ src: image2022_03_28, alt: "Astronaut" },
|
||||||
|
{ src: imagedatsun, alt: "Datsun" },
|
||||||
|
{ src: imagezomax, alt: "Zomax" },
|
||||||
|
{ src: imagesea, alt: "Sea" },
|
||||||
|
{ src: imagelovesongs, alt: "Love Songs record cover" },
|
||||||
|
{ src: image2023_044_18, alt: "Abstract swirl" },
|
||||||
|
{ src: imageedit, alt: "Little Nightmares" },
|
||||||
|
]}
|
||||||
|
/>
|
Before Width: | Height: | Size: 805 KiB After Width: | Height: | Size: 805 KiB |
Before Width: | Height: | Size: 545 KiB After Width: | Height: | Size: 545 KiB |
Before Width: | Height: | Size: 67 KiB After Width: | Height: | Size: 67 KiB |
|
@ -1,49 +0,0 @@
|
||||||
---
|
|
||||||
title: "Digital Artefact: Corridor (Incomplete)"
|
|
||||||
description: "A virtual production horror environment made in Unreal Engine 5 and inspired by The Shining."
|
|
||||||
date: 2023-01-20
|
|
||||||
image:
|
|
||||||
{
|
|
||||||
url: "troy-lusty-highresscreenshot05012023-2.avif",
|
|
||||||
alt: "Progress 5 for Digital Artefact: Corridor project",
|
|
||||||
}
|
|
||||||
tags: ["unreal engine", "blender", "davinci resolve", "photoshop"]
|
|
||||||
categories: ["education"]
|
|
||||||
---
|
|
||||||
|
|
||||||
import deltakey from "deltakey.webm";
|
|
||||||
import wallpaperpeel from "wallpaperpeel.webm";
|
|
||||||
|
|
||||||
The outcome I went into this project expecting was that I would produce an environment made entirely from scratch which I could create a short test virtual production shot in utilising a motion capture camera rig and live keying. Later I would then properly composite the two bits of footage together. All of the elements of this goal are presented here but sadly due to a data corruption issue, they were not able to be presented in a combined state. **The project is presented in the state it was upon the university deadline and is listed as incomplete.**
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
_Using Lumen for global illumination._
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
_Set the project to use deprecated hardware raytracing instead of Lumen, which resulted in the light spill on the walls being fixed._
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
_First steps of migrating the scene over to Unreal Engine. Focusing on recreating the lights from Blender into Lumen. I am having issues softening up the shadows being cast from the light shade and wall mounting._
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
_Modelled a new scene design by creating repeatable assets in Blender and utilising collection instancing._
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
_Initial idea made and presented in Blender for the project pitch._
|
|
||||||
|
|
||||||
<video preload="metadata" loop muted controls>
|
|
||||||
<source src={deltakey} type="video/webm" />
|
|
||||||
</video>
|
|
||||||
|
|
||||||
_Virtual production DaVinci Resolve delta key_
|
|
||||||
|
|
||||||
<video preload="metadata" loop muted controls>
|
|
||||||
<source src={wallpaperpeel} type="video/webm" />
|
|
||||||
</video>
|
|
||||||
|
|
||||||
_Wallpaper peel test_
|
|
Before Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 8.7 KiB |
Before Width: | Height: | Size: 22 KiB |
Before Width: | Height: | Size: 6.7 KiB |
Before Width: | Height: | Size: 21 KiB |
Before Width: | Height: | Size: 8.6 KiB |
Before Width: | Height: | Size: 27 KiB |
Before Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 26 KiB |
BIN
src/content/projects/kraken-in-the-cupboard/finalnoise.jpg
Normal file
After Width: | Height: | Size: 7.3 MiB |
|
@ -2,8 +2,8 @@
|
||||||
title: "Kraken in the Cupboard"
|
title: "Kraken in the Cupboard"
|
||||||
description: "Mythical depiction of the Kraken bursting its way out of a bookcase cupboard."
|
description: "Mythical depiction of the Kraken bursting its way out of a bookcase cupboard."
|
||||||
date: 2021-12-11
|
date: 2021-12-11
|
||||||
image: { url: "troy-lusty-kraken.avif", alt: "Kraken in the Cupboard final" }
|
image: { url: "finalnoise.jpg", alt: "Kraken in the Cupboard final" }
|
||||||
tags: ["blender"]
|
tags: ["blender", "affinity photo"]
|
||||||
categories: ["personal"]
|
categories: ["personal"]
|
||||||
featured: true
|
featured: true
|
||||||
---
|
---
|
||||||
|
@ -11,9 +11,7 @@ featured: true
|
||||||
Rendered using Cycles X, with all compositing done inside of Blender.
|
Rendered using Cycles X, with all compositing done inside of Blender.
|
||||||
I originally began making this to see how closely I could recreate my own dining room, but later decided that it could be pushed further and developed into a full scene by adding in some more elements. Created with some CC0 assets from ambientcg, polyhaven, blendswap, unsplash, and avopix.
|
I originally began making this to see how closely I could recreate my own dining room, but later decided that it could be pushed further and developed into a full scene by adding in some more elements. Created with some CC0 assets from ambientcg, polyhaven, blendswap, unsplash, and avopix.
|
||||||
|
|
||||||
_Approximate time taken: 28/11/2021 - 11/12/2021_
|

|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
_Final_
|
_Final_
|
||||||
|
|
||||||
|
@ -25,7 +23,7 @@ _Alternate idea_
|
||||||
|
|
||||||
_Early progress_
|
_Early progress_
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
_Main reference images_
|
_Main reference images_
|
||||||
|
|
||||||
|
|
BIN
src/content/projects/kraken-in-the-cupboard/referenceupload.jpg
Normal file
After Width: | Height: | Size: 474 KiB |
Before Width: | Height: | Size: 34 KiB |
Before Width: | Height: | Size: 37 KiB |