diff --git a/astro.config.mjs b/astro.config.mjs
index f9f6ae4..16bae87 100644
--- a/astro.config.mjs
+++ b/astro.config.mjs
@@ -1,11 +1,12 @@
import { defineConfig } from "astro/config";
import tailwind from "@astrojs/tailwind";
import svelte from "@astrojs/svelte";
+import mdx from "@astrojs/mdx";
import cloudflare from "@astrojs/cloudflare";
// https://astro.build/config
export default defineConfig({
- integrations: [tailwind(), svelte()],
+ integrations: [tailwind(), svelte(), mdx()],
output: "hybrid",
adapter: cloudflare({
imageService: "compile",
diff --git a/package.json b/package.json
index 13e7e46..9c55eed 100644
--- a/package.json
+++ b/package.json
@@ -11,6 +11,7 @@
},
"dependencies": {
"@astrojs/cloudflare": "^10.2.6",
+ "@astrojs/mdx": "^3.0.1",
"@astrojs/svelte": "^5.4.0",
"@astrojs/tailwind": "^5.1.0",
"astro": "^4.9.2",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 364ca35..6eda3be 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -8,6 +8,9 @@ dependencies:
'@astrojs/cloudflare':
specifier: ^10.2.6
version: 10.2.6(astro@4.9.2)
+ '@astrojs/mdx':
+ specifier: ^3.0.1
+ version: 3.0.1(astro@4.9.2)
'@astrojs/svelte':
specifier: ^5.4.0
version: 5.4.0(astro@4.9.2)(svelte@4.2.12)(typescript@5.4.4)(vite@5.2.11)
@@ -119,6 +122,32 @@ packages:
- supports-color
dev: false
+ /@astrojs/mdx@3.0.1(astro@4.9.2):
+ resolution: {integrity: sha512-UcPja14Qt6OEm7Wjak41Qa5f7G1M0oB2ARCsyIkXy6+Z65fJ6c1648UqEOqnEgR6Xtqq+V47wtK2qSP6KQKrAg==}
+ engines: {node: ^18.17.1 || ^20.3.0 || >=21.0.0}
+ peerDependencies:
+ astro: ^4.8.0
+ dependencies:
+ '@astrojs/markdown-remark': 5.1.0
+ '@mdx-js/mdx': 3.0.1
+ acorn: 8.11.3
+ astro: 4.9.2(typescript@5.4.4)
+ es-module-lexer: 1.5.2
+ estree-util-visit: 2.0.0
+ github-slugger: 2.0.0
+ gray-matter: 4.0.3
+ hast-util-to-html: 9.0.1
+ kleur: 4.1.5
+ rehype-raw: 7.0.0
+ remark-gfm: 4.0.0
+ remark-smartypants: 3.0.1
+ source-map: 0.7.4
+ unist-util-visit: 5.0.0
+ vfile: 6.0.1
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
/@astrojs/prism@3.1.0:
resolution: {integrity: sha512-Z9IYjuXSArkAUx3N6xj6+Bnvx8OdUSHA8YoOgyepp3+zJmtVYJIl/I18GozdJVW1p5u/CNpl3Km7/gwTJK85cw==}
engines: {node: ^18.17.1 || ^20.3.0 || >=21.0.0}
@@ -1550,6 +1579,36 @@ packages:
'@jridgewell/sourcemap-codec': 1.4.15
dev: false
+ /@mdx-js/mdx@3.0.1:
+ resolution: {integrity: sha512-eIQ4QTrOWyL3LWEe/bu6Taqzq2HQvHcyTMaOrI95P2/LmJE7AsfPfgJGuFLPVqBUE1BC1rik3VIhU+s9u72arA==}
+ dependencies:
+ '@types/estree': 1.0.5
+ '@types/estree-jsx': 1.0.5
+ '@types/hast': 3.0.4
+ '@types/mdx': 2.0.13
+ collapse-white-space: 2.1.0
+ devlop: 1.1.0
+ estree-util-build-jsx: 3.0.1
+ estree-util-is-identifier-name: 3.0.0
+ estree-util-to-js: 2.0.0
+ estree-walker: 3.0.3
+ hast-util-to-estree: 3.1.0
+ hast-util-to-jsx-runtime: 2.3.0
+ markdown-extensions: 2.0.0
+ periscopic: 3.1.0
+ remark-mdx: 3.0.1
+ remark-parse: 11.0.0
+ remark-rehype: 11.1.0
+ source-map: 0.7.4
+ unified: 11.0.4
+ unist-util-position-from-estree: 2.0.0
+ unist-util-stringify-position: 4.0.0
+ unist-util-visit: 5.0.0
+ vfile: 6.0.1
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
/@nodelib/fs.scandir@2.1.5:
resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
engines: {node: '>= 8'}
@@ -1746,6 +1805,12 @@ packages:
tailwindcss: 3.4.3
dev: true
+ /@types/acorn@4.0.6:
+ resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==}
+ dependencies:
+ '@types/estree': 1.0.5
+ dev: false
+
/@types/babel__core@7.20.5:
resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==}
dependencies:
@@ -1785,6 +1850,12 @@ packages:
'@types/ms': 0.7.34
dev: false
+ /@types/estree-jsx@1.0.5:
+ resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==}
+ dependencies:
+ '@types/estree': 1.0.5
+ dev: false
+
/@types/estree@1.0.5:
resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==}
@@ -1800,6 +1871,10 @@ packages:
'@types/unist': 3.0.2
dev: false
+ /@types/mdx@2.0.13:
+ resolution: {integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==}
+ dev: false
+
/@types/ms@0.7.34:
resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==}
dev: false
@@ -1810,6 +1885,12 @@ packages:
'@types/unist': 2.0.10
dev: false
+ /@types/nlcst@2.0.3:
+ resolution: {integrity: sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==}
+ dependencies:
+ '@types/unist': 3.0.2
+ dev: false
+
/@types/node-forge@1.3.11:
resolution: {integrity: sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==}
dependencies:
@@ -1834,6 +1915,14 @@ packages:
resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==}
dev: false
+ /acorn-jsx@5.3.2(acorn@8.11.3):
+ resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
+ peerDependencies:
+ acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
+ dependencies:
+ acorn: 8.11.3
+ dev: false
+
/acorn-walk@8.3.2:
resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==}
engines: {node: '>=0.4.0'}
@@ -1913,6 +2002,11 @@ packages:
printable-characters: 1.0.42
dev: false
+ /astring@1.8.6:
+ resolution: {integrity: sha512-ISvCdHdlTDlH5IpxQJIex7BWBywFWgjJSVdwst+/iQCoEYnyOaQ95+X1JGshuBjGp6nxKUy1jMgE3zPqN7fQdg==}
+ hasBin: true
+ dev: false
+
/astro@4.9.2(typescript@5.4.4):
resolution: {integrity: sha512-apzpRoISk6L8g99m3zKIW5SYxw2GhOju/1Gq0Ccf3SH+X2UcFXF+MTdxPOFl5yJUQg7X0qsVQDOIVf8zHRRKFg==}
engines: {node: ^18.17.1 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0'}
@@ -2179,6 +2273,10 @@ packages:
resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==}
dev: false
+ /character-reference-invalid@2.0.1:
+ resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==}
+ dev: false
+
/chokidar@3.6.0:
resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
engines: {node: '>= 8.10.0'}
@@ -2234,6 +2332,10 @@ packages:
estree-walker: 3.0.3
periscopic: 3.1.0
+ /collapse-white-space@2.1.0:
+ resolution: {integrity: sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==}
+ dev: false
+
/color-convert@1.9.3:
resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
dependencies:
@@ -2588,6 +2690,40 @@ packages:
hasBin: true
dev: false
+ /estree-util-attach-comments@3.0.0:
+ resolution: {integrity: sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==}
+ dependencies:
+ '@types/estree': 1.0.5
+ dev: false
+
+ /estree-util-build-jsx@3.0.1:
+ resolution: {integrity: sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==}
+ dependencies:
+ '@types/estree-jsx': 1.0.5
+ devlop: 1.1.0
+ estree-util-is-identifier-name: 3.0.0
+ estree-walker: 3.0.3
+ dev: false
+
+ /estree-util-is-identifier-name@3.0.0:
+ resolution: {integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==}
+ dev: false
+
+ /estree-util-to-js@2.0.0:
+ resolution: {integrity: sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==}
+ dependencies:
+ '@types/estree-jsx': 1.0.5
+ astring: 1.8.6
+ source-map: 0.7.4
+ dev: false
+
+ /estree-util-visit@2.0.0:
+ resolution: {integrity: sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==}
+ dependencies:
+ '@types/estree-jsx': 1.0.5
+ '@types/unist': 3.0.2
+ dev: false
+
/estree-walker@0.6.1:
resolution: {integrity: sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==}
dev: false
@@ -2868,6 +3004,29 @@ packages:
zwitch: 2.0.4
dev: false
+ /hast-util-to-estree@3.1.0:
+ resolution: {integrity: sha512-lfX5g6hqVh9kjS/B9E2gSkvHH4SZNiQFiqWS0x9fENzEl+8W12RqdRxX6d/Cwxi30tPQs3bIO+aolQJNp1bIyw==}
+ dependencies:
+ '@types/estree': 1.0.5
+ '@types/estree-jsx': 1.0.5
+ '@types/hast': 3.0.4
+ comma-separated-tokens: 2.0.3
+ devlop: 1.1.0
+ estree-util-attach-comments: 3.0.0
+ estree-util-is-identifier-name: 3.0.0
+ hast-util-whitespace: 3.0.0
+ mdast-util-mdx-expression: 2.0.0
+ mdast-util-mdx-jsx: 3.1.2
+ mdast-util-mdxjs-esm: 2.0.1
+ property-information: 6.5.0
+ space-separated-tokens: 2.0.2
+ style-to-object: 0.4.4
+ unist-util-position: 5.0.0
+ zwitch: 2.0.4
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
/hast-util-to-html@9.0.1:
resolution: {integrity: sha512-hZOofyZANbyWo+9RP75xIDV/gq+OUKx+T46IlwERnKmfpwp81XBFbT9mi26ws+SJchA4RVUQwIBJpqEOBhMzEQ==}
dependencies:
@@ -2885,6 +3044,28 @@ packages:
zwitch: 2.0.4
dev: false
+ /hast-util-to-jsx-runtime@2.3.0:
+ resolution: {integrity: sha512-H/y0+IWPdsLLS738P8tDnrQ8Z+dj12zQQ6WC11TIM21C8WFVoIxcqWXf2H3hiTVZjF1AWqoimGwrTWecWrnmRQ==}
+ dependencies:
+ '@types/estree': 1.0.5
+ '@types/hast': 3.0.4
+ '@types/unist': 3.0.2
+ comma-separated-tokens: 2.0.3
+ devlop: 1.1.0
+ estree-util-is-identifier-name: 3.0.0
+ hast-util-whitespace: 3.0.0
+ mdast-util-mdx-expression: 2.0.0
+ mdast-util-mdx-jsx: 3.1.2
+ mdast-util-mdxjs-esm: 2.0.1
+ property-information: 6.5.0
+ space-separated-tokens: 2.0.2
+ style-to-object: 1.0.6
+ unist-util-position: 5.0.0
+ vfile-message: 4.0.2
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
/hast-util-to-parse5@8.0.0:
resolution: {integrity: sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==}
dependencies:
@@ -2956,6 +3137,25 @@ packages:
requiresBuild: true
dev: false
+ /inline-style-parser@0.1.1:
+ resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==}
+ dev: false
+
+ /inline-style-parser@0.2.3:
+ resolution: {integrity: sha512-qlD8YNDqyTKTyuITrDOffsl6Tdhv+UC4hcdAVuQsK4IMQ99nSgd1MIA/Q+jQYoh9r3hVUXhYh7urSRmXPkW04g==}
+ dev: false
+
+ /is-alphabetical@2.0.1:
+ resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==}
+ dev: false
+
+ /is-alphanumerical@2.0.1:
+ resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==}
+ dependencies:
+ is-alphabetical: 2.0.1
+ is-decimal: 2.0.1
+ dev: false
+
/is-arrayish@0.3.2:
resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==}
requiresBuild: true
@@ -2977,6 +3177,10 @@ packages:
dependencies:
hasown: 2.0.2
+ /is-decimal@2.0.1:
+ resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==}
+ dev: false
+
/is-docker@3.0.0:
resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
@@ -3002,6 +3206,10 @@ packages:
dependencies:
is-extglob: 2.1.1
+ /is-hexadecimal@2.0.1:
+ resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==}
+ dev: false
+
/is-inside-container@1.0.0:
resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==}
engines: {node: '>=14.16'}
@@ -3215,6 +3423,11 @@ packages:
dependencies:
'@jridgewell/sourcemap-codec': 1.4.15
+ /markdown-extensions@2.0.0:
+ resolution: {integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==}
+ engines: {node: '>=16'}
+ dev: false
+
/markdown-table@3.0.3:
resolution: {integrity: sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==}
dev: false
@@ -3324,6 +3537,64 @@ packages:
- supports-color
dev: false
+ /mdast-util-mdx-expression@2.0.0:
+ resolution: {integrity: sha512-fGCu8eWdKUKNu5mohVGkhBXCXGnOTLuFqOvGMvdikr+J1w7lDJgxThOKpwRWzzbyXAU2hhSwsmssOY4yTokluw==}
+ dependencies:
+ '@types/estree-jsx': 1.0.5
+ '@types/hast': 3.0.4
+ '@types/mdast': 4.0.3
+ devlop: 1.1.0
+ mdast-util-from-markdown: 2.0.0
+ mdast-util-to-markdown: 2.1.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /mdast-util-mdx-jsx@3.1.2:
+ resolution: {integrity: sha512-eKMQDeywY2wlHc97k5eD8VC+9ASMjN8ItEZQNGwJ6E0XWKiW/Z0V5/H8pvoXUf+y+Mj0VIgeRRbujBmFn4FTyA==}
+ dependencies:
+ '@types/estree-jsx': 1.0.5
+ '@types/hast': 3.0.4
+ '@types/mdast': 4.0.3
+ '@types/unist': 3.0.2
+ ccount: 2.0.1
+ devlop: 1.1.0
+ mdast-util-from-markdown: 2.0.0
+ mdast-util-to-markdown: 2.1.0
+ parse-entities: 4.0.1
+ stringify-entities: 4.0.4
+ unist-util-remove-position: 5.0.0
+ unist-util-stringify-position: 4.0.0
+ vfile-message: 4.0.2
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /mdast-util-mdx@3.0.0:
+ resolution: {integrity: sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==}
+ dependencies:
+ mdast-util-from-markdown: 2.0.0
+ mdast-util-mdx-expression: 2.0.0
+ mdast-util-mdx-jsx: 3.1.2
+ mdast-util-mdxjs-esm: 2.0.1
+ mdast-util-to-markdown: 2.1.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
+ /mdast-util-mdxjs-esm@2.0.1:
+ resolution: {integrity: sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==}
+ dependencies:
+ '@types/estree-jsx': 1.0.5
+ '@types/hast': 3.0.4
+ '@types/mdast': 4.0.3
+ devlop: 1.1.0
+ mdast-util-from-markdown: 2.0.0
+ mdast-util-to-markdown: 2.1.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
/mdast-util-phrasing@4.1.0:
resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==}
dependencies:
@@ -3468,6 +3739,67 @@ packages:
micromark-util-types: 2.0.0
dev: false
+ /micromark-extension-mdx-expression@3.0.0:
+ resolution: {integrity: sha512-sI0nwhUDz97xyzqJAbHQhp5TfaxEvZZZ2JDqUo+7NvyIYG6BZ5CPPqj2ogUoPJlmXHBnyZUzISg9+oUmU6tUjQ==}
+ dependencies:
+ '@types/estree': 1.0.5
+ devlop: 1.1.0
+ micromark-factory-mdx-expression: 2.0.1
+ micromark-factory-space: 2.0.0
+ micromark-util-character: 2.1.0
+ micromark-util-events-to-acorn: 2.0.2
+ micromark-util-symbol: 2.0.0
+ micromark-util-types: 2.0.0
+ dev: false
+
+ /micromark-extension-mdx-jsx@3.0.0:
+ resolution: {integrity: sha512-uvhhss8OGuzR4/N17L1JwvmJIpPhAd8oByMawEKx6NVdBCbesjH4t+vjEp3ZXft9DwvlKSD07fCeI44/N0Vf2w==}
+ dependencies:
+ '@types/acorn': 4.0.6
+ '@types/estree': 1.0.5
+ devlop: 1.1.0
+ estree-util-is-identifier-name: 3.0.0
+ micromark-factory-mdx-expression: 2.0.1
+ micromark-factory-space: 2.0.0
+ micromark-util-character: 2.1.0
+ micromark-util-symbol: 2.0.0
+ micromark-util-types: 2.0.0
+ vfile-message: 4.0.2
+ dev: false
+
+ /micromark-extension-mdx-md@2.0.0:
+ resolution: {integrity: sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==}
+ dependencies:
+ micromark-util-types: 2.0.0
+ dev: false
+
+ /micromark-extension-mdxjs-esm@3.0.0:
+ resolution: {integrity: sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==}
+ dependencies:
+ '@types/estree': 1.0.5
+ devlop: 1.1.0
+ micromark-core-commonmark: 2.0.0
+ micromark-util-character: 2.1.0
+ micromark-util-events-to-acorn: 2.0.2
+ micromark-util-symbol: 2.0.0
+ micromark-util-types: 2.0.0
+ unist-util-position-from-estree: 2.0.0
+ vfile-message: 4.0.2
+ dev: false
+
+ /micromark-extension-mdxjs@3.0.0:
+ resolution: {integrity: sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==}
+ dependencies:
+ acorn: 8.11.3
+ acorn-jsx: 5.3.2(acorn@8.11.3)
+ micromark-extension-mdx-expression: 3.0.0
+ micromark-extension-mdx-jsx: 3.0.0
+ micromark-extension-mdx-md: 2.0.0
+ micromark-extension-mdxjs-esm: 3.0.0
+ micromark-util-combine-extensions: 2.0.0
+ micromark-util-types: 2.0.0
+ dev: false
+
/micromark-factory-destination@2.0.0:
resolution: {integrity: sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==}
dependencies:
@@ -3485,6 +3817,19 @@ packages:
micromark-util-types: 2.0.0
dev: false
+ /micromark-factory-mdx-expression@2.0.1:
+ resolution: {integrity: sha512-F0ccWIUHRLRrYp5TC9ZYXmZo+p2AM13ggbsW4T0b5CRKP8KHVRB8t4pwtBgTxtjRmwrK0Irwm7vs2JOZabHZfg==}
+ dependencies:
+ '@types/estree': 1.0.5
+ devlop: 1.1.0
+ micromark-util-character: 2.1.0
+ micromark-util-events-to-acorn: 2.0.2
+ micromark-util-symbol: 2.0.0
+ micromark-util-types: 2.0.0
+ unist-util-position-from-estree: 2.0.0
+ vfile-message: 4.0.2
+ dev: false
+
/micromark-factory-space@2.0.0:
resolution: {integrity: sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==}
dependencies:
@@ -3557,6 +3902,19 @@ packages:
resolution: {integrity: sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==}
dev: false
+ /micromark-util-events-to-acorn@2.0.2:
+ resolution: {integrity: sha512-Fk+xmBrOv9QZnEDguL9OI9/NQQp6Hz4FuQ4YmCb/5V7+9eAh1s6AYSvL20kHkD67YIg7EpE54TiSlcsf3vyZgA==}
+ dependencies:
+ '@types/acorn': 4.0.6
+ '@types/estree': 1.0.5
+ '@types/unist': 3.0.2
+ devlop: 1.1.0
+ estree-util-visit: 2.0.0
+ micromark-util-symbol: 2.0.0
+ micromark-util-types: 2.0.0
+ vfile-message: 4.0.2
+ dev: false
+
/micromark-util-html-tag-name@2.0.0:
resolution: {integrity: sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==}
dev: false
@@ -3731,6 +4089,12 @@ packages:
'@types/nlcst': 1.0.4
dev: false
+ /nlcst-to-string@4.0.0:
+ resolution: {integrity: sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA==}
+ dependencies:
+ '@types/nlcst': 2.0.3
+ dev: false
+
/no-case@3.0.4:
resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==}
dependencies:
@@ -3873,6 +4237,19 @@ packages:
engines: {node: '>=6'}
dev: false
+ /parse-entities@4.0.1:
+ resolution: {integrity: sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==}
+ dependencies:
+ '@types/unist': 2.0.10
+ character-entities: 2.0.2
+ character-entities-legacy: 3.0.0
+ character-reference-invalid: 2.0.1
+ decode-named-character-reference: 1.0.2
+ is-alphanumerical: 2.0.1
+ is-decimal: 2.0.1
+ is-hexadecimal: 2.0.1
+ dev: false
+
/parse-latin@5.0.1:
resolution: {integrity: sha512-b/K8ExXaWC9t34kKeDV8kGXBkXZ1HCSAZRYE7HR14eA1GlXX5L8iWhs8USJNhQU9q5ci413jCKF0gOyovvyRBg==}
dependencies:
@@ -3881,6 +4258,17 @@ packages:
unist-util-visit-children: 2.0.2
dev: false
+ /parse-latin@7.0.0:
+ resolution: {integrity: sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ==}
+ dependencies:
+ '@types/nlcst': 2.0.3
+ '@types/unist': 3.0.2
+ nlcst-to-string: 4.0.0
+ unist-util-modify-children: 4.0.0
+ unist-util-visit-children: 3.0.0
+ vfile: 6.0.1
+ dev: false
+
/parse5@7.1.2:
resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==}
dependencies:
@@ -4253,6 +4641,15 @@ packages:
- supports-color
dev: false
+ /remark-mdx@3.0.1:
+ resolution: {integrity: sha512-3Pz3yPQ5Rht2pM5R+0J2MrGoBSrzf+tJG94N+t/ilfdh8YLyyKYtidAYwTveB20BoHAcwIopOUqhcmh2F7hGYA==}
+ dependencies:
+ mdast-util-mdx: 3.0.0
+ micromark-extension-mdxjs: 3.0.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
/remark-parse@11.0.0:
resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==}
dependencies:
@@ -4283,6 +4680,16 @@ packages:
unist-util-visit: 5.0.0
dev: false
+ /remark-smartypants@3.0.1:
+ resolution: {integrity: sha512-qyshfCl2eLO0i0558e79ZJsfojC5wjnYLByjt0FmjJQN6aYwcRxpoj784LZJSoWCdnA2ubh5rLNGb8Uur/wDng==}
+ engines: {node: '>=16.0.0'}
+ dependencies:
+ retext: 9.0.0
+ retext-smartypants: 6.1.0
+ unified: 11.0.4
+ unist-util-visit: 5.0.0
+ dev: false
+
/remark-stringify@11.0.0:
resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==}
dependencies:
@@ -4321,6 +4728,14 @@ packages:
unified: 10.1.2
dev: false
+ /retext-latin@4.0.0:
+ resolution: {integrity: sha512-hv9woG7Fy0M9IlRQloq/N6atV82NxLGveq+3H2WOi79dtIYWN8OaxogDm77f8YnVXJL2VD3bbqowu5E3EMhBYA==}
+ dependencies:
+ '@types/nlcst': 2.0.3
+ parse-latin: 7.0.0
+ unified: 11.0.4
+ dev: false
+
/retext-smartypants@5.2.0:
resolution: {integrity: sha512-Do8oM+SsjrbzT2UNIKgheP0hgUQTDDQYyZaIY3kfq0pdFzoPk+ZClYJ+OERNXveog4xf1pZL4PfRxNoVL7a/jw==}
dependencies:
@@ -4330,6 +4745,14 @@ packages:
unist-util-visit: 4.1.2
dev: false
+ /retext-smartypants@6.1.0:
+ resolution: {integrity: sha512-LDPXg95346bqFZnDMHo0S7Rq5p64+B+N8Vz733+wPMDtwb9rCOs9LIdIEhrUOU+TAywX9St+ocQWJt8wrzivcQ==}
+ dependencies:
+ '@types/nlcst': 2.0.3
+ nlcst-to-string: 4.0.0
+ unist-util-visit: 5.0.0
+ dev: false
+
/retext-stringify@3.1.0:
resolution: {integrity: sha512-767TLOaoXFXyOnjx/EggXlb37ZD2u4P1n0GJqVdpipqACsQP+20W+BNpMYrlJkq7hxffnFk+jc6mAK9qrbuB8w==}
dependencies:
@@ -4338,6 +4761,14 @@ packages:
unified: 10.1.2
dev: false
+ /retext-stringify@4.0.0:
+ resolution: {integrity: sha512-rtfN/0o8kL1e+78+uxPTqu1Klt0yPzKuQ2BfWwwfgIUSayyzxpM1PJzkKt4V8803uB9qSy32MvI7Xep9khTpiA==}
+ dependencies:
+ '@types/nlcst': 2.0.3
+ nlcst-to-string: 4.0.0
+ unified: 11.0.4
+ dev: false
+
/retext@8.1.0:
resolution: {integrity: sha512-N9/Kq7YTn6ZpzfiGW45WfEGJqFf1IM1q8OsRa1CGzIebCJBNCANDRmOrholiDRGKo/We7ofKR4SEvcGAWEMD3Q==}
dependencies:
@@ -4347,6 +4778,15 @@ packages:
unified: 10.1.2
dev: false
+ /retext@9.0.0:
+ resolution: {integrity: sha512-sbMDcpHCNjvlheSgMfEcVrZko3cDzdbe1x/e7G66dFp0Ff7Mldvi2uv6JkJQzdRcvLYE8CA8Oe8siQx8ZOgTcA==}
+ dependencies:
+ '@types/nlcst': 2.0.3
+ retext-latin: 4.0.0
+ retext-stringify: 4.0.0
+ unified: 11.0.4
+ dev: false
+
/reusify@1.0.4:
resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
@@ -4555,6 +4995,11 @@ packages:
engines: {node: '>=0.10.0'}
dev: false
+ /source-map@0.7.4:
+ resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==}
+ engines: {node: '>= 8'}
+ dev: false
+
/sourcemap-codec@1.4.8:
resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==}
deprecated: Please use @jridgewell/sourcemap-codec instead
@@ -4665,6 +5110,18 @@ packages:
requiresBuild: true
dev: false
+ /style-to-object@0.4.4:
+ resolution: {integrity: sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==}
+ dependencies:
+ inline-style-parser: 0.1.1
+ dev: false
+
+ /style-to-object@1.0.6:
+ resolution: {integrity: sha512-khxq+Qm3xEyZfKd/y9L3oIWQimxuc4STrQKtQn8aSDRHb8mFgpukgX1hdzfrMEW6JCjyJ8p89x+IUMVnCBI1PA==}
+ dependencies:
+ inline-style-parser: 0.2.3
+ dev: false
+
/sucrase@3.35.0:
resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==}
engines: {node: '>=16 || 14 >=14.17'}
@@ -4947,6 +5404,19 @@ packages:
array-iterate: 2.0.1
dev: false
+ /unist-util-modify-children@4.0.0:
+ resolution: {integrity: sha512-+tdN5fGNddvsQdIzUF3Xx82CU9sMM+fA0dLgR9vOmT0oPT2jH+P1nd5lSqfCfXAw+93NhcXNY2qqvTUtE4cQkw==}
+ dependencies:
+ '@types/unist': 3.0.2
+ array-iterate: 2.0.1
+ dev: false
+
+ /unist-util-position-from-estree@2.0.0:
+ resolution: {integrity: sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==}
+ dependencies:
+ '@types/unist': 3.0.2
+ dev: false
+
/unist-util-position@5.0.0:
resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==}
dependencies:
@@ -4978,6 +5448,12 @@ packages:
'@types/unist': 2.0.10
dev: false
+ /unist-util-visit-children@3.0.0:
+ resolution: {integrity: sha512-RgmdTfSBOg04sdPcpTSD1jzoNBjt9a80/ZCzp5cI9n1qPzLZWF9YdvWGN2zmTumP1HWhXKdUWexjy/Wy/lJ7tA==}
+ dependencies:
+ '@types/unist': 3.0.2
+ dev: false
+
/unist-util-visit-parents@5.1.3:
resolution: {integrity: sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==}
dependencies:
diff --git a/public/assets/videos/dock-animation.mp4 b/public/assets/videos/dock-animation.mp4
new file mode 100644
index 0000000..3509afc
Binary files /dev/null and b/public/assets/videos/dock-animation.mp4 differ
diff --git a/public/assets/videos/genie.mp4 b/public/assets/videos/genie.mp4
new file mode 100644
index 0000000..accca65
Binary files /dev/null and b/public/assets/videos/genie.mp4 differ
diff --git a/public/assets/videos/hidden-bar.mp4 b/public/assets/videos/hidden-bar.mp4
new file mode 100644
index 0000000..8163144
Binary files /dev/null and b/public/assets/videos/hidden-bar.mp4 differ
diff --git a/public/assets/videos/scale.mp4 b/public/assets/videos/scale.mp4
new file mode 100644
index 0000000..b82fb80
Binary files /dev/null and b/public/assets/videos/scale.mp4 differ
diff --git a/src/assets/images/macbook.jpg b/src/assets/images/macbook.jpg
new file mode 100644
index 0000000..8da6eaa
Binary files /dev/null and b/src/assets/images/macbook.jpg differ
diff --git a/src/assets/images/macos-productivity-guide/display-settings.png b/src/assets/images/macos-productivity-guide/display-settings.png
new file mode 100644
index 0000000..772f9c7
Binary files /dev/null and b/src/assets/images/macos-productivity-guide/display-settings.png differ
diff --git a/src/assets/images/macos-productivity-guide/finder-sorted.png b/src/assets/images/macos-productivity-guide/finder-sorted.png
new file mode 100644
index 0000000..c33d530
Binary files /dev/null and b/src/assets/images/macos-productivity-guide/finder-sorted.png differ
diff --git a/src/assets/images/macos-productivity-guide/finder-unsorted.png b/src/assets/images/macos-productivity-guide/finder-unsorted.png
new file mode 100644
index 0000000..2b3a27f
Binary files /dev/null and b/src/assets/images/macos-productivity-guide/finder-unsorted.png differ
diff --git a/src/assets/images/macos-productivity-guide/magnet.png b/src/assets/images/macos-productivity-guide/magnet.png
new file mode 100644
index 0000000..7a3bee4
Binary files /dev/null and b/src/assets/images/macos-productivity-guide/magnet.png differ
diff --git a/src/assets/images/macos-productivity-guide/raycast.png b/src/assets/images/macos-productivity-guide/raycast.png
new file mode 100644
index 0000000..9af0385
Binary files /dev/null and b/src/assets/images/macos-productivity-guide/raycast.png differ
diff --git a/src/components/InlineVideo.astro b/src/components/InlineVideo.astro
new file mode 100644
index 0000000..5065ed7
--- /dev/null
+++ b/src/components/InlineVideo.astro
@@ -0,0 +1,7 @@
+---
+const { src, width, height } = Astro.props;
+---
+
+
diff --git a/src/content/blog/macos-productivity-guide.mdx b/src/content/blog/macos-productivity-guide.mdx
new file mode 100644
index 0000000..b6bb818
--- /dev/null
+++ b/src/content/blog/macos-productivity-guide.mdx
@@ -0,0 +1,203 @@
+---
+intro: "macOS is great, but it has a lot of flaws. In this article, I'll walk through all the settings, apps, and tweaks I use to improve my productivity in macOS!"
+image: "@assets/images/macbook.jpg"
+date: 2024-05-27
+---
+
+import InlineVideo from "@components/InlineVideo.astro";
+
+# How to boost your productivity with macOS
+
+
+
+Four years ago, I got my first Mac. After using Windows for 15 years, macOS felt very foreign. But once I got the hang of it, I started to really appreciate the “Apple magic” that make their products so desirable. In fact, I've grown to like macOS so much that it's hard to imagine switching to anything else now.
+
+However, I'm not claiming that macOS is flawless. Frankly, I think macOS has a _lot_ of flaws, and I keep discovering more of them all the time. Most people will probably just accept this and move on with their life. But as the nerd I am, I am constantly in search of tools, tweaks, and hacks that can improve my workflow when I sit down in front of my computer.
+
+In the rest of this article, I'll walk through all the settings, apps, and tweaks I use to improve my productivity in macOS. Even if you don't care as much about your operating systems as I do, I think every seasoned Mac user will find something useful here. With that out of the way, let's jump in!
+
+## Maximize your screen space
+
+Typically, the best thing you can do to improve any computer experience is to get a bigger screen. The reason for this is pretty simple: the bigger the screen, the more stuff you can fit in. You can have multiple windows open at the same time, see more of your web page or document without having to scroll all the time, or work with larger canvases in creative apps.
+
+However, if you're anything like me, you are probably stuck with a laptop screen most of the time. Personally, I spend 90% of my computer time in front of my 13 inch MacBook. And while having a larger physical display is generally a better experience, that doesn't mean that you can't optimize for the screen size you actually have!
+
+### Change the macOS display settings
+
+The best thing you can do to get more space on your screen is to **change the scaling factor in the display settings**. Open the Settings app and head to "Displays", and you'll see this interface letting you change the size of your apps and windows:
+
+
+
+The default setting depends on when your Mac is from, but I generally find that Apple's pre-selected option makes UI elements a bit too big, compromising how much you can fit on the screen at the same time. I personally find the option all the way to the right (typically labeled "More Space") the best one. Granted, I have great eyesight, so it doesn't bother me that things are a bit small. Your mileage may vary, so experiment a bit with the different options and find the one that makes the right tradeoff for you!
+
+### Hide the Dock
+
+In case you're unfamiliar with the terminology, the macOS Dock is the row of apps on the bottom of your screen. By default, the Dock is always there, and it's pretty big. Depending on your display size and settings, the Dock can take up as much as 15% of your total vertical screen space. This is space that instead could be utilized by your web browser, text editor, or email app!
+
+macOS has many settings for changing the appearance and behavior of the Dock. Firstly, **I strongly recommend enabling Dock auto-hide**. Head to _System Settings → Desktop & Dock_, and you'll find a setting called "Automatically hide and show the Dock". Once enabled, your dock will disappear, leaving more space for apps instead! When you actually need to use the Dock, just move your mouse to the bottom of the screen, and the Dock will slide out automatically. You might notice that this animation is kinda slow, but don’t worry: we’ll fix that in the next section.
+
+Keep in mind that not having the Dock visible all the time will likely feel a little strange at first. I recommend giving it a shot for a week, even if you don't like it right away. You probably won't want to go back (especially if you use Raycast; more on that in the next section too).
+
+Now, if auto-hide really isn't your cup of tea, there are still other things you can do to save space. Typically, vertical screen space is more valuable than vertical space (your screen is more wide than tall!). Some people therefore prefer **moving the Dock on the left or the right** instead because of this. You can also simply make the Dock a little smaller to save some space!
+
+### Un-clutter your menu bar
+
+If you take all my app recommendations throughout this article, you might realize that the right side of your menu bar gets a bit cluttered from everything that has to run in the background. There’s a tiny app on the App Store called **Hidden Bar** that efficiently cleans up this mess. Hidden Bar places a small arrow icon in the menu bar, which when clicked toggles the visibility of the menu bar icons. You can move your menu bar items by holding `Cmd` and dragging the icons. This lets you decide which menu bar items are visible all the time, and which ones are stowed away by Hidden Bar. Neat!
+
+