Compare commits
10 Commits
54bb79d35a
...
b5a8a9a4fc
| Author | SHA1 | Date | |
|---|---|---|---|
| b5a8a9a4fc | |||
| 5c300ba53d | |||
| 886361053d | |||
| 9f91e1d9c4 | |||
|
|
1d685a0a0c | ||
|
|
8bbd0cfec5 | ||
|
|
1762c5c12b | ||
|
|
df72b76af2 | ||
|
|
0c815df022 | ||
|
|
eced17af4c |
52
README.md
52
README.md
@@ -1,44 +1,6 @@
|
||||
# Astro Starter Kit: Blog
|
||||
# My website
|
||||
|
||||
```sh
|
||||
npm create astro@latest -- --template blog
|
||||
```
|
||||
|
||||
> 🧑🚀 **Seasoned astronaut?** Delete this file. Have fun!
|
||||
|
||||
Features:
|
||||
|
||||
- ✅ Minimal styling (make it your own!)
|
||||
- ✅ 100/100 Lighthouse performance
|
||||
- ✅ SEO-friendly with canonical URLs and Open Graph data
|
||||
- ✅ Sitemap support
|
||||
- ✅ RSS Feed support
|
||||
- ✅ Markdown & MDX support
|
||||
|
||||
## 🚀 Project Structure
|
||||
|
||||
Inside of your Astro project, you'll see the following folders and files:
|
||||
|
||||
```text
|
||||
├── public/
|
||||
├── src/
|
||||
│ ├── components/
|
||||
│ ├── content/
|
||||
│ ├── layouts/
|
||||
│ └── pages/
|
||||
├── astro.config.mjs
|
||||
├── README.md
|
||||
├── package.json
|
||||
└── tsconfig.json
|
||||
```
|
||||
|
||||
Astro looks for `.astro` or `.md` files in the `src/pages/` directory. Each page is exposed as a route based on its file name.
|
||||
|
||||
There's nothing special about `src/components/`, but that's where we like to put any Astro/React/Vue/Svelte/Preact components.
|
||||
|
||||
The `src/content/` directory contains "collections" of related Markdown and MDX documents. Use `getCollection()` to retrieve posts from `src/content/blog/`, and type-check your frontmatter using an optional schema. See [Astro's Content Collections docs](https://docs.astro.build/en/guides/content-collections/) to learn more.
|
||||
|
||||
Any static assets, like images, can be placed in the `public/` directory.
|
||||
theres nothing here look at my website
|
||||
|
||||
## 🧞 Commands
|
||||
|
||||
@@ -53,10 +15,8 @@ All commands are run from the root of the project, from a terminal:
|
||||
| `npm run astro ...` | Run CLI commands like `astro add`, `astro check` |
|
||||
| `npm run astro -- --help` | Get help using the Astro CLI |
|
||||
|
||||
## 👀 Want to learn more?
|
||||
|
||||
Check out [our documentation](https://docs.astro.build) or jump into our [Discord server](https://astro.build/chat).
|
||||
|
||||
## Credit
|
||||
|
||||
This theme is based off of the lovely [Bear Blog](https://github.com/HermanMartinus/bearblog/).
|
||||
## to deploy to cloudflare:
|
||||
```
|
||||
npx astro build && npx wrangler deploy
|
||||
```
|
||||
|
||||
388
package-lock.json
generated
388
package-lock.json
generated
@@ -8,7 +8,7 @@
|
||||
"name": "tested-telescope",
|
||||
"version": "0.0.1",
|
||||
"dependencies": {
|
||||
"@astrojs/cloudflare": "^13.1.1",
|
||||
"@astrojs/cloudflare": "^13.5.2",
|
||||
"@astrojs/mdx": "^5.0.0",
|
||||
"@astrojs/rss": "^4.0.17",
|
||||
"@astrojs/sitemap": "^3.7.1",
|
||||
@@ -17,41 +17,50 @@
|
||||
"rehype-katex": "^7.0.1",
|
||||
"remark-math": "^6.0.0",
|
||||
"remark-toc": "^9.0.0",
|
||||
"sharp": "^0.34.3",
|
||||
"wrangler": "^4.73.0"
|
||||
"sharp": "^0.34.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/node": "^25.5.0",
|
||||
"better-sqlite3": "^12.8.0",
|
||||
"cross-env": "^10.1.0",
|
||||
"drizzle-kit": "^0.31.9"
|
||||
"drizzle-kit": "^0.31.9",
|
||||
"wrangler": "^4.93.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=22.12.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@astrojs/cloudflare": {
|
||||
"version": "13.1.1",
|
||||
"resolved": "https://registry.npmjs.org/@astrojs/cloudflare/-/cloudflare-13.1.1.tgz",
|
||||
"integrity": "sha512-Bx2Sr/cLi9VUA0iArMYc/O6wsKZdC2W6prE8dzMGbJqaF5oEBVBG6UclKe1T95SISrDIysuLlFNvVWL6htqnuA==",
|
||||
"version": "13.5.2",
|
||||
"resolved": "https://registry.npmjs.org/@astrojs/cloudflare/-/cloudflare-13.5.2.tgz",
|
||||
"integrity": "sha512-crtYJtsQCE5LvGRCEiuWK3w64h4Er+Yw5XW8mVEFtgbzAGuLs7a38SjJniZTP9gw2awaJ1rRQOjceJU8jcR6hQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@astrojs/internal-helpers": "0.8.0",
|
||||
"@astrojs/underscore-redirects": "1.0.1",
|
||||
"@cloudflare/vite-plugin": "^1.25.6",
|
||||
"@astrojs/internal-helpers": "0.9.1",
|
||||
"@astrojs/underscore-redirects": "1.0.3",
|
||||
"@cloudflare/vite-plugin": "^1.32.3",
|
||||
"piccolore": "^0.1.3",
|
||||
"tinyglobby": "^0.2.15",
|
||||
"vite": "^7.3.1"
|
||||
"vite": "^7.3.2"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"astro": "^6.0.0-alpha.0",
|
||||
"wrangler": "^4.61.1"
|
||||
"astro": "^6.3.0",
|
||||
"wrangler": "^4.83.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@astrojs/cloudflare/node_modules/@astrojs/internal-helpers": {
|
||||
"version": "0.9.1",
|
||||
"resolved": "https://registry.npmjs.org/@astrojs/internal-helpers/-/internal-helpers-0.9.1.tgz",
|
||||
"integrity": "sha512-1pWuARqYom/TzuU3+0ZugsTrKlUydWKuULmDqSMTuonY+9IRDUEGKX/8PXQ1nBxRq3w85uGtd9q9SXfqEldMIQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"picomatch": "^4.0.4"
|
||||
}
|
||||
},
|
||||
"node_modules/@astrojs/compiler": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@astrojs/compiler/-/compiler-3.0.0.tgz",
|
||||
"integrity": "sha512-MwAbDE5mawZ1SS+D8qWiHdprdME5Tlj2e0YjxnEICvcOpbSukNS7Sa7hA5PK+6RrmUr/t6Gi5YgrdZKjbO/WPQ==",
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@astrojs/compiler/-/compiler-4.0.0.tgz",
|
||||
"integrity": "sha512-eouss7G8ygdZqHuke033VMcVw5HTZUu+PXd/h06DGDUg/jt5btPYPqh66ENWw/mU78rBrf/oeC4oqoBwMtDMNA==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@astrojs/internal-helpers": {
|
||||
@@ -153,17 +162,15 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@astrojs/telemetry": {
|
||||
"version": "3.3.0",
|
||||
"resolved": "https://registry.npmjs.org/@astrojs/telemetry/-/telemetry-3.3.0.tgz",
|
||||
"integrity": "sha512-UFBgfeldP06qu6khs/yY+q1cDAaArM2/7AEIqQ9Cuvf7B1hNLq0xDrZkct+QoIGyjq56y8IaE2I3CTvG99mlhQ==",
|
||||
"version": "3.3.2",
|
||||
"resolved": "https://registry.npmjs.org/@astrojs/telemetry/-/telemetry-3.3.2.tgz",
|
||||
"integrity": "sha512-j8DNruA8ors99Al39RYZPJK4DC1bKkoNm93mAMuBhY9TCNC4R8n1q7ovFnJ5qhGh5Lsh7pa1gpQVpYpsJPeTHQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"ci-info": "^4.2.0",
|
||||
"debug": "^4.4.0",
|
||||
"dlv": "^1.1.3",
|
||||
"ci-info": "^4.4.0",
|
||||
"dset": "^3.1.4",
|
||||
"is-docker": "^3.0.0",
|
||||
"is-wsl": "^3.1.0",
|
||||
"is-docker": "^4.0.0",
|
||||
"is-wsl": "^3.1.1",
|
||||
"which-pm-runs": "^1.1.0"
|
||||
},
|
||||
"engines": {
|
||||
@@ -171,9 +178,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@astrojs/underscore-redirects": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@astrojs/underscore-redirects/-/underscore-redirects-1.0.1.tgz",
|
||||
"integrity": "sha512-iSImJzW8m7MjA+15oJZAbSqSWu6ApQ0N8A0SaWV9yLzKYjzxWm/tZKbRSLRv94OE/rXuM25ZG7R8TepkhH7ahA==",
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/@astrojs/underscore-redirects/-/underscore-redirects-1.0.3.tgz",
|
||||
"integrity": "sha512-cxnGSw+sJigBLdX4TMSZKkzV6C3gMLJMucDk2W+n281Xhie68T2/9f1+1NMNDCZsc5i0FED7Qt5I10g2O9wtZg==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@babel/helper-string-parser": {
|
||||
@@ -254,22 +261,22 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@cloudflare/kv-asset-handler": {
|
||||
"version": "0.4.2",
|
||||
"resolved": "https://registry.npmjs.org/@cloudflare/kv-asset-handler/-/kv-asset-handler-0.4.2.tgz",
|
||||
"integrity": "sha512-SIOD2DxrRRwQ+jgzlXCqoEFiKOFqaPjhnNTGKXSRLvp1HiOvapLaFG2kEr9dYQTYe8rKrd9uvDUzmAITeNyaHQ==",
|
||||
"version": "0.5.0",
|
||||
"resolved": "https://registry.npmjs.org/@cloudflare/kv-asset-handler/-/kv-asset-handler-0.5.0.tgz",
|
||||
"integrity": "sha512-jxQYkj8dSIzc0cD6cMMNdOc1UVjqSqu8BZdor5s8cGjW2I8BjODt/kWPVdY+u9zj3ms75Q5qaZgnxUad83+eAg==",
|
||||
"license": "MIT OR Apache-2.0",
|
||||
"engines": {
|
||||
"node": ">=18.0.0"
|
||||
"node": ">=22.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@cloudflare/unenv-preset": {
|
||||
"version": "2.15.0",
|
||||
"resolved": "https://registry.npmjs.org/@cloudflare/unenv-preset/-/unenv-preset-2.15.0.tgz",
|
||||
"integrity": "sha512-EGYmJaGZKWl+X8tXxcnx4v2bOZSjQeNI5dWFeXivgX9+YCT69AkzHHwlNbVpqtEUTbew8eQurpyOpeN8fg00nw==",
|
||||
"version": "2.16.1",
|
||||
"resolved": "https://registry.npmjs.org/@cloudflare/unenv-preset/-/unenv-preset-2.16.1.tgz",
|
||||
"integrity": "sha512-ECxObrMfyTl5bhQf/lZCXwo5G6xX9IAUo+nDMKK4SZ8m4Jvvxp52vilxyySSWh2YTZz8+HQ07qGH/2rEom1vDw==",
|
||||
"license": "MIT OR Apache-2.0",
|
||||
"peerDependencies": {
|
||||
"unenv": "2.0.0-rc.24",
|
||||
"workerd": "1.20260301.1 || ~1.20260302.1 || ~1.20260303.1 || ~1.20260304.1 || >1.20260305.0 <2.0.0-0"
|
||||
"workerd": ">1.20260305.0 <2.0.0-0"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"workerd": {
|
||||
@@ -278,26 +285,26 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@cloudflare/vite-plugin": {
|
||||
"version": "1.28.0",
|
||||
"resolved": "https://registry.npmjs.org/@cloudflare/vite-plugin/-/vite-plugin-1.28.0.tgz",
|
||||
"integrity": "sha512-h2idr5fZ5GojyWZOZ506NHaDAVq3zpvcKgk8ZzDLlnHHvOwXZlFDPRf9Kkffv0fe+J6GPn7gVjJxgT0YRXAbew==",
|
||||
"version": "1.37.2",
|
||||
"resolved": "https://registry.npmjs.org/@cloudflare/vite-plugin/-/vite-plugin-1.37.2.tgz",
|
||||
"integrity": "sha512-+QSQVdRcaRp63R3PqPHuIxqZUJnp1wJI2C+Un3DuwYAy2rjiHXKHwAvPWeUWIB8u04sydPFEuOwa0RaZA/hsJQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@cloudflare/unenv-preset": "2.15.0",
|
||||
"miniflare": "4.20260312.0",
|
||||
"@cloudflare/unenv-preset": "2.16.1",
|
||||
"miniflare": "4.20260518.0",
|
||||
"unenv": "2.0.0-rc.24",
|
||||
"wrangler": "4.73.0",
|
||||
"wrangler": "4.93.0",
|
||||
"ws": "8.18.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"vite": "^6.1.0 || ^7.0.0",
|
||||
"wrangler": "^4.73.0"
|
||||
"vite": "^6.1.0 || ^7.0.0 || ^8.0.0",
|
||||
"wrangler": "^4.93.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@cloudflare/workerd-darwin-64": {
|
||||
"version": "1.20260312.1",
|
||||
"resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-64/-/workerd-darwin-64-1.20260312.1.tgz",
|
||||
"integrity": "sha512-HUAtDWaqUduS6yasV6+NgsK7qBpP1qGU49ow/Wb117IHjYp+PZPUGReDYocpB4GOMRoQlvdd4L487iFxzdARpw==",
|
||||
"version": "1.20260518.1",
|
||||
"resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-64/-/workerd-darwin-64-1.20260518.1.tgz",
|
||||
"integrity": "sha512-IhZEf5kDd0CLRtFxGS9AUqfM5SY3EFScqqCY1VF9twNMdYpJDYrDZDJAkQitHF8sF/sPVVHYR4Aifpdq6tzmaA==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
@@ -311,9 +318,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@cloudflare/workerd-darwin-arm64": {
|
||||
"version": "1.20260312.1",
|
||||
"resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-arm64/-/workerd-darwin-arm64-1.20260312.1.tgz",
|
||||
"integrity": "sha512-DOn7TPTHSxJYfi4m4NYga/j32wOTqvJf/pY4Txz5SDKWIZHSTXFyGz2K4B+thoPWLop/KZxGoyTv7db0mk/qyw==",
|
||||
"version": "1.20260518.1",
|
||||
"resolved": "https://registry.npmjs.org/@cloudflare/workerd-darwin-arm64/-/workerd-darwin-arm64-1.20260518.1.tgz",
|
||||
"integrity": "sha512-uqlNP1psd8SWfN1Lg5p8ePv8/piOOXt+ycvb8+NQopXECGeh9+PQ/yr/IQjpurxBhYpvSaMC+vEeihejahjkJg==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
@@ -327,9 +334,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@cloudflare/workerd-linux-64": {
|
||||
"version": "1.20260312.1",
|
||||
"resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-64/-/workerd-linux-64-1.20260312.1.tgz",
|
||||
"integrity": "sha512-TdkIh3WzPXYHuvz7phAtFEEvAxvFd30tHrm4gsgpw0R0F5b8PtoM3hfL2uY7EcBBWVYUBtkY2ahDYFfufnXw/g==",
|
||||
"version": "1.20260518.1",
|
||||
"resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-64/-/workerd-linux-64-1.20260518.1.tgz",
|
||||
"integrity": "sha512-D9p8Hl0lIQ46nYs4fQZp5F+9hhvgOcQJTF1SMQWpAxQSS5f8oX+vL5YdCrETUYnyoaoyEQETtkRrWYKJkPTFeg==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
@@ -343,9 +350,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@cloudflare/workerd-linux-arm64": {
|
||||
"version": "1.20260312.1",
|
||||
"resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-arm64/-/workerd-linux-arm64-1.20260312.1.tgz",
|
||||
"integrity": "sha512-kNauZhL569Iy94t844OMwa1zP6zKFiL3xiJ4tGLS+TFTEfZ3pZsRH6lWWOtkXkjTyCmBEOog0HSEKjIV4oAffw==",
|
||||
"version": "1.20260518.1",
|
||||
"resolved": "https://registry.npmjs.org/@cloudflare/workerd-linux-arm64/-/workerd-linux-arm64-1.20260518.1.tgz",
|
||||
"integrity": "sha512-+vNRkuOp9E/uRKHgQXVDUBPF5cwtTeXK6+ucLK50QUFzMYycqVl8kTFN2b//BX2H5BI4bjMRhXoBpe/zAlGRWQ==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
@@ -359,9 +366,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@cloudflare/workerd-windows-64": {
|
||||
"version": "1.20260312.1",
|
||||
"resolved": "https://registry.npmjs.org/@cloudflare/workerd-windows-64/-/workerd-windows-64-1.20260312.1.tgz",
|
||||
"integrity": "sha512-5dBrlSK+nMsZy5bYQpj8t9iiQNvCRlkm9GGvswJa9vVU/1BNO4BhJMlqOLWT24EmFyApZ+kaBiPJMV8847NDTg==",
|
||||
"version": "1.20260518.1",
|
||||
"resolved": "https://registry.npmjs.org/@cloudflare/workerd-windows-64/-/workerd-windows-64-1.20260518.1.tgz",
|
||||
"integrity": "sha512-tnqofUq+ZvKliQHhboygbH7iy/Zm/MaCCotIlrqVj5a988+tPtndxyLM0r4vaAIC10iy/2LWCkwnE67VFTFiUA==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
@@ -2432,9 +2439,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/anymatch/node_modules/picomatch": {
|
||||
"version": "2.3.1",
|
||||
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
|
||||
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
|
||||
"version": "2.3.2",
|
||||
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz",
|
||||
"integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=8.6"
|
||||
@@ -2484,17 +2491,17 @@
|
||||
}
|
||||
},
|
||||
"node_modules/astro": {
|
||||
"version": "6.0.4",
|
||||
"resolved": "https://registry.npmjs.org/astro/-/astro-6.0.4.tgz",
|
||||
"integrity": "sha512-1piLJCPTL/x7AMO2cjVFSTFyRqKuC3W8sSEySCt1aJio+p/wGs5H3K+Xr/rE9ftKtknLUtjxCqCE7/0NsXfGpQ==",
|
||||
"version": "6.3.5",
|
||||
"resolved": "https://registry.npmjs.org/astro/-/astro-6.3.5.tgz",
|
||||
"integrity": "sha512-gU+4KedkbTuVgz7YoVAN+9Ftnq0GaYwejxK2NbqDzB0M9dWd0f3kXZBuaM9hzbchRFoRAJfJjFtdX9LK6Ir7ZA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@astrojs/compiler": "^3.0.0",
|
||||
"@astrojs/internal-helpers": "0.8.0",
|
||||
"@astrojs/markdown-remark": "7.0.0",
|
||||
"@astrojs/telemetry": "3.3.0",
|
||||
"@astrojs/compiler": "^4.0.0",
|
||||
"@astrojs/internal-helpers": "0.9.1",
|
||||
"@astrojs/markdown-remark": "7.1.2",
|
||||
"@astrojs/telemetry": "3.3.2",
|
||||
"@capsizecss/unpack": "^4.0.0",
|
||||
"@clack/prompts": "^1.0.1",
|
||||
"@clack/prompts": "^1.1.0",
|
||||
"@oslojs/encoding": "^1.1.0",
|
||||
"@rollup/pluginutils": "^5.3.0",
|
||||
"aria-query": "^5.3.2",
|
||||
@@ -2505,16 +2512,17 @@
|
||||
"cookie": "^1.1.1",
|
||||
"devalue": "^5.6.3",
|
||||
"diff": "^8.0.3",
|
||||
"dlv": "^1.1.3",
|
||||
"dset": "^3.1.4",
|
||||
"es-module-lexer": "^2.0.0",
|
||||
"esbuild": "^0.27.3",
|
||||
"flattie": "^1.1.1",
|
||||
"fontace": "~0.4.1",
|
||||
"get-tsconfig": "5.0.0-beta.4",
|
||||
"github-slugger": "^2.0.0",
|
||||
"html-escaper": "3.0.3",
|
||||
"http-cache-semantics": "^4.2.0",
|
||||
"js-yaml": "^4.1.1",
|
||||
"jsonc-parser": "^3.3.1",
|
||||
"magic-string": "^0.30.21",
|
||||
"magicast": "^0.5.2",
|
||||
"mrmime": "^2.0.1",
|
||||
@@ -2524,22 +2532,21 @@
|
||||
"p-queue": "^9.1.0",
|
||||
"package-manager-detector": "^1.6.0",
|
||||
"piccolore": "^0.1.3",
|
||||
"picomatch": "^4.0.3",
|
||||
"picomatch": "^4.0.4",
|
||||
"rehype": "^13.0.2",
|
||||
"semver": "^7.7.4",
|
||||
"shiki": "^4.0.0",
|
||||
"shiki": "^4.0.2",
|
||||
"smol-toml": "^1.6.0",
|
||||
"svgo": "^4.0.0",
|
||||
"tinyclip": "^0.1.6",
|
||||
"tinyexec": "^1.0.2",
|
||||
"svgo": "^4.0.1",
|
||||
"tinyclip": "^0.1.12",
|
||||
"tinyexec": "^1.0.4",
|
||||
"tinyglobby": "^0.2.15",
|
||||
"tsconfck": "^3.1.6",
|
||||
"ultrahtml": "^1.6.0",
|
||||
"unifont": "~0.7.4",
|
||||
"unist-util-visit": "^5.1.0",
|
||||
"unstorage": "^1.17.4",
|
||||
"unstorage": "^1.17.5",
|
||||
"vfile": "^6.0.3",
|
||||
"vite": "^7.3.1",
|
||||
"vite": "^7.3.2",
|
||||
"vitefu": "^1.1.2",
|
||||
"xxhash-wasm": "^1.1.0",
|
||||
"yargs-parser": "^22.0.0",
|
||||
@@ -2549,7 +2556,7 @@
|
||||
"astro": "bin/astro.mjs"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^20.19.1 || >=22.12.0",
|
||||
"node": ">=22.12.0",
|
||||
"npm": ">=9.6.5",
|
||||
"pnpm": ">=7.1.0"
|
||||
},
|
||||
@@ -2561,6 +2568,71 @@
|
||||
"sharp": "^0.34.0"
|
||||
}
|
||||
},
|
||||
"node_modules/astro/node_modules/@astrojs/internal-helpers": {
|
||||
"version": "0.9.1",
|
||||
"resolved": "https://registry.npmjs.org/@astrojs/internal-helpers/-/internal-helpers-0.9.1.tgz",
|
||||
"integrity": "sha512-1pWuARqYom/TzuU3+0ZugsTrKlUydWKuULmDqSMTuonY+9IRDUEGKX/8PXQ1nBxRq3w85uGtd9q9SXfqEldMIQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"picomatch": "^4.0.4"
|
||||
}
|
||||
},
|
||||
"node_modules/astro/node_modules/@astrojs/markdown-remark": {
|
||||
"version": "7.1.2",
|
||||
"resolved": "https://registry.npmjs.org/@astrojs/markdown-remark/-/markdown-remark-7.1.2.tgz",
|
||||
"integrity": "sha512-caXZ4Dc2St2dW8luEg22GlP0gupLdztCTQE4EzZOxW1pqWXz9mbeJEuHUkgDYcKWW8tjIHkydYDhWLVoxJ327Q==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@astrojs/internal-helpers": "0.9.1",
|
||||
"@astrojs/prism": "4.0.2",
|
||||
"github-slugger": "^2.0.0",
|
||||
"hast-util-from-html": "^2.0.3",
|
||||
"hast-util-to-text": "^4.0.2",
|
||||
"js-yaml": "^4.1.1",
|
||||
"mdast-util-definitions": "^6.0.0",
|
||||
"rehype-raw": "^7.0.0",
|
||||
"rehype-stringify": "^10.0.1",
|
||||
"remark-gfm": "^4.0.1",
|
||||
"remark-parse": "^11.0.0",
|
||||
"remark-rehype": "^11.1.2",
|
||||
"remark-smartypants": "^3.0.2",
|
||||
"retext-smartypants": "^6.2.0",
|
||||
"shiki": "^4.0.0",
|
||||
"smol-toml": "^1.6.0",
|
||||
"unified": "^11.0.5",
|
||||
"unist-util-remove-position": "^5.0.0",
|
||||
"unist-util-visit": "^5.1.0",
|
||||
"unist-util-visit-parents": "^6.0.2",
|
||||
"vfile": "^6.0.3"
|
||||
}
|
||||
},
|
||||
"node_modules/astro/node_modules/@astrojs/prism": {
|
||||
"version": "4.0.2",
|
||||
"resolved": "https://registry.npmjs.org/@astrojs/prism/-/prism-4.0.2.tgz",
|
||||
"integrity": "sha512-KTivpmnz6lDsC6o9H4+DNm2SrE/GHzw8cNAvEJwAvUT+eoaEnn/4NtbDNfRRaxaJHdp15gf+tfHAWiXR4wB3BA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"prismjs": "^1.30.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=22.12.0"
|
||||
}
|
||||
},
|
||||
"node_modules/astro/node_modules/get-tsconfig": {
|
||||
"version": "5.0.0-beta.4",
|
||||
"resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-5.0.0-beta.4.tgz",
|
||||
"integrity": "sha512-7nF7C9fIPFEMHgEMEfgIlO9wDdZ8CyHw27rWciFZfHvHDReIiPhsYuzPRXsfvBCqFy1l8RRyyWV7QLM+ZhUJsQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"resolve-pkg-maps": "^1.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=20.20.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
|
||||
}
|
||||
},
|
||||
"node_modules/axobject-query": {
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz",
|
||||
@@ -2830,9 +2902,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/cookie-es": {
|
||||
"version": "1.2.2",
|
||||
"resolved": "https://registry.npmjs.org/cookie-es/-/cookie-es-1.2.2.tgz",
|
||||
"integrity": "sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg==",
|
||||
"version": "1.2.3",
|
||||
"resolved": "https://registry.npmjs.org/cookie-es/-/cookie-es-1.2.3.tgz",
|
||||
"integrity": "sha512-lXVyvUvrNXblMqzIRrxHb57UUVmqsSWlxqt3XIjCkUP0wDAf6uicO6KMbEgYrMNtEvWgWHwe42CKxPu9MYAnWw==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/cross-env": {
|
||||
@@ -3008,9 +3080,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/defu": {
|
||||
"version": "6.1.4",
|
||||
"resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz",
|
||||
"integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==",
|
||||
"version": "6.1.7",
|
||||
"resolved": "https://registry.npmjs.org/defu/-/defu-6.1.7.tgz",
|
||||
"integrity": "sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/dequal": {
|
||||
@@ -3065,12 +3137,6 @@
|
||||
"node": ">=0.3.1"
|
||||
}
|
||||
},
|
||||
"node_modules/dlv": {
|
||||
"version": "1.1.3",
|
||||
"resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
|
||||
"integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/dom-serializer": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz",
|
||||
@@ -4156,14 +4222,14 @@
|
||||
"license": "ISC"
|
||||
},
|
||||
"node_modules/h3": {
|
||||
"version": "1.15.6",
|
||||
"resolved": "https://registry.npmjs.org/h3/-/h3-1.15.6.tgz",
|
||||
"integrity": "sha512-oi15ESLW5LRthZ+qPCi5GNasY/gvynSKUQxgiovrY63bPAtG59wtM+LSrlcwvOHAXzGrXVLnI97brbkdPF9WoQ==",
|
||||
"version": "1.15.11",
|
||||
"resolved": "https://registry.npmjs.org/h3/-/h3-1.15.11.tgz",
|
||||
"integrity": "sha512-L3THSe2MPeBwgIZVSH5zLdBBU90TOxarvhK9d04IDY2AmVS8j2Jz2LIWtwsGOU3lu2I5jCN7FNvVfY2+XyF+mg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"cookie-es": "^1.2.2",
|
||||
"cookie-es": "^1.2.3",
|
||||
"crossws": "^0.3.5",
|
||||
"defu": "^6.1.4",
|
||||
"defu": "^6.1.6",
|
||||
"destr": "^2.0.5",
|
||||
"iron-webcrypto": "^1.2.1",
|
||||
"node-mock-http": "^1.0.4",
|
||||
@@ -4542,15 +4608,15 @@
|
||||
}
|
||||
},
|
||||
"node_modules/is-docker": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz",
|
||||
"integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==",
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/is-docker/-/is-docker-4.0.0.tgz",
|
||||
"integrity": "sha512-LHE+wROyG/Y/0ZnbktRCoTix2c1RhgWaZraMZ8o1Q7zCh0VSrICJQO5oqIIISrcSBtrXv0o233w1IYwsWCjTzA==",
|
||||
"license": "MIT",
|
||||
"bin": {
|
||||
"is-docker": "cli.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
|
||||
"node": ">=20"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
@@ -4584,6 +4650,21 @@
|
||||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
}
|
||||
},
|
||||
"node_modules/is-inside-container/node_modules/is-docker": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz",
|
||||
"integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==",
|
||||
"license": "MIT",
|
||||
"bin": {
|
||||
"is-docker": "cli.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
}
|
||||
},
|
||||
"node_modules/is-plain-obj": {
|
||||
"version": "4.1.0",
|
||||
"resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz",
|
||||
@@ -4630,6 +4711,12 @@
|
||||
"js-yaml": "bin/js-yaml.js"
|
||||
}
|
||||
},
|
||||
"node_modules/jsonc-parser": {
|
||||
"version": "3.3.1",
|
||||
"resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz",
|
||||
"integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/katex": {
|
||||
"version": "0.16.38",
|
||||
"resolved": "https://registry.npmjs.org/katex/-/katex-0.16.38.tgz",
|
||||
@@ -4675,9 +4762,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/lru-cache": {
|
||||
"version": "11.2.7",
|
||||
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.7.tgz",
|
||||
"integrity": "sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==",
|
||||
"version": "11.5.0",
|
||||
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.0.tgz",
|
||||
"integrity": "sha512-5YgH9UJd7wVb9hIouI2adWpgqrrICkt070Dnj8EUY1+B4B2P9eRLPAkAAo6NICA7CEhOIeBHl46u9zSNpNu7zA==",
|
||||
"license": "BlueOak-1.0.0",
|
||||
"engines": {
|
||||
"node": "20 || >=22"
|
||||
@@ -5821,15 +5908,15 @@
|
||||
}
|
||||
},
|
||||
"node_modules/miniflare": {
|
||||
"version": "4.20260312.0",
|
||||
"resolved": "https://registry.npmjs.org/miniflare/-/miniflare-4.20260312.0.tgz",
|
||||
"integrity": "sha512-pieP2rfXynPT6VRINYaiHe/tfMJ4c5OIhqRlIdLF6iZ9g5xgpEmvimvIgMpgAdDJuFlrLcwDUi8MfAo2R6dt/w==",
|
||||
"version": "4.20260518.0",
|
||||
"resolved": "https://registry.npmjs.org/miniflare/-/miniflare-4.20260518.0.tgz",
|
||||
"integrity": "sha512-jbvp43zWa66tuQ+P7bl7s25VJWzGMv4mVhxEEZEEATPvuqAQhGn2wj3rQViVZkZZBZmXQtZ5ZV5kX9VtmWGzuA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@cspotcode/source-map-support": "0.8.1",
|
||||
"sharp": "^0.34.5",
|
||||
"undici": "7.18.2",
|
||||
"workerd": "1.20260312.1",
|
||||
"undici": "7.24.8",
|
||||
"workerd": "1.20260518.1",
|
||||
"ws": "8.18.0",
|
||||
"youch": "4.1.0-beta.10"
|
||||
},
|
||||
@@ -5837,7 +5924,7 @@
|
||||
"miniflare": "bootstrap.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18.0.0"
|
||||
"node": ">=22.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/minimist": {
|
||||
@@ -6173,9 +6260,9 @@
|
||||
"license": "ISC"
|
||||
},
|
||||
"node_modules/picomatch": {
|
||||
"version": "4.0.3",
|
||||
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
|
||||
"integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
|
||||
"version": "4.0.4",
|
||||
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
|
||||
"integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
@@ -6635,7 +6722,6 @@
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz",
|
||||
"integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"funding": {
|
||||
"url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1"
|
||||
@@ -7219,26 +7305,6 @@
|
||||
"url": "https://github.com/sponsors/wooorm"
|
||||
}
|
||||
},
|
||||
"node_modules/tsconfck": {
|
||||
"version": "3.1.6",
|
||||
"resolved": "https://registry.npmjs.org/tsconfck/-/tsconfck-3.1.6.tgz",
|
||||
"integrity": "sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w==",
|
||||
"license": "MIT",
|
||||
"bin": {
|
||||
"tsconfck": "bin/tsconfck.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^18 || >=20"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"typescript": "^5.0.0"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"typescript": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/tslib": {
|
||||
"version": "2.8.1",
|
||||
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
|
||||
@@ -7278,9 +7344,9 @@
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/undici": {
|
||||
"version": "7.18.2",
|
||||
"resolved": "https://registry.npmjs.org/undici/-/undici-7.18.2.tgz",
|
||||
"integrity": "sha512-y+8YjDFzWdQlSE9N5nzKMT3g4a5UBX1HKowfdXh0uvAnTaqqwqB92Jt4UXBAeKekDs5IaDKyJFR4X1gYVCgXcw==",
|
||||
"version": "7.24.8",
|
||||
"resolved": "https://registry.npmjs.org/undici/-/undici-7.24.8.tgz",
|
||||
"integrity": "sha512-6KQ/+QxK49Z/p3HO6E5ZCZWNnCasyZLa5ExaVYyvPxUwKtbCPMKELJOqh7EqOle0t9cH/7d2TaaTRRa6Nhs4YQ==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=20.18.1"
|
||||
@@ -7468,16 +7534,16 @@
|
||||
}
|
||||
},
|
||||
"node_modules/unstorage": {
|
||||
"version": "1.17.4",
|
||||
"resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.17.4.tgz",
|
||||
"integrity": "sha512-fHK0yNg38tBiJKp/Vgsq4j0JEsCmgqH58HAn707S7zGkArbZsVr/CwINoi+nh3h98BRCwKvx1K3Xg9u3VV83sw==",
|
||||
"version": "1.17.5",
|
||||
"resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.17.5.tgz",
|
||||
"integrity": "sha512-0i3iqvRfx29hkNntHyQvJTpf5W9dQ9ZadSoRU8+xVlhVtT7jAX57fazYO9EHvcRCfBCyi5YRya7XCDOsbTgkPg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"anymatch": "^3.1.3",
|
||||
"chokidar": "^5.0.0",
|
||||
"destr": "^2.0.5",
|
||||
"h3": "^1.15.5",
|
||||
"lru-cache": "^11.2.0",
|
||||
"h3": "^1.15.10",
|
||||
"lru-cache": "^11.2.7",
|
||||
"node-fetch-native": "^1.6.7",
|
||||
"ofetch": "^1.5.1",
|
||||
"ufo": "^1.6.3"
|
||||
@@ -7613,9 +7679,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/vite": {
|
||||
"version": "7.3.1",
|
||||
"resolved": "https://registry.npmjs.org/vite/-/vite-7.3.1.tgz",
|
||||
"integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==",
|
||||
"version": "7.3.3",
|
||||
"resolved": "https://registry.npmjs.org/vite/-/vite-7.3.3.tgz",
|
||||
"integrity": "sha512-/4XH147Ui7OGTjg3HbdWe5arnZQSbfuRzdr9Ec7TQi5I7R+ir0Rlc9GIvD4v0XZurELqA035KVXJXpR61xhiTA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"esbuild": "^0.27.0",
|
||||
@@ -7741,9 +7807,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/workerd": {
|
||||
"version": "1.20260312.1",
|
||||
"resolved": "https://registry.npmjs.org/workerd/-/workerd-1.20260312.1.tgz",
|
||||
"integrity": "sha512-nNpPkw9jaqo79B+iBCOiksx+N62xC+ETIfyzofUEdY3cSOHJg6oNnVSHm7vHevzVblfV76c8Gr0cXHEapYMBEg==",
|
||||
"version": "1.20260518.1",
|
||||
"resolved": "https://registry.npmjs.org/workerd/-/workerd-1.20260518.1.tgz",
|
||||
"integrity": "sha512-rLquk/eeqqJCbdGljSSuIZWW25vzYjTblXkD/tXQXKR5YsSIC91EtlqrzA1L4TJDZCxXKeFXPYqkW7R16UipXQ==",
|
||||
"hasInstallScript": true,
|
||||
"license": "Apache-2.0",
|
||||
"bin": {
|
||||
@@ -7753,40 +7819,40 @@
|
||||
"node": ">=16"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"@cloudflare/workerd-darwin-64": "1.20260312.1",
|
||||
"@cloudflare/workerd-darwin-arm64": "1.20260312.1",
|
||||
"@cloudflare/workerd-linux-64": "1.20260312.1",
|
||||
"@cloudflare/workerd-linux-arm64": "1.20260312.1",
|
||||
"@cloudflare/workerd-windows-64": "1.20260312.1"
|
||||
"@cloudflare/workerd-darwin-64": "1.20260518.1",
|
||||
"@cloudflare/workerd-darwin-arm64": "1.20260518.1",
|
||||
"@cloudflare/workerd-linux-64": "1.20260518.1",
|
||||
"@cloudflare/workerd-linux-arm64": "1.20260518.1",
|
||||
"@cloudflare/workerd-windows-64": "1.20260518.1"
|
||||
}
|
||||
},
|
||||
"node_modules/wrangler": {
|
||||
"version": "4.73.0",
|
||||
"resolved": "https://registry.npmjs.org/wrangler/-/wrangler-4.73.0.tgz",
|
||||
"integrity": "sha512-VJXsqKDFCp6OtFEHXITSOR5kh95JOknwPY8m7RyQuWJQguSybJy43m4vhoCSt42prutTef7eeuw7L4V4xiynGw==",
|
||||
"version": "4.93.0",
|
||||
"resolved": "https://registry.npmjs.org/wrangler/-/wrangler-4.93.0.tgz",
|
||||
"integrity": "sha512-qNsPr0oWRTc85SG7s1MjX+mWNTvkNV1zEQvRpTsV6eo8uqtvZoEAq8t8strQi9TtrDP3BOsxmy+N/G3ML6hH2w==",
|
||||
"license": "MIT OR Apache-2.0",
|
||||
"dependencies": {
|
||||
"@cloudflare/kv-asset-handler": "0.4.2",
|
||||
"@cloudflare/unenv-preset": "2.15.0",
|
||||
"@cloudflare/kv-asset-handler": "0.5.0",
|
||||
"@cloudflare/unenv-preset": "2.16.1",
|
||||
"blake3-wasm": "2.1.5",
|
||||
"esbuild": "0.27.3",
|
||||
"miniflare": "4.20260312.0",
|
||||
"miniflare": "4.20260518.0",
|
||||
"path-to-regexp": "6.3.0",
|
||||
"unenv": "2.0.0-rc.24",
|
||||
"workerd": "1.20260312.1"
|
||||
"workerd": "1.20260518.1"
|
||||
},
|
||||
"bin": {
|
||||
"wrangler": "bin/wrangler.js",
|
||||
"wrangler2": "bin/wrangler.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=20.0.0"
|
||||
"node": ">=22.0.0"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"fsevents": "~2.3.2"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@cloudflare/workers-types": "^4.20260312.1"
|
||||
"@cloudflare/workers-types": "^4.20260518.1"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"@cloudflare/workers-types": {
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
"db:studio:prod": "source .drizzle.env && DB_ID='48bf8d26-cdae-4887-a2c5-cf539788b6a5' drizzle-kit studio"
|
||||
},
|
||||
"dependencies": {
|
||||
"@astrojs/cloudflare": "^13.1.1",
|
||||
"@astrojs/cloudflare": "^13.5.2",
|
||||
"@astrojs/mdx": "^5.0.0",
|
||||
"@astrojs/rss": "^4.0.17",
|
||||
"@astrojs/sitemap": "^3.7.1",
|
||||
@@ -29,13 +29,13 @@
|
||||
"rehype-katex": "^7.0.1",
|
||||
"remark-math": "^6.0.0",
|
||||
"remark-toc": "^9.0.0",
|
||||
"sharp": "^0.34.3",
|
||||
"wrangler": "^4.73.0"
|
||||
"sharp": "^0.34.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/node": "^25.5.0",
|
||||
"better-sqlite3": "^12.8.0",
|
||||
"cross-env": "^10.1.0",
|
||||
"drizzle-kit": "^0.31.9"
|
||||
"drizzle-kit": "^0.31.9",
|
||||
"wrangler": "^4.93.0"
|
||||
}
|
||||
}
|
||||
|
||||
BIN
public/perfect-notebook/notebook.png
Normal file
BIN
public/perfect-notebook/notebook.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 26 KiB |
BIN
src/assets/article_hero_images/decision-tree.jpg
Normal file
BIN
src/assets/article_hero_images/decision-tree.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 158 KiB |
BIN
src/assets/article_hero_images/notebook.png
Normal file
BIN
src/assets/article_hero_images/notebook.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 26 KiB |
@@ -56,6 +56,7 @@ check this article often as i will be updating it
|
||||
- using uart as a bus : https://www.uartbus.eu/
|
||||
- https://milkv.io/docs/duo/overview
|
||||
- https://multitude.net/wp-content/uploads/2022/07/BLESS_Book.pdf
|
||||
- just all of cerns opensource hardware : https://ohwr.org/
|
||||
|
||||
# forges
|
||||
- https://sourcehut.org/
|
||||
@@ -152,3 +153,7 @@ check this article often as i will be updating it
|
||||
- https://www.amazon.com.au/dp/0070486174?ref_=mr_referred_us_au_nz
|
||||
- https://www.abebooks.com/9780520013636/Human-Engineering-Guide-Equipment-Designers-0520013638/plp
|
||||
- https://link.springer.com/book/10.1007/978-1-4419-1788-1
|
||||
|
||||
# useful documents
|
||||
- https://scidyne.com/ftp/ref_info/atx_201.pdf
|
||||
|
||||
|
||||
54
src/content/blog/my-perfect-notebook.md
Normal file
54
src/content/blog/my-perfect-notebook.md
Normal file
@@ -0,0 +1,54 @@
|
||||
---
|
||||
title: 'my perfect notebook'
|
||||
description: 'recently I purchased some very nice notebooks from an art supply store however they are not perfect yet, so I will outline the changing I am planning on making to them in order to make them suit my needs, as well as requirements for my perfect notebook'
|
||||
heroImage: '../../assets/article_hero_images/notebook.png'
|
||||
pubDate: 'Apr 19 2026'
|
||||
---
|
||||
|
||||
A while back I bought a Samsung Galaxy phone with the stylus partly because I wanted a new phone and partly because I thought it would use useful to take notes.
|
||||
However, I found that when I would take notes on it the notes would just seem to fall into the bottomless pit (metaphorical bottomless, I have filled it with music) that is my phone.
|
||||
so in my final year of unit I started taken notes on paper instead of my phone or even an Ipad and found it a lot better.
|
||||
Although I wanted a better writing experience since I have started doing more lab work where space tends to be at a premium.
|
||||
Therefor I recently purchased the [Ecoqua Original notebook](https://fabriano.com/en/product/ecoqua-original/) from fabriano.
|
||||
These notebooks are wonderfully sized somewhere just smaller than a sheet of A6 with as well as excellent paper quality sitting at 90gsm[^1] with no bleed through.
|
||||
Before this I was using [paperblanks notebooks](https://www.paperblanks.com/en/) and just like the Ecoqua they too have excellent although slightly thicker sitting at 120gsm as well as some very pretty colours.
|
||||
Additionally, they also have a built-in document pocket and well as book ribbon and elastic or a clasp to hold the notebook close.
|
||||
However, the largest downside of these notebooks were even in their smallest sizes (~A5) they were still too thick at 18mm with about 7mm of that coming from the covers.
|
||||
This thickness of the covers also makes it very difficult to hold a pen on it as well.
|
||||
So for a notebook that can be crammed in to a pocket paperblanks notebooks just arnt feasible unlike the Ecoqua which are around 4-5mm thick.
|
||||
However, This is not to say the paperblanks notebooks are bad they are great a journaling notebooks (which I believe is what they actually sell them as).
|
||||
But this is not to say the Ecoqua doesnt have downsides too, the largest one being they are paperbacked and for a notebook I carry around there normally isnt a hard surface near when I intend to write something down.
|
||||
So that is the main problem I want a hardcover notebook that I can cram in my pocket and hold at least a pen as well as the obligatory of looking pretty.
|
||||
To convert these desires easier to in to a set of requirements using the [EARS format](https://alistairmavin.com/ears/):
|
||||
|
||||
- The notebook shall be no larger than a sheet of A6 paper
|
||||
- The notebook shall be no thicker than a phone with a case (*this is mainly because most things are designed with phones in mind*)
|
||||
- The notebook shall contain some visual appeal
|
||||
- The notebook shall have a documents pocket
|
||||
- The notebook shall have a hardcover
|
||||
- the notebook shall have a location to store a pen
|
||||
|
||||
Now time for the more gimmicky things I keep thinking would be nice in a notebook:
|
||||
|
||||
- When the pen is removed from the notebook, the notebook can then be opened
|
||||
- this is primarily because when you open a notebook you intend to write in it.
|
||||
Therefor requiring that the pen is removed in order to be opened would allow for a cleaner solution then a piece of elastic or a clasp that might not close if too many things are in the notebook
|
||||
- The notebook shall contain storage for additional drawing implements such as stencils and straight edges
|
||||
- The notebook shall have the ablity to change the paper within it.
|
||||
|
||||
for a design to meet these requirement I have created an [openscad script](https://git.sirlilpanda.studio/sirlilpanda/parametric-notebook) that generates a notebook based off of a page size.
|
||||
This notebook uses a hinge based design I originally saw from a creator called [dogteeth](https://www.dogteeth.co/) who created a notebook based off a fence hinge.
|
||||
|
||||

|
||||
|
||||
However, I believe they did not take full use of the hinge designs additional the pages with in the notebook feel too tall.
|
||||
Although I do believe this is just due to their design using off the shelf parts and not custom fabrication.
|
||||
Therefor my plan is to take this same design expand out the metal holding the hinge to give more space for the paper.
|
||||
Additionally, I plan to create a hole through the hinge and using that to hold the pen much like a spiral bound notebook, this would also allow for the possibility of cutting a keyway in as well, meaning when the pen is inserted the notebook cannot open.
|
||||
However, this notebook design does have a major flaw and thats the hinge itself, when the notebook fully open the hinge sits in the middle causing there to be a bump in the middle of the notebook.
|
||||
One method of solving this could be to change to more of a notepad instead, but this changes the use of the notebook to a notepad, since notebook are there so you can look back through your notes where notepads are there to write notes down then discard of them.
|
||||
|
||||
There are other possible designs I may still look in to like lether bound notebooks where I might just embed some piece of hard material in, or maybe a spiral notebook with some hardcover.
|
||||
However for the mean time I will continue development on this current notebook possibility trying to find an alternative hinge mechanism with possible future updates to come.
|
||||
|
||||
[^1]: gsm or Grammage is simply the ratio of the mass (g) of the paper compared to its area (m<sup>2</sup>), this unit does correlate to the thickness of the paper however higher gsm papers can be thinner then lower gsm papers.
|
||||
@@ -0,0 +1,114 @@
|
||||
---
|
||||
title: 'using decision trees for self documenting design reports'
|
||||
description: |
|
||||
decision trees are a tool more commonly used in contexts of probability modeling as well as business decision mapping. However, this article uses them in the context of product design as a method for continuous documention of design.
|
||||
heroImage: '../../assets/article_hero_images/decision-tree.jpg'
|
||||
pubDate: 'May 21 2026'
|
||||
---
|
||||
|
||||
Some background I enjoy to help out with some of the design courses at uni and act as a stakeholder in a product.
|
||||
These students then have to go out and design either some project that i had rattling around in the good old head hole or one of their on creation.
|
||||
Once they have designed it they then must write a design report and throw it as me so they can get marked.
|
||||
When reviewing these design reports I have seen both great reports and terrible reports (and even worse reports that make me question how they made it this far).
|
||||
Throughout that time I noticed the main thing that separates a great report from one that I would use as kindling, that being comparisons of different choices.
|
||||
To give and example this would be like a student comparing many different microcontrollers before selecting the one thats best for the job rather than just writing "i picked this one because ive used it before" (not to say that this is a bad rational for picking a MCU but it is bad rational if you didnt compare it to any others) or even worse they dont even specify the MCU.
|
||||
However, I believe (possibly naively) that students have thought of the alternative but have just not included them in their reports.
|
||||
This then leads to them not writing as much rational and therefor not creating an convincing argument for why this choice was made.
|
||||
As if you have not yet worked it out yet a design report isn't a report that tells the reading what you designed a design report is you attempting to convince the reader that your design is the best design.
|
||||
|
||||
So to solve this problem of not writing down alternatives during the design/research phase i have adapted the concept of decision trees. Decision trees are more commonly found in probability modeling, business decision mapping and many other fields.
|
||||
Firstly the syntax, normal decision trees tend to only have 3 node types:
|
||||
- decision
|
||||
- chance
|
||||
- end
|
||||
|
||||
These node then allow the user to map out a tree of possible decision and the optimise for their given path.
|
||||
these although good are not enough for the more complex system that is design.
|
||||
|
||||
Therefor my suggested syntax/nodes are:
|
||||
- `+` : problem <br/>
|
||||
this is the main problem you are attempting to solve some time solutions can create new problems. An example of this is if a motor draws too much power and now you have a new problem to deal with
|
||||
- `>` : solution <br/>
|
||||
this a solution to a decision
|
||||
- `?` : decision <br/>
|
||||
this is the node where decision are made like what microcontroller should we select
|
||||
- `^` : pro <br/>
|
||||
this allow the user to write down the pros for the given solution
|
||||
- `*` : con <br/>
|
||||
this allow the user to write down the cons for the given solution
|
||||
- `!` : depends on [^1] <br/>
|
||||
This allows for decision to depend on other decision within the system. lets say something needs to be actuated, the choice of actuator will depend on the power system available
|
||||
- `#` : tag <br/>
|
||||
this is used to tag multiple items when something depends on them
|
||||
- `${id}` : requirement <br/>
|
||||
this allows for the addition of requirement for a given decision
|
||||
- `-` : <br/>
|
||||
comment, reasoning, explanation
|
||||
|
||||
(i have given them characters has it's easier to identify when typed)
|
||||
So how does this syntax solve the problem of students not writing down their design during research; well it doesn't that's still on the student to do.
|
||||
However, this does allow for a fast way to check over your design to check if there are any gaps in your design. Therefor lets use this in an example project.
|
||||
Additionally, pros and cons can also be used to show that a given solution meets a given requirements ID.
|
||||
|
||||
## Example project
|
||||
|
||||
problem statement: need a device for continuous monitor for the temperature of a system over WiFi
|
||||
|
||||
Requirements: (i would write some here but thats not the main point of the article)
|
||||
...
|
||||
|
||||
|
||||
```
|
||||
+ need a device for continuous monitor for the temperature of a system over WiFi
|
||||
? off the shelf device
|
||||
> google nest temperature sensor
|
||||
> idk some other tempture sensor
|
||||
? bespoke device
|
||||
? microcontroller
|
||||
$1.1 the micro controller shall have WiFi
|
||||
$1.2 the micro controller shall have an interface to commuicate with a temperature sensors
|
||||
> esp32s3
|
||||
# bulitin temp sensor
|
||||
^ 1.1
|
||||
* more expensive
|
||||
? stm32
|
||||
# bulitin temp sensor
|
||||
> stm32wb
|
||||
^ built in wifi
|
||||
* requires RF routing
|
||||
> stm32g4
|
||||
# wifi-less
|
||||
> rp2040
|
||||
# wifi-less
|
||||
> atmega
|
||||
# wifi-less
|
||||
|
||||
? wifi
|
||||
! wifi-less
|
||||
> nrf24
|
||||
> WINCS02PE-I/100
|
||||
> esp8266
|
||||
|
||||
? temperature sensor
|
||||
?! bulitin temp sensor
|
||||
- the inbuilt temp sensor my not be good enough
|
||||
> tmp100
|
||||
? thermistor
|
||||
...
|
||||
? thermocouple
|
||||
? adc
|
||||
...
|
||||
? spec
|
||||
...
|
||||
```
|
||||
|
||||
|
||||
So as you can see in the example project we are attempting to solve the problem of remotely measuring temperature using WiFi.
|
||||
So starting off we make the decision whether we make our own device on get one off the shelf.
|
||||
For the bespoke deice we recognize that we need a microcontroller, Some way to communicate over wifi and some way to measure temperature.
|
||||
Additionally, we can see in the decision to pick a Wi-Fi module that it depends on if we select a wifi-less MCU which is denoted by the tags.
|
||||
Again you can notice with the temperature sensor the bulitin temp sensor dependency also has a decision mark this is to show that this dependency is optional so even if it is met then you can still pick another one for a different reason.
|
||||
Now using this tree you can keep adding to it more rational more requirements
|
||||
|
||||
|
||||
[^1] : and yes, the depends on does now in technically make this a graph but if you end up with a circular dependence in your design that's your fault
|
||||
4725
src/pages/boms/index.astro
Normal file
4725
src/pages/boms/index.astro
Normal file
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user