diff --git a/package-lock.json b/package-lock.json
index dcc37ef..55e254f 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -9,20 +9,20 @@
"version": "0.0.1",
"dependencies": {
"@astrojs/check": "0.9.4",
- "@astrojs/mdx": "^4.2.6",
+ "@astrojs/mdx": "^4.3.0",
"@astrojs/rss": "^4.0.11",
"@astrojs/sitemap": "3.4.0",
- "@tailwindcss/vite": "^4.1.7",
- "astro": "^5.7.13",
+ "@tailwindcss/vite": "^4.1.8",
+ "astro": "^5.8.0",
"astro-icon": "^1.1.5",
"rehype-external-links": "^3.0.0",
- "tailwindcss": "^4.1.7",
+ "tailwindcss": "^4.1.8",
"typescript": "^5.8.3"
},
"devDependencies": {
"@iconify-json/mdi": "^1.2.3",
"@tailwindcss/typography": "^0.5.16",
- "@types/node": "^22.15.18",
+ "@types/node": "^22.15.24",
"npm-check-updates": "^18.0.1",
"prettier": "^3.5.3",
"prettier-plugin-astro": "^0.14.1",
@@ -136,13 +136,13 @@
}
},
"node_modules/@astrojs/markdown-remark": {
- "version": "6.3.1",
- "resolved": "https://registry.npmjs.org/@astrojs/markdown-remark/-/markdown-remark-6.3.1.tgz",
- "integrity": "sha512-c5F5gGrkczUaTVgmMW9g1YMJGzOtRvjjhw6IfGuxarM6ct09MpwysP10US729dy07gg8y+ofVifezvP3BNsWZg==",
+ "version": "6.3.2",
+ "resolved": "https://registry.npmjs.org/@astrojs/markdown-remark/-/markdown-remark-6.3.2.tgz",
+ "integrity": "sha512-bO35JbWpVvyKRl7cmSJD822e8YA8ThR/YbUsciWNA7yTcqpIAL2hJDToWP5KcZBWxGT6IOdOkHSXARSNZc4l/Q==",
"license": "MIT",
"dependencies": {
"@astrojs/internal-helpers": "0.6.1",
- "@astrojs/prism": "3.2.0",
+ "@astrojs/prism": "3.3.0",
"github-slugger": "^2.0.0",
"hast-util-from-html": "^2.0.3",
"hast-util-to-text": "^4.0.2",
@@ -153,9 +153,9 @@
"rehype-stringify": "^10.0.1",
"remark-gfm": "^4.0.1",
"remark-parse": "^11.0.0",
- "remark-rehype": "^11.1.1",
+ "remark-rehype": "^11.1.2",
"remark-smartypants": "^3.0.2",
- "shiki": "^3.0.0",
+ "shiki": "^3.2.1",
"smol-toml": "^1.3.1",
"unified": "^11.0.5",
"unist-util-remove-position": "^5.0.0",
@@ -165,12 +165,12 @@
}
},
"node_modules/@astrojs/mdx": {
- "version": "4.2.6",
- "resolved": "https://registry.npmjs.org/@astrojs/mdx/-/mdx-4.2.6.tgz",
- "integrity": "sha512-0i/GmOm6d0qq1/SCfcUgY/IjDc/bS0i42u7h85TkPFBmlFOcBZfkYhR5iyz6hZLwidvJOEq5yGfzt9B1Azku4w==",
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/@astrojs/mdx/-/mdx-4.3.0.tgz",
+ "integrity": "sha512-OGX2KvPeBzjSSKhkCqrUoDMyzFcjKt5nTE5SFw3RdoLf0nrhyCXBQcCyclzWy1+P+XpOamn+p+hm1EhpCRyPxw==",
"license": "MIT",
"dependencies": {
- "@astrojs/markdown-remark": "6.3.1",
+ "@astrojs/markdown-remark": "6.3.2",
"@mdx-js/mdx": "^3.1.0",
"acorn": "^8.14.1",
"es-module-lexer": "^1.6.0",
@@ -185,22 +185,22 @@
"vfile": "^6.0.3"
},
"engines": {
- "node": "^18.17.1 || ^20.3.0 || >=22.0.0"
+ "node": "18.20.8 || ^20.3.0 || >=22.0.0"
},
"peerDependencies": {
"astro": "^5.0.0"
}
},
"node_modules/@astrojs/prism": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/@astrojs/prism/-/prism-3.2.0.tgz",
- "integrity": "sha512-GilTHKGCW6HMq7y3BUv9Ac7GMe/MO9gi9GW62GzKtth0SwukCu/qp2wLiGpEujhY+VVhaG9v7kv/5vFzvf4NYw==",
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/@astrojs/prism/-/prism-3.3.0.tgz",
+ "integrity": "sha512-q8VwfU/fDZNoDOf+r7jUnMC2//H2l0TuQ6FkGJL8vD8nw/q5KiL3DS1KKBI3QhI9UQhpJ5dc7AtqfbXWuOgLCQ==",
"license": "MIT",
"dependencies": {
- "prismjs": "^1.29.0"
+ "prismjs": "^1.30.0"
},
"engines": {
- "node": "^18.17.1 || ^20.3.0 || >=22.0.0"
+ "node": "18.20.8 || ^20.3.0 || >=22.0.0"
}
},
"node_modules/@astrojs/rss": {
@@ -225,9 +225,9 @@
}
},
"node_modules/@astrojs/telemetry": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/@astrojs/telemetry/-/telemetry-3.2.1.tgz",
- "integrity": "sha512-SSVM820Jqc6wjsn7qYfV9qfeQvePtVc1nSofhyap7l0/iakUKywj3hfy3UJAOV4sGV4Q/u450RD4AaCaFvNPlg==",
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/@astrojs/telemetry/-/telemetry-3.3.0.tgz",
+ "integrity": "sha512-UFBgfeldP06qu6khs/yY+q1cDAaArM2/7AEIqQ9Cuvf7B1hNLq0xDrZkct+QoIGyjq56y8IaE2I3CTvG99mlhQ==",
"license": "MIT",
"dependencies": {
"ci-info": "^4.2.0",
@@ -239,7 +239,7 @@
"which-pm-runs": "^1.1.0"
},
"engines": {
- "node": "^18.17.1 || ^20.3.0 || >=22.0.0"
+ "node": "18.20.8 || ^20.3.0 || >=22.0.0"
}
},
"node_modules/@astrojs/yaml2ts": {
@@ -1624,60 +1624,60 @@
]
},
"node_modules/@shikijs/core": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-3.2.1.tgz",
- "integrity": "sha512-FhsdxMWYu/C11sFisEp7FMGBtX/OSSbnXZDMBhGuUDBNTdsoZlMSgQv5f90rwvzWAdWIW6VobD+G3IrazxA6dQ==",
+ "version": "3.4.2",
+ "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-3.4.2.tgz",
+ "integrity": "sha512-AG8vnSi1W2pbgR2B911EfGqtLE9c4hQBYkv/x7Z+Kt0VxhgQKcW7UNDVYsu9YxwV6u+OJrvdJrMq6DNWoBjihQ==",
"license": "MIT",
"dependencies": {
- "@shikijs/types": "3.2.1",
+ "@shikijs/types": "3.4.2",
"@shikijs/vscode-textmate": "^10.0.2",
"@types/hast": "^3.0.4",
"hast-util-to-html": "^9.0.5"
}
},
"node_modules/@shikijs/engine-javascript": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-3.2.1.tgz",
- "integrity": "sha512-eMdcUzN3FMQYxOmRf2rmU8frikzoSHbQDFH2hIuXsrMO+IBOCI9BeeRkCiBkcLDHeRKbOCtYMJK3D6U32ooU9Q==",
+ "version": "3.4.2",
+ "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-3.4.2.tgz",
+ "integrity": "sha512-1/adJbSMBOkpScCE/SB6XkjJU17ANln3Wky7lOmrnpl+zBdQ1qXUJg2GXTYVHRq+2j3hd1DesmElTXYDgtfSOQ==",
"license": "MIT",
"dependencies": {
- "@shikijs/types": "3.2.1",
+ "@shikijs/types": "3.4.2",
"@shikijs/vscode-textmate": "^10.0.2",
- "oniguruma-to-es": "^4.1.0"
+ "oniguruma-to-es": "^4.3.3"
}
},
"node_modules/@shikijs/engine-oniguruma": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.2.1.tgz",
- "integrity": "sha512-wZZAkayEn6qu2+YjenEoFqj0OyQI64EWsNR6/71d1EkG4sxEOFooowKivsWPpaWNBu3sxAG+zPz5kzBL/SsreQ==",
+ "version": "3.4.2",
+ "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.4.2.tgz",
+ "integrity": "sha512-zcZKMnNndgRa3ORja6Iemsr3DrLtkX3cAF7lTJkdMB6v9alhlBsX9uNiCpqofNrXOvpA3h6lHcLJxgCIhVOU5Q==",
"license": "MIT",
"dependencies": {
- "@shikijs/types": "3.2.1",
+ "@shikijs/types": "3.4.2",
"@shikijs/vscode-textmate": "^10.0.2"
}
},
"node_modules/@shikijs/langs": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.2.1.tgz",
- "integrity": "sha512-If0iDHYRSGbihiA8+7uRsgb1er1Yj11pwpX1c6HLYnizDsKAw5iaT3JXj5ZpaimXSWky/IhxTm7C6nkiYVym+A==",
+ "version": "3.4.2",
+ "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.4.2.tgz",
+ "integrity": "sha512-H6azIAM+OXD98yztIfs/KH5H4PU39t+SREhmM8LaNXyUrqj2mx+zVkr8MWYqjceSjDw9I1jawm1WdFqU806rMA==",
"license": "MIT",
"dependencies": {
- "@shikijs/types": "3.2.1"
+ "@shikijs/types": "3.4.2"
}
},
"node_modules/@shikijs/themes": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.2.1.tgz",
- "integrity": "sha512-k5DKJUT8IldBvAm8WcrDT5+7GA7se6lLksR+2E3SvyqGTyFMzU2F9Gb7rmD+t+Pga1MKrYFxDIeyWjMZWM6uBQ==",
+ "version": "3.4.2",
+ "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.4.2.tgz",
+ "integrity": "sha512-qAEuAQh+brd8Jyej2UDDf+b4V2g1Rm8aBIdvt32XhDPrHvDkEnpb7Kzc9hSuHUxz0Iuflmq7elaDuQAP9bHIhg==",
"license": "MIT",
"dependencies": {
- "@shikijs/types": "3.2.1"
+ "@shikijs/types": "3.4.2"
}
},
"node_modules/@shikijs/types": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.2.1.tgz",
- "integrity": "sha512-/NTWAk4KE2M8uac0RhOsIhYQf4pdU0OywQuYDGIGAJ6Mjunxl2cGiuLkvu4HLCMn+OTTLRWkjZITp+aYJv60yA==",
+ "version": "3.4.2",
+ "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.4.2.tgz",
+ "integrity": "sha512-zHC1l7L+eQlDXLnxvM9R91Efh2V4+rN3oMVS2swCBssbj2U/FBwybD1eeLaq8yl/iwT+zih8iUbTBCgGZOYlVg==",
"license": "MIT",
"dependencies": {
"@shikijs/vscode-textmate": "^10.0.2",
@@ -1700,9 +1700,9 @@
}
},
"node_modules/@tailwindcss/node": {
- "version": "4.1.7",
- "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.7.tgz",
- "integrity": "sha512-9rsOpdY9idRI2NH6CL4wORFY0+Q6fnx9XP9Ju+iq/0wJwGD5IByIgFmwVbyy4ymuyprj8Qh4ErxMKTUL4uNh3g==",
+ "version": "4.1.8",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.8.tgz",
+ "integrity": "sha512-OWwBsbC9BFAJelmnNcrKuf+bka2ZxCE2A4Ft53Tkg4uoiE67r/PMEYwCsourC26E+kmxfwE0hVzMdxqeW+xu7Q==",
"license": "MIT",
"dependencies": {
"@ampproject/remapping": "^2.3.0",
@@ -1711,13 +1711,13 @@
"lightningcss": "1.30.1",
"magic-string": "^0.30.17",
"source-map-js": "^1.2.1",
- "tailwindcss": "4.1.7"
+ "tailwindcss": "4.1.8"
}
},
"node_modules/@tailwindcss/oxide": {
- "version": "4.1.7",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.1.7.tgz",
- "integrity": "sha512-5SF95Ctm9DFiUyjUPnDGkoKItPX/k+xifcQhcqX5RA85m50jw1pT/KzjdvlqxRja45Y52nR4MR9fD1JYd7f8NQ==",
+ "version": "4.1.8",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.1.8.tgz",
+ "integrity": "sha512-d7qvv9PsM5N3VNKhwVUhpK6r4h9wtLkJ6lz9ZY9aeZgrUWk1Z8VPyqyDT9MZlem7GTGseRQHkeB1j3tC7W1P+A==",
"hasInstallScript": true,
"license": "MIT",
"dependencies": {
@@ -1728,24 +1728,24 @@
"node": ">= 10"
},
"optionalDependencies": {
- "@tailwindcss/oxide-android-arm64": "4.1.7",
- "@tailwindcss/oxide-darwin-arm64": "4.1.7",
- "@tailwindcss/oxide-darwin-x64": "4.1.7",
- "@tailwindcss/oxide-freebsd-x64": "4.1.7",
- "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.7",
- "@tailwindcss/oxide-linux-arm64-gnu": "4.1.7",
- "@tailwindcss/oxide-linux-arm64-musl": "4.1.7",
- "@tailwindcss/oxide-linux-x64-gnu": "4.1.7",
- "@tailwindcss/oxide-linux-x64-musl": "4.1.7",
- "@tailwindcss/oxide-wasm32-wasi": "4.1.7",
- "@tailwindcss/oxide-win32-arm64-msvc": "4.1.7",
- "@tailwindcss/oxide-win32-x64-msvc": "4.1.7"
+ "@tailwindcss/oxide-android-arm64": "4.1.8",
+ "@tailwindcss/oxide-darwin-arm64": "4.1.8",
+ "@tailwindcss/oxide-darwin-x64": "4.1.8",
+ "@tailwindcss/oxide-freebsd-x64": "4.1.8",
+ "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.8",
+ "@tailwindcss/oxide-linux-arm64-gnu": "4.1.8",
+ "@tailwindcss/oxide-linux-arm64-musl": "4.1.8",
+ "@tailwindcss/oxide-linux-x64-gnu": "4.1.8",
+ "@tailwindcss/oxide-linux-x64-musl": "4.1.8",
+ "@tailwindcss/oxide-wasm32-wasi": "4.1.8",
+ "@tailwindcss/oxide-win32-arm64-msvc": "4.1.8",
+ "@tailwindcss/oxide-win32-x64-msvc": "4.1.8"
}
},
"node_modules/@tailwindcss/oxide-android-arm64": {
- "version": "4.1.7",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.7.tgz",
- "integrity": "sha512-IWA410JZ8fF7kACus6BrUwY2Z1t1hm0+ZWNEzykKmMNM09wQooOcN/VXr0p/WJdtHZ90PvJf2AIBS/Ceqx1emg==",
+ "version": "4.1.8",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.8.tgz",
+ "integrity": "sha512-Fbz7qni62uKYceWYvUjRqhGfZKwhZDQhlrJKGtnZfuNtHFqa8wmr+Wn74CTWERiW2hn3mN5gTpOoxWKk0jRxjg==",
"cpu": [
"arm64"
],
@@ -1759,9 +1759,9 @@
}
},
"node_modules/@tailwindcss/oxide-darwin-arm64": {
- "version": "4.1.7",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.7.tgz",
- "integrity": "sha512-81jUw9To7fimGGkuJ2W5h3/oGonTOZKZ8C2ghm/TTxbwvfSiFSDPd6/A/KE2N7Jp4mv3Ps9OFqg2fEKgZFfsvg==",
+ "version": "4.1.8",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.8.tgz",
+ "integrity": "sha512-RdRvedGsT0vwVVDztvyXhKpsU2ark/BjgG0huo4+2BluxdXo8NDgzl77qh0T1nUxmM11eXwR8jA39ibvSTbi7A==",
"cpu": [
"arm64"
],
@@ -1775,9 +1775,9 @@
}
},
"node_modules/@tailwindcss/oxide-darwin-x64": {
- "version": "4.1.7",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.7.tgz",
- "integrity": "sha512-q77rWjEyGHV4PdDBtrzO0tgBBPlQWKY7wZK0cUok/HaGgbNKecegNxCGikuPJn5wFAlIywC3v+WMBt0PEBtwGw==",
+ "version": "4.1.8",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.8.tgz",
+ "integrity": "sha512-t6PgxjEMLp5Ovf7uMb2OFmb3kqzVTPPakWpBIFzppk4JE4ix0yEtbtSjPbU8+PZETpaYMtXvss2Sdkx8Vs4XRw==",
"cpu": [
"x64"
],
@@ -1791,9 +1791,9 @@
}
},
"node_modules/@tailwindcss/oxide-freebsd-x64": {
- "version": "4.1.7",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.7.tgz",
- "integrity": "sha512-RfmdbbK6G6ptgF4qqbzoxmH+PKfP4KSVs7SRlTwcbRgBwezJkAO3Qta/7gDy10Q2DcUVkKxFLXUQO6J3CRvBGw==",
+ "version": "4.1.8",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.8.tgz",
+ "integrity": "sha512-g8C8eGEyhHTqwPStSwZNSrOlyx0bhK/V/+zX0Y+n7DoRUzyS8eMbVshVOLJTDDC+Qn9IJnilYbIKzpB9n4aBsg==",
"cpu": [
"x64"
],
@@ -1807,9 +1807,9 @@
}
},
"node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": {
- "version": "4.1.7",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.7.tgz",
- "integrity": "sha512-OZqsGvpwOa13lVd1z6JVwQXadEobmesxQ4AxhrwRiPuE04quvZHWn/LnihMg7/XkN+dTioXp/VMu/p6A5eZP3g==",
+ "version": "4.1.8",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.8.tgz",
+ "integrity": "sha512-Jmzr3FA4S2tHhaC6yCjac3rGf7hG9R6Gf2z9i9JFcuyy0u79HfQsh/thifbYTF2ic82KJovKKkIB6Z9TdNhCXQ==",
"cpu": [
"arm"
],
@@ -1823,9 +1823,9 @@
}
},
"node_modules/@tailwindcss/oxide-linux-arm64-gnu": {
- "version": "4.1.7",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.7.tgz",
- "integrity": "sha512-voMvBTnJSfKecJxGkoeAyW/2XRToLZ227LxswLAwKY7YslG/Xkw9/tJNH+3IVh5bdYzYE7DfiaPbRkSHFxY1xA==",
+ "version": "4.1.8",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.8.tgz",
+ "integrity": "sha512-qq7jXtO1+UEtCmCeBBIRDrPFIVI4ilEQ97qgBGdwXAARrUqSn/L9fUrkb1XP/mvVtoVeR2bt/0L77xx53bPZ/Q==",
"cpu": [
"arm64"
],
@@ -1839,9 +1839,9 @@
}
},
"node_modules/@tailwindcss/oxide-linux-arm64-musl": {
- "version": "4.1.7",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.7.tgz",
- "integrity": "sha512-PjGuNNmJeKHnP58M7XyjJyla8LPo+RmwHQpBI+W/OxqrwojyuCQ+GUtygu7jUqTEexejZHr/z3nBc/gTiXBj4A==",
+ "version": "4.1.8",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.8.tgz",
+ "integrity": "sha512-O6b8QesPbJCRshsNApsOIpzKt3ztG35gfX9tEf4arD7mwNinsoCKxkj8TgEE0YRjmjtO3r9FlJnT/ENd9EVefQ==",
"cpu": [
"arm64"
],
@@ -1855,9 +1855,9 @@
}
},
"node_modules/@tailwindcss/oxide-linux-x64-gnu": {
- "version": "4.1.7",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.7.tgz",
- "integrity": "sha512-HMs+Va+ZR3gC3mLZE00gXxtBo3JoSQxtu9lobbZd+DmfkIxR54NO7Z+UQNPsa0P/ITn1TevtFxXTpsRU7qEvWg==",
+ "version": "4.1.8",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.8.tgz",
+ "integrity": "sha512-32iEXX/pXwikshNOGnERAFwFSfiltmijMIAbUhnNyjFr3tmWmMJWQKU2vNcFX0DACSXJ3ZWcSkzNbaKTdngH6g==",
"cpu": [
"x64"
],
@@ -1871,9 +1871,9 @@
}
},
"node_modules/@tailwindcss/oxide-linux-x64-musl": {
- "version": "4.1.7",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.7.tgz",
- "integrity": "sha512-MHZ6jyNlutdHH8rd+YTdr3QbXrHXqwIhHw9e7yXEBcQdluGwhpQY2Eku8UZK6ReLaWtQ4gijIv5QoM5eE+qlsA==",
+ "version": "4.1.8",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.8.tgz",
+ "integrity": "sha512-s+VSSD+TfZeMEsCaFaHTaY5YNj3Dri8rST09gMvYQKwPphacRG7wbuQ5ZJMIJXN/puxPcg/nU+ucvWguPpvBDg==",
"cpu": [
"x64"
],
@@ -1887,9 +1887,9 @@
}
},
"node_modules/@tailwindcss/oxide-wasm32-wasi": {
- "version": "4.1.7",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.7.tgz",
- "integrity": "sha512-ANaSKt74ZRzE2TvJmUcbFQ8zS201cIPxUDm5qez5rLEwWkie2SkGtA4P+GPTj+u8N6JbPrC8MtY8RmJA35Oo+A==",
+ "version": "4.1.8",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.8.tgz",
+ "integrity": "sha512-CXBPVFkpDjM67sS1psWohZ6g/2/cd+cq56vPxK4JeawelxwK4YECgl9Y9TjkE2qfF+9/s1tHHJqrC4SS6cVvSg==",
"bundleDependencies": [
"@napi-rs/wasm-runtime",
"@emnapi/core",
@@ -1907,7 +1907,7 @@
"@emnapi/core": "^1.4.3",
"@emnapi/runtime": "^1.4.3",
"@emnapi/wasi-threads": "^1.0.2",
- "@napi-rs/wasm-runtime": "^0.2.9",
+ "@napi-rs/wasm-runtime": "^0.2.10",
"@tybys/wasm-util": "^0.9.0",
"tslib": "^2.8.0"
},
@@ -1916,9 +1916,9 @@
}
},
"node_modules/@tailwindcss/oxide-win32-arm64-msvc": {
- "version": "4.1.7",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.7.tgz",
- "integrity": "sha512-HUiSiXQ9gLJBAPCMVRk2RT1ZrBjto7WvqsPBwUrNK2BcdSxMnk19h4pjZjI7zgPhDxlAbJSumTC4ljeA9y0tEw==",
+ "version": "4.1.8",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.8.tgz",
+ "integrity": "sha512-7GmYk1n28teDHUjPlIx4Z6Z4hHEgvP5ZW2QS9ygnDAdI/myh3HTHjDqtSqgu1BpRoI4OiLx+fThAyA1JePoENA==",
"cpu": [
"arm64"
],
@@ -1932,9 +1932,9 @@
}
},
"node_modules/@tailwindcss/oxide-win32-x64-msvc": {
- "version": "4.1.7",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.7.tgz",
- "integrity": "sha512-rYHGmvoHiLJ8hWucSfSOEmdCBIGZIq7SpkPRSqLsH2Ab2YUNgKeAPT1Fi2cx3+hnYOrAb0jp9cRyode3bBW4mQ==",
+ "version": "4.1.8",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.8.tgz",
+ "integrity": "sha512-fou+U20j+Jl0EHwK92spoWISON2OBnCazIc038Xj2TdweYV33ZRkS9nwqiUi2d/Wba5xg5UoHfvynnb/UB49cQ==",
"cpu": [
"x64"
],
@@ -2035,14 +2035,14 @@
}
},
"node_modules/@tailwindcss/vite": {
- "version": "4.1.7",
- "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.1.7.tgz",
- "integrity": "sha512-tYa2fO3zDe41I7WqijyVbRd8oWT0aEID1Eokz5hMT6wShLIHj3yvwj9XbfuloHP9glZ6H+aG2AN/+ZrxJ1Y5RQ==",
+ "version": "4.1.8",
+ "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.1.8.tgz",
+ "integrity": "sha512-CQ+I8yxNV5/6uGaJjiuymgw0kEQiNKRinYbZXPdx1fk5WgiyReG0VaUx/Xq6aVNSUNJFzxm6o8FNKS5aMaim5A==",
"license": "MIT",
"dependencies": {
- "@tailwindcss/node": "4.1.7",
- "@tailwindcss/oxide": "4.1.7",
- "tailwindcss": "4.1.7"
+ "@tailwindcss/node": "4.1.8",
+ "@tailwindcss/oxide": "4.1.8",
+ "tailwindcss": "4.1.8"
},
"peerDependencies": {
"vite": "^5.2.0 || ^6"
@@ -2139,9 +2139,9 @@
}
},
"node_modules/@types/node": {
- "version": "22.15.18",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.18.tgz",
- "integrity": "sha512-v1DKRfUdyW+jJhZNEI1PYy29S2YRxMV5AOO/x/SjKmW0acCIOqmbj6Haf9eHAhsPmrhlHSxEhv/1WszcLWV4cg==",
+ "version": "22.15.24",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-22.15.24.tgz",
+ "integrity": "sha512-w9CZGm9RDjzTh/D+hFwlBJ3ziUaVw7oufKA3vOFSOZlzmW9AkZnfjPb+DLnrV6qtgL/LNmP0/2zBNCFHL3F0ng==",
"license": "MIT",
"dependencies": {
"undici-types": "~6.21.0"
@@ -2455,15 +2455,15 @@
}
},
"node_modules/astro": {
- "version": "5.7.13",
- "resolved": "https://registry.npmjs.org/astro/-/astro-5.7.13.tgz",
- "integrity": "sha512-cRGq2llKOhV3XMcYwQpfBIUcssN6HEK5CRbcMxAfd9OcFhvWE7KUy50zLioAZVVl3AqgUTJoNTlmZfD2eG0G1w==",
+ "version": "5.8.0",
+ "resolved": "https://registry.npmjs.org/astro/-/astro-5.8.0.tgz",
+ "integrity": "sha512-G57ELkdIntDiSrucA5lQaRtBOjquaZ9b9NIwoz2f471ZuuJcynLjWgItgBzlrz5UMY4WqnFbVWUCKlJb7nt9bA==",
"license": "MIT",
"dependencies": {
"@astrojs/compiler": "^2.11.0",
"@astrojs/internal-helpers": "0.6.1",
- "@astrojs/markdown-remark": "6.3.1",
- "@astrojs/telemetry": "3.2.1",
+ "@astrojs/markdown-remark": "6.3.2",
+ "@astrojs/telemetry": "3.3.0",
"@capsizecss/unpack": "^2.4.0",
"@oslojs/encoding": "^1.1.0",
"@rollup/pluginutils": "^5.1.4",
@@ -2490,6 +2490,7 @@
"github-slugger": "^2.0.0",
"html-escaper": "3.0.3",
"http-cache-semantics": "^4.1.1",
+ "import-meta-resolve": "^4.1.0",
"js-yaml": "^4.1.0",
"kleur": "^4.1.5",
"magic-string": "^0.30.17",
@@ -2525,7 +2526,7 @@
"astro": "astro.js"
},
"engines": {
- "node": "^18.17.1 || ^20.3.0 || >=22.0.0",
+ "node": "18.20.8 || ^20.3.0 || >=22.0.0",
"npm": ">=9.6.5",
"pnpm": ">=7.1.0"
},
@@ -3415,12 +3416,6 @@
"integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==",
"license": "MIT"
},
- "node_modules/emoji-regex-xs": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex-xs/-/emoji-regex-xs-1.0.0.tgz",
- "integrity": "sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==",
- "license": "MIT"
- },
"node_modules/encoding-sniffer": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/encoding-sniffer/-/encoding-sniffer-0.2.0.tgz",
@@ -6300,19 +6295,18 @@
}
},
"node_modules/oniguruma-parser": {
- "version": "0.5.4",
- "resolved": "https://registry.npmjs.org/oniguruma-parser/-/oniguruma-parser-0.5.4.tgz",
- "integrity": "sha512-yNxcQ8sKvURiTwP0mV6bLQCYE7NKfKRRWunhbZnXgxSmB1OXa1lHrN3o4DZd+0Si0kU5blidK7BcROO8qv5TZA==",
+ "version": "0.12.1",
+ "resolved": "https://registry.npmjs.org/oniguruma-parser/-/oniguruma-parser-0.12.1.tgz",
+ "integrity": "sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==",
"license": "MIT"
},
"node_modules/oniguruma-to-es": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-4.1.0.tgz",
- "integrity": "sha512-SNwG909cSLo4vPyyPbU/VJkEc9WOXqu2ycBlfd1UCXLqk1IijcQktSBb2yRQ2UFPsDhpkaf+C1dtT3PkLK/yWA==",
+ "version": "4.3.3",
+ "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-4.3.3.tgz",
+ "integrity": "sha512-rPiZhzC3wXwE59YQMRDodUwwT9FZ9nNBwQQfsd1wfdtlKEyCdRV0avrTcSZ5xlIvGRVPd/cx6ZN45ECmS39xvg==",
"license": "MIT",
"dependencies": {
- "emoji-regex-xs": "^1.0.0",
- "oniguruma-parser": "^0.5.4",
+ "oniguruma-parser": "^0.12.1",
"regex": "^6.0.1",
"regex-recursion": "^6.0.2"
}
@@ -7003,9 +6997,9 @@
}
},
"node_modules/remark-rehype": {
- "version": "11.1.1",
- "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.1.tgz",
- "integrity": "sha512-g/osARvjkBXb6Wo0XvAeXQohVta8i84ACbenPpoSsxTOQH/Ae0/RGP4WZgnMH5pMLpsj4FG7OHmcIcXxpza8eQ==",
+ "version": "11.1.2",
+ "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.2.tgz",
+ "integrity": "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==",
"license": "MIT",
"dependencies": {
"@types/hast": "^3.0.0",
@@ -7293,17 +7287,17 @@
}
},
"node_modules/shiki": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/shiki/-/shiki-3.2.1.tgz",
- "integrity": "sha512-VML/2o1/KGYkEf/stJJ+s9Ypn7jUKQPomGLGYso4JJFMFxVDyPNsjsI3MB3KLjlMOeH44gyaPdXC6rik2WXvUQ==",
+ "version": "3.4.2",
+ "resolved": "https://registry.npmjs.org/shiki/-/shiki-3.4.2.tgz",
+ "integrity": "sha512-wuxzZzQG8kvZndD7nustrNFIKYJ1jJoWIPaBpVe2+KHSvtzMi4SBjOxrigs8qeqce/l3U0cwiC+VAkLKSunHQQ==",
"license": "MIT",
"dependencies": {
- "@shikijs/core": "3.2.1",
- "@shikijs/engine-javascript": "3.2.1",
- "@shikijs/engine-oniguruma": "3.2.1",
- "@shikijs/langs": "3.2.1",
- "@shikijs/themes": "3.2.1",
- "@shikijs/types": "3.2.1",
+ "@shikijs/core": "3.4.2",
+ "@shikijs/engine-javascript": "3.4.2",
+ "@shikijs/engine-oniguruma": "3.4.2",
+ "@shikijs/langs": "3.4.2",
+ "@shikijs/themes": "3.4.2",
+ "@shikijs/types": "3.4.2",
"@shikijs/vscode-textmate": "^10.0.2",
"@types/hast": "^3.0.4"
}
@@ -7350,9 +7344,9 @@
"license": "MIT"
},
"node_modules/smol-toml": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.3.1.tgz",
- "integrity": "sha512-tEYNll18pPKHroYSmLLrksq233j021G0giwW7P3D24jC54pQ5W5BXMsQ/Mvw1OJCmEYDgY+lrzT+3nNUtoNfXQ==",
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.3.4.tgz",
+ "integrity": "sha512-UOPtVuYkzYGee0Bd2Szz8d2G3RfMfJ2t3qVdZUAozZyAk+a0Sxa+QKix0YCwjL/A1RR0ar44nCxaoN9FxdJGwA==",
"license": "BSD-3-Clause",
"engines": {
"node": ">= 18"
@@ -7498,15 +7492,15 @@
}
},
"node_modules/tailwindcss": {
- "version": "4.1.7",
- "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.7.tgz",
- "integrity": "sha512-kr1o/ErIdNhTz8uzAYL7TpaUuzKIE6QPQ4qmSdxnoX/lo+5wmUHQA6h3L5yIqEImSRnAAURDirLu/BgiXGPAhg==",
+ "version": "4.1.8",
+ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.8.tgz",
+ "integrity": "sha512-kjeW8gjdxasbmFKpVGrGd5T4i40mV5J2Rasw48QARfYeQ8YS9x02ON9SFWax3Qf616rt4Cp3nVNIj6Hd1mP3og==",
"license": "MIT"
},
"node_modules/tapable": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
- "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.2.tgz",
+ "integrity": "sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==",
"license": "MIT",
"engines": {
"node": ">=6"
diff --git a/package.json b/package.json
index 074d2fb..b800357 100644
--- a/package.json
+++ b/package.json
@@ -13,20 +13,20 @@
},
"dependencies": {
"@astrojs/check": "0.9.4",
- "@astrojs/mdx": "^4.2.6",
+ "@astrojs/mdx": "^4.3.0",
"@astrojs/rss": "^4.0.11",
"@astrojs/sitemap": "3.4.0",
- "@tailwindcss/vite": "^4.1.7",
- "astro": "^5.7.13",
+ "@tailwindcss/vite": "^4.1.8",
+ "astro": "^5.8.0",
"astro-icon": "^1.1.5",
"rehype-external-links": "^3.0.0",
- "tailwindcss": "^4.1.7",
+ "tailwindcss": "^4.1.8",
"typescript": "^5.8.3"
},
"devDependencies": {
"@iconify-json/mdi": "^1.2.3",
"@tailwindcss/typography": "^0.5.16",
- "@types/node": "^22.15.18",
+ "@types/node": "^22.15.24",
"npm-check-updates": "^18.0.1",
"prettier": "^3.5.3",
"prettier-plugin-astro": "^0.14.1",
diff --git a/src/components/Link.astro b/src/components/Link.astro
index 3adfd5f..45d67e3 100644
--- a/src/components/Link.astro
+++ b/src/components/Link.astro
@@ -3,13 +3,21 @@ import type { HTMLAttributes } from "astro/types";
interface Props extends HTMLAttributes<"a"> {
href: string;
- external?: boolean;
- class?: string;
}
-const { href, external = true, ...rest } = Astro.props;
+const { href, ...rest } = Astro.props;
+
+const isExternal =
+ /^(https?:)?\/\//.test(href) ||
+ href.startsWith("mailto:") ||
+ href.startsWith("tel:");
---
-
+
diff --git a/src/content/posts/website/index.mdx b/src/content/posts/website/index.mdx
deleted file mode 100644
index 561badd..0000000
--- a/src/content/posts/website/index.mdx
+++ /dev/null
@@ -1,220 +0,0 @@
----
-title: "Hosting my own Digital Content"
-date: 2025-05-03
-description: "An overview of what I am using to host my digital content."
-image:
- url: "showcase.webp"
- alt: "Website showcase"
-categories: ["personal"]
-tags: ["self-host", "forgejo", "docker", "vps"]
-draft: true
----
-
-This post will outline my workflow of using a self-hosted Forgejo instance and Actions runner to automatically deploy my personal site and any software releases, all without having to rely on another provider.
-
-What initially started as a bit of experimentation out of intrigue has evolved into allowing me better control over tasks I now carry out with work. It has given me the confidence to expand my knowledge out to other areas and even aid others.
-
-
-
-This website's goal is not only to showcase my interests and the subsequent artwork which comes from that. But to also act as a way for me to learn more about web development, software deployment, and hosting on your own infrastructure.
-
----
-
-As a result of all this, it gave me the drive to pursue using NixOS on my personal rig, and using it to set up a home server to host a Jellyfin and Immich instance.
-
-## Steps
-
-### Private image access login?
-
-```sh
-echo '' | docker login code.troylusty.com -u troy --password-stdin
-```
-
-```sh
-echo $(htpasswd -nB user) | sed -e s/\\$/\\$\\$/g
-```
-
-### Aliases for updating VPS and pruning Docker
-
-```sh
-echo 'alias dockerclean="docker system prune -a --volumes"' >> .bashrc
-echo 'alias updateall="sudo apt update && sudo apt upgrade && sudo apt autoremove"' >> .bashrc
-```
-
-Thanks to [Tech Tales](https://tech-tales.blog/posts/2025/01-forgejo-runner-update) for the clean instructions on how to setup an Actions runner with Forgejo.
-
-```sh
-docker compose run --rm forgejo-runner 'forgejo-runner' 'generate-config' > forgejo-runner/config.yml
-```
-
-Setup `container.docker_host: "unix:///var/run/docker.sock"` and `container.network: "forgejo"` and any labels such as `runner.labels: ["ubuntu-latest:docker://gitea/runner-images:ubuntu-latest"]`
-
-```
-docker compose run --rm -it forgejo-runner 'forgejo-runner' 'register'
-```
-
-Input `http://forgejo:3000` as the domain since forgejo is the container name in Docker and port 3000 is its relevant port.
-
-## Docker compose
-
-```yaml
-services:
- traefik:
- image: traefik:latest
- container_name: traefik
- command:
- - "--providers.docker"
- - "--providers.docker.exposedbydefault=false"
- - "--entryPoints.websecure.address=:443"
- - "--certificatesresolvers.myresolver.acme.tlschallenge=true"
- - "--certificatesresolvers.myresolver.acme.email=traefik@troylusty.com"
- - "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json"
- - "--entrypoints.web.address=:80"
- - "--entrypoints.web.http.redirections.entrypoint.to=websecure"
- - "--entrypoints.web.http.redirections.entrypoint.scheme=https"
- - "--ping=true"
- labels:
- - "traefik.enable=true"
- - "com.centurylinklabs.watchtower.enable=true"
- - "traefik.http.middlewares.securityHeaders.headers.stsSeconds=31536000"
- - "traefik.http.middlewares.securityHeaders.headers.stsIncludeSubdomains=true"
- - "traefik.http.middlewares.securityHeaders.headers.frameDeny=true"
- - "traefik.http.middlewares.securityHeaders.headers.contentTypeNosniff=true"
- - "traefik.http.middlewares.securityHeaders.headers.contentSecurityPolicy=default-src 'self'; script-src 'self' 'unsafe-eval' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; base-uri 'none'; form-action 'self'; object-src 'none'; frame-ancestors 'none'; upgrade-insecure-requests"
- - "traefik.http.middlewares.securityHeaders.headers.referrerPolicy=no-referrer"
- - "traefik.http.middlewares.securityHeaders.headers.permissionsPolicy=accelerometer=(), autoplay=(), camera=(), cross-origin-isolated=(), display-capture=(), encrypted-media=(), fullscreen=(), geolocation=(), gyroscope=(), keyboard-map=(), magnetometer=(), microphone=(), midi=(), payment=(), picture-in-picture=(), publickey-credentials-get=(), screen-wake-lock=(), sync-xhr=(self), usb=(), web-share=(), xr-spatial-tracking=(), clipboard-read=(), clipboard-write=(), gamepad=(), hid=(), idle-detection=(), interest-cohort=(), serial=(), unload=()"
- ports:
- - "80:80"
- - "443:443"
- volumes:
- - /var/run/docker.sock:/var/run/docker.sock:ro
- - letsencrypt:/letsencrypt
- restart: unless-stopped
- networks:
- - traefik
- healthcheck:
- test: ["CMD", "traefik", "healthcheck", "--ping"]
- depends_on:
- watchtower:
- condition: service_healthy
-
- watchtower:
- image: containrrr/watchtower:latest
- command: --label-enable --interval 1800 --rolling-restart --cleanup --remove-volumes
- container_name: watchtower
- networks:
- - traefik
- volumes:
- - /var/run/docker.sock:/var/run/docker.sock
- - /home/troy/.docker/config.json:/config.json
- restart: unless-stopped
- healthcheck:
- test: ["CMD", "/watchtower", "--health-check"]
-
- personalsite:
- image: code.troylusty.com/troy/troylusty.com:latest
- container_name: personalsite
- labels:
- - "traefik.enable=true"
- - "traefik.http.routers.personalsite.rule=Host(`troylusty.com`)"
- - "traefik.http.routers.personalsite.entrypoints=websecure"
- - "traefik.http.routers.personalsite.tls.certresolver=myresolver"
- - "com.centurylinklabs.watchtower.enable=true"
- - "traefik.http.routers.personalsite.middlewares=securityHeaders"
- restart: unless-stopped
- networks:
- - traefik
- depends_on:
- traefik:
- condition: service_healthy
-
- zolapress:
- image: code.troylusty.com/troy/zolapress:latest
- container_name: zolapress
- profiles:
- - donotstart
- labels:
- - "traefik.enable=true"
- - "traefik.http.routers.zolapress.rule=Host(`edu.troylusty.com`)"
- - "traefik.http.routers.zolapress.entrypoints=websecure"
- - "traefik.http.routers.zolapress.tls.certresolver=myresolver"
- - "com.centurylinklabs.watchtower.enable=true"
- - "traefik.http.middlewares.auth.basicauth.users=troy:$$2y$$05$$fgVNzDsxXDq4co3aTh/OMOKZdLzUiM9XPEU5DXCivc9sYUZy/oq1W"
- - "traefik.http.routers.zolapress.middlewares=securityHeaders, auth"
- restart: unless-stopped
- networks:
- - traefik
- depends_on:
- traefik:
- condition: service_healthy
-
- unduck:
- image: code.troylusty.com/troy/unduck:latest
- container_name: unduck
- labels:
- - "traefik.enable=true"
- - "traefik.http.routers.unduck.rule=Host(`unduck.troylusty.com`)"
- - "traefik.http.routers.unduck.entrypoints=websecure"
- - "traefik.http.routers.unduck.tls.certresolver=myresolver"
- - "com.centurylinklabs.watchtower.enable=true"
- - "traefik.http.routers.unduck.middlewares=securityHeaders"
- restart: unless-stopped
- networks:
- - traefik
- depends_on:
- traefik:
- condition: service_healthy
-
- forgejo:
- image: codeberg.org/forgejo/forgejo:10
- container_name: forgejo
- restart: unless-stopped
- networks:
- - traefik
- - forgejo
- labels:
- - "traefik.enable=true"
- - "traefik.http.routers.forgejo.rule=Host(`code.troylusty.com`)"
- - "traefik.http.routers.forgejo.entrypoints=websecure"
- - "traefik.http.routers.forgejo.tls.certresolver=myresolver"
- - "com.centurylinklabs.watchtower.enable=true"
- - "traefik.http.routers.forgejo.middlewares=securityHeaders"
- - "traefik.http.services.forgejo.loadbalancer.server.port=3000"
- - "traefik.docker.network=traefik"
- volumes:
- - ./forgejo:/data
- ports:
- - "2222:22"
- depends_on:
- traefik:
- condition: service_healthy
-
- forgejo-runner:
- image: code.forgejo.org/forgejo/runner:6.0.1
- container_name: forgejo-runner
- user: 0:0
- depends_on:
- forgejo:
- condition: service_started
- networks:
- - forgejo
- labels:
- - "com.centurylinklabs.watchtower.enable=true"
- volumes:
- - ./forgejo-runner:/data
- - ./forgejo-runner/config.yml:/data/config.yml
- - /var/run/docker.sock:/var/run/docker.sock
- restart: unless-stopped
- command: forgejo-runner -c /data/config.yml daemon
-
-networks:
- traefik:
- external: false
- name: traefik
- forgejo:
- external: false
- name: forgejo
-
-volumes:
- letsencrypt:
-```
diff --git a/src/content/posts/website/showcase.webp b/src/content/posts/website/showcase.webp
deleted file mode 100644
index 628157a..0000000
Binary files a/src/content/posts/website/showcase.webp and /dev/null differ