Compare changes

Choose any two refs to compare.

+3 -1
astro.config.mjs
··· 2 2 import { defineConfig } from "astro/config"; 3 3 4 4 // https://astro.build/config 5 - export default defineConfig({}); 5 + export default defineConfig({ 6 + site: "https://entomoviscera.online", 7 + });
+343 -109
package-lock.json
··· 8 8 "name": "personal-site", 9 9 "version": "0.0.1", 10 10 "dependencies": { 11 + "@astrojs/rss": "^4.0.13", 11 12 "astro": "^5.15.1" 12 13 }, 13 14 "devDependencies": { ··· 22 23 "license": "MIT" 23 24 }, 24 25 "node_modules/@astrojs/internal-helpers": { 25 - "version": "0.7.4", 26 - "resolved": "https://registry.npmjs.org/@astrojs/internal-helpers/-/internal-helpers-0.7.4.tgz", 27 - "integrity": "sha512-lDA9MqE8WGi7T/t2BMi+EAXhs4Vcvr94Gqx3q15cFEz8oFZMO4/SFBqYr/UcmNlvW+35alowkVj+w9VhLvs5Cw==", 26 + "version": "0.7.5", 27 + "resolved": "https://registry.npmjs.org/@astrojs/internal-helpers/-/internal-helpers-0.7.5.tgz", 28 + "integrity": "sha512-vreGnYSSKhAjFJCWAwe/CNhONvoc5lokxtRoZims+0wa3KbHBdPHSSthJsKxPd8d/aic6lWKpRTYGY/hsgK6EA==", 28 29 "license": "MIT" 29 30 }, 30 31 "node_modules/@astrojs/markdown-remark": { 31 - "version": "6.3.8", 32 - "resolved": "https://registry.npmjs.org/@astrojs/markdown-remark/-/markdown-remark-6.3.8.tgz", 33 - "integrity": "sha512-uFNyFWadnULWK2cOw4n0hLKeu+xaVWeuECdP10cQ3K2fkybtTlhb7J7TcScdjmS8Yps7oje9S/ehYMfZrhrgCg==", 32 + "version": "6.3.9", 33 + "resolved": "https://registry.npmjs.org/@astrojs/markdown-remark/-/markdown-remark-6.3.9.tgz", 34 + "integrity": "sha512-hX2cLC/KW74Io1zIbn92kI482j9J7LleBLGCVU9EP3BeH5MVrnFawOnqD0t/q6D1Z+ZNeQG2gNKMslCcO36wng==", 34 35 "license": "MIT", 35 36 "dependencies": { 36 - "@astrojs/internal-helpers": "0.7.4", 37 + "@astrojs/internal-helpers": "0.7.5", 37 38 "@astrojs/prism": "3.3.0", 38 39 "github-slugger": "^2.0.0", 39 40 "hast-util-from-html": "^2.0.3", ··· 52 53 "unified": "^11.0.5", 53 54 "unist-util-remove-position": "^5.0.0", 54 55 "unist-util-visit": "^5.0.0", 55 - "unist-util-visit-parents": "^6.0.1", 56 + "unist-util-visit-parents": "^6.0.2", 56 57 "vfile": "^6.0.3" 57 58 } 58 59 }, ··· 68 69 "node": "18.20.8 || ^20.3.0 || >=22.0.0" 69 70 } 70 71 }, 72 + "node_modules/@astrojs/rss": { 73 + "version": "4.0.13", 74 + "resolved": "https://registry.npmjs.org/@astrojs/rss/-/rss-4.0.13.tgz", 75 + "integrity": "sha512-ugW4DmGn8kgfl8/qecU3EcKCAuEBrZqY7eYfa6at0sY7HGEwRdzsOafLE437RwDMP2ZuxfKnCNABs99YVhX0kg==", 76 + "license": "MIT", 77 + "dependencies": { 78 + "fast-xml-parser": "^5.3.0", 79 + "picocolors": "^1.1.1" 80 + } 81 + }, 71 82 "node_modules/@astrojs/telemetry": { 72 83 "version": "3.3.0", 73 84 "resolved": "https://registry.npmjs.org/@astrojs/telemetry/-/telemetry-3.3.0.tgz", ··· 133 144 } 134 145 }, 135 146 "node_modules/@capsizecss/unpack": { 136 - "version": "3.0.0", 137 - "resolved": "https://registry.npmjs.org/@capsizecss/unpack/-/unpack-3.0.0.tgz", 138 - "integrity": "sha512-+ntATQe1AlL7nTOYjwjj6w3299CgRot48wL761TUGYpYgAou3AaONZazp0PKZyCyWhudWsjhq1nvRHOvbMzhTA==", 147 + "version": "3.0.1", 148 + "resolved": "https://registry.npmjs.org/@capsizecss/unpack/-/unpack-3.0.1.tgz", 149 + "integrity": "sha512-8XqW8xGn++Eqqbz3e9wKuK7mxryeRjs4LOHLxbh2lwKeSbuNR4NFifDZT4KzvjU6HMOPbiNTsWpniK5EJfTWkg==", 139 150 "license": "MIT", 140 151 "dependencies": { 141 152 "fontkit": "^2.0.2" ··· 1325 1336 ] 1326 1337 }, 1327 1338 "node_modules/@shikijs/core": { 1328 - "version": "3.14.0", 1329 - "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-3.14.0.tgz", 1330 - "integrity": "sha512-qRSeuP5vlYHCNUIrpEBQFO7vSkR7jn7Kv+5X3FO/zBKVDGQbcnlScD3XhkrHi/R8Ltz0kEjvFR9Szp/XMRbFMw==", 1339 + "version": "3.17.0", 1340 + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-3.17.0.tgz", 1341 + "integrity": "sha512-/HjeOnbc62C+n33QFNFrAhUlIADKwfuoS50Ht0pxujxP4QjZAlFp5Q+OkDo531SCTzivx5T18khwyBdKoPdkuw==", 1331 1342 "license": "MIT", 1332 1343 "dependencies": { 1333 - "@shikijs/types": "3.14.0", 1344 + "@shikijs/types": "3.17.0", 1334 1345 "@shikijs/vscode-textmate": "^10.0.2", 1335 1346 "@types/hast": "^3.0.4", 1336 1347 "hast-util-to-html": "^9.0.5" 1337 1348 } 1338 1349 }, 1339 1350 "node_modules/@shikijs/engine-javascript": { 1340 - "version": "3.14.0", 1341 - "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-3.14.0.tgz", 1342 - "integrity": "sha512-3v1kAXI2TsWQuwv86cREH/+FK9Pjw3dorVEykzQDhwrZj0lwsHYlfyARaKmn6vr5Gasf8aeVpb8JkzeWspxOLQ==", 1351 + "version": "3.17.0", 1352 + "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-3.17.0.tgz", 1353 + "integrity": "sha512-WwF99xdP8KfuDrIbT4wxyypfhoIxMeeOCp1AiuvzzZ6JT5B3vIuoclL8xOuuydA6LBeeNXUF/XV5zlwwex1jlA==", 1343 1354 "license": "MIT", 1344 1355 "dependencies": { 1345 - "@shikijs/types": "3.14.0", 1356 + "@shikijs/types": "3.17.0", 1346 1357 "@shikijs/vscode-textmate": "^10.0.2", 1347 - "oniguruma-to-es": "^4.3.3" 1358 + "oniguruma-to-es": "^4.3.4" 1348 1359 } 1349 1360 }, 1350 1361 "node_modules/@shikijs/engine-oniguruma": { 1351 - "version": "3.14.0", 1352 - "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.14.0.tgz", 1353 - "integrity": "sha512-TNcYTYMbJyy+ZjzWtt0bG5y4YyMIWC2nyePz+CFMWqm+HnZZyy9SWMgo8Z6KBJVIZnx8XUXS8U2afO6Y0g1Oug==", 1362 + "version": "3.17.0", 1363 + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.17.0.tgz", 1364 + "integrity": "sha512-flSbHZAiOZDNTrEbULY8DLWavu/TyVu/E7RChpLB4WvKX4iHMfj80C6Hi3TjIWaQtHOW0KC6kzMcuB5TO1hZ8Q==", 1354 1365 "license": "MIT", 1355 1366 "dependencies": { 1356 - "@shikijs/types": "3.14.0", 1367 + "@shikijs/types": "3.17.0", 1357 1368 "@shikijs/vscode-textmate": "^10.0.2" 1358 1369 } 1359 1370 }, 1360 1371 "node_modules/@shikijs/langs": { 1361 - "version": "3.14.0", 1362 - "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.14.0.tgz", 1363 - "integrity": "sha512-DIB2EQY7yPX1/ZH7lMcwrK5pl+ZkP/xoSpUzg9YC8R+evRCCiSQ7yyrvEyBsMnfZq4eBzLzBlugMyTAf13+pzg==", 1372 + "version": "3.17.0", 1373 + "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.17.0.tgz", 1374 + "integrity": "sha512-icmur2n5Ojb+HAiQu6NEcIIJ8oWDFGGEpiqSCe43539Sabpx7Y829WR3QuUW2zjTM4l6V8Sazgb3rrHO2orEAw==", 1364 1375 "license": "MIT", 1365 1376 "dependencies": { 1366 - "@shikijs/types": "3.14.0" 1377 + "@shikijs/types": "3.17.0" 1367 1378 } 1368 1379 }, 1369 1380 "node_modules/@shikijs/themes": { 1370 - "version": "3.14.0", 1371 - "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.14.0.tgz", 1372 - "integrity": "sha512-fAo/OnfWckNmv4uBoUu6dSlkcBc+SA1xzj5oUSaz5z3KqHtEbUypg/9xxgJARtM6+7RVm0Q6Xnty41xA1ma1IA==", 1381 + "version": "3.17.0", 1382 + "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.17.0.tgz", 1383 + "integrity": "sha512-/xEizMHLBmMHwtx4JuOkRf3zwhWD2bmG5BRr0IPjpcWpaq4C3mYEuTk/USAEglN0qPrTwEHwKVpSu/y2jhferA==", 1373 1384 "license": "MIT", 1374 1385 "dependencies": { 1375 - "@shikijs/types": "3.14.0" 1386 + "@shikijs/types": "3.17.0" 1376 1387 } 1377 1388 }, 1378 1389 "node_modules/@shikijs/types": { 1379 - "version": "3.14.0", 1380 - "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.14.0.tgz", 1381 - "integrity": "sha512-bQGgC6vrY8U/9ObG1Z/vTro+uclbjjD/uG58RvfxKZVD5p9Yc1ka3tVyEFy7BNJLzxuWyHH5NWynP9zZZS59eQ==", 1390 + "version": "3.17.0", 1391 + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.17.0.tgz", 1392 + "integrity": "sha512-wjLVfutYWVUnxAjsWEob98xgyaGv0dTEnMZDruU5mRjVN7szcGOfgO+997W2yR6odp+1PtSBNeSITRRTfUzK/g==", 1382 1393 "license": "MIT", 1383 1394 "dependencies": { 1384 1395 "@shikijs/vscode-textmate": "^10.0.2", ··· 1615 1626 } 1616 1627 }, 1617 1628 "node_modules/astro": { 1618 - "version": "5.15.1", 1619 - "resolved": "https://registry.npmjs.org/astro/-/astro-5.15.1.tgz", 1620 - "integrity": "sha512-VM679M1qxOjGo6q3vKYDNDddkALGgMopG93IwbEXd3Buc2xVLuuPj4HNziNugSbPQx5S6UReMp5uzw10EJN81A==", 1629 + "version": "5.16.2", 1630 + "resolved": "https://registry.npmjs.org/astro/-/astro-5.16.2.tgz", 1631 + "integrity": "sha512-NFXqhB1UgBvleF5rLZ7a31Qzprf1lSch+k8o2XTvsw1d97gxGrjVVeWa8AnZUFtirz84YPW6+5NbLVNzS2y+uQ==", 1621 1632 "license": "MIT", 1622 1633 "dependencies": { 1623 - "@astrojs/compiler": "^2.12.2", 1624 - "@astrojs/internal-helpers": "0.7.4", 1625 - "@astrojs/markdown-remark": "6.3.8", 1634 + "@astrojs/compiler": "^2.13.0", 1635 + "@astrojs/internal-helpers": "0.7.5", 1636 + "@astrojs/markdown-remark": "6.3.9", 1626 1637 "@astrojs/telemetry": "3.3.0", 1627 - "@capsizecss/unpack": "^3.0.0", 1638 + "@capsizecss/unpack": "^3.0.1", 1628 1639 "@oslojs/encoding": "^1.1.0", 1629 - "@rollup/pluginutils": "^5.2.0", 1640 + "@rollup/pluginutils": "^5.3.0", 1630 1641 "acorn": "^8.15.0", 1631 1642 "aria-query": "^5.3.2", 1632 1643 "axobject-query": "^4.1.0", 1633 1644 "boxen": "8.0.1", 1634 - "ci-info": "^4.3.0", 1645 + "ci-info": "^4.3.1", 1635 1646 "clsx": "^2.1.1", 1636 1647 "common-ancestor-path": "^1.0.1", 1637 1648 "cookie": "^1.0.2", 1638 1649 "cssesc": "^3.0.0", 1639 - "debug": "^4.4.1", 1650 + "debug": "^4.4.3", 1640 1651 "deterministic-object-hash": "^2.0.2", 1641 - "devalue": "^5.3.2", 1652 + "devalue": "^5.5.0", 1642 1653 "diff": "^5.2.0", 1643 1654 "dlv": "^1.1.3", 1644 1655 "dset": "^3.1.4", ··· 1646 1657 "esbuild": "^0.25.0", 1647 1658 "estree-walker": "^3.0.3", 1648 1659 "flattie": "^1.1.1", 1649 - "fontace": "~0.3.0", 1660 + "fontace": "~0.3.1", 1650 1661 "github-slugger": "^2.0.0", 1651 1662 "html-escaper": "3.0.3", 1652 1663 "http-cache-semantics": "^4.2.0", 1653 1664 "import-meta-resolve": "^4.2.0", 1654 - "js-yaml": "^4.1.0", 1655 - "magic-string": "^0.30.18", 1656 - "magicast": "^0.3.5", 1665 + "js-yaml": "^4.1.1", 1666 + "magic-string": "^0.30.21", 1667 + "magicast": "^0.5.1", 1657 1668 "mrmime": "^2.0.1", 1658 1669 "neotraverse": "^0.6.18", 1659 1670 "p-limit": "^6.2.0", 1660 - "p-queue": "^8.1.0", 1661 - "package-manager-detector": "^1.3.0", 1662 - "picocolors": "^1.1.1", 1671 + "p-queue": "^8.1.1", 1672 + "package-manager-detector": "^1.5.0", 1673 + "piccolore": "^0.1.3", 1663 1674 "picomatch": "^4.0.3", 1664 1675 "prompts": "^2.4.2", 1665 1676 "rehype": "^13.0.2", 1666 - "semver": "^7.7.2", 1667 - "shiki": "^3.12.0", 1668 - "smol-toml": "^1.4.2", 1669 - "tinyexec": "^1.0.1", 1670 - "tinyglobby": "^0.2.14", 1677 + "semver": "^7.7.3", 1678 + "shiki": "^3.15.0", 1679 + "smol-toml": "^1.5.2", 1680 + "svgo": "^4.0.0", 1681 + "tinyexec": "^1.0.2", 1682 + "tinyglobby": "^0.2.15", 1671 1683 "tsconfck": "^3.1.6", 1672 1684 "ultrahtml": "^1.6.0", 1673 1685 "unifont": "~0.6.0", 1674 1686 "unist-util-visit": "^5.0.0", 1675 - "unstorage": "^1.17.0", 1687 + "unstorage": "^1.17.3", 1676 1688 "vfile": "^6.0.3", 1677 - "vite": "^6.3.6", 1689 + "vite": "^6.4.1", 1678 1690 "vitefu": "^1.1.1", 1679 1691 "xxhash-wasm": "^1.1.0", 1680 1692 "yargs-parser": "^21.1.1", 1681 1693 "yocto-spinner": "^0.2.3", 1682 1694 "zod": "^3.25.76", 1683 - "zod-to-json-schema": "^3.24.6", 1695 + "zod-to-json-schema": "^3.25.0", 1684 1696 "zod-to-ts": "^1.2.0" 1685 1697 }, 1686 1698 "bin": { ··· 1743 1755 } 1744 1756 ], 1745 1757 "license": "MIT" 1758 + }, 1759 + "node_modules/boolbase": { 1760 + "version": "1.0.0", 1761 + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", 1762 + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", 1763 + "license": "ISC" 1746 1764 }, 1747 1765 "node_modules/boxen": { 1748 1766 "version": "8.0.1", ··· 1909 1927 "url": "https://github.com/sponsors/wooorm" 1910 1928 } 1911 1929 }, 1930 + "node_modules/commander": { 1931 + "version": "11.1.0", 1932 + "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", 1933 + "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", 1934 + "license": "MIT", 1935 + "engines": { 1936 + "node": ">=16" 1937 + } 1938 + }, 1912 1939 "node_modules/common-ancestor-path": { 1913 1940 "version": "1.0.1", 1914 1941 "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz", ··· 1939 1966 "uncrypto": "^0.1.3" 1940 1967 } 1941 1968 }, 1969 + "node_modules/css-select": { 1970 + "version": "5.2.2", 1971 + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", 1972 + "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", 1973 + "license": "BSD-2-Clause", 1974 + "dependencies": { 1975 + "boolbase": "^1.0.0", 1976 + "css-what": "^6.1.0", 1977 + "domhandler": "^5.0.2", 1978 + "domutils": "^3.0.1", 1979 + "nth-check": "^2.0.1" 1980 + }, 1981 + "funding": { 1982 + "url": "https://github.com/sponsors/fb55" 1983 + } 1984 + }, 1942 1985 "node_modules/css-tree": { 1943 1986 "version": "3.1.0", 1944 1987 "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.1.0.tgz", ··· 1952 1995 "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" 1953 1996 } 1954 1997 }, 1998 + "node_modules/css-what": { 1999 + "version": "6.2.2", 2000 + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", 2001 + "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", 2002 + "license": "BSD-2-Clause", 2003 + "engines": { 2004 + "node": ">= 6" 2005 + }, 2006 + "funding": { 2007 + "url": "https://github.com/sponsors/fb55" 2008 + } 2009 + }, 1955 2010 "node_modules/cssesc": { 1956 2011 "version": "3.0.0", 1957 2012 "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", ··· 1964 2019 "node": ">=4" 1965 2020 } 1966 2021 }, 2022 + "node_modules/csso": { 2023 + "version": "5.0.5", 2024 + "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", 2025 + "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", 2026 + "license": "MIT", 2027 + "dependencies": { 2028 + "css-tree": "~2.2.0" 2029 + }, 2030 + "engines": { 2031 + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", 2032 + "npm": ">=7.0.0" 2033 + } 2034 + }, 2035 + "node_modules/csso/node_modules/css-tree": { 2036 + "version": "2.2.1", 2037 + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", 2038 + "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", 2039 + "license": "MIT", 2040 + "dependencies": { 2041 + "mdn-data": "2.0.28", 2042 + "source-map-js": "^1.0.1" 2043 + }, 2044 + "engines": { 2045 + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", 2046 + "npm": ">=7.0.0" 2047 + } 2048 + }, 2049 + "node_modules/csso/node_modules/mdn-data": { 2050 + "version": "2.0.28", 2051 + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", 2052 + "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", 2053 + "license": "CC0-1.0" 2054 + }, 1967 2055 "node_modules/debug": { 1968 2056 "version": "4.4.3", 1969 2057 "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", ··· 2038 2126 } 2039 2127 }, 2040 2128 "node_modules/devalue": { 2041 - "version": "5.4.2", 2042 - "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.4.2.tgz", 2043 - "integrity": "sha512-MwPZTKEPK2k8Qgfmqrd48ZKVvzSQjgW0lXLxiIBA8dQjtf/6mw6pggHNLcyDKyf+fI6eXxlQwPsfaCMTU5U+Bw==", 2129 + "version": "5.5.0", 2130 + "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.5.0.tgz", 2131 + "integrity": "sha512-69sM5yrHfFLJt0AZ9QqZXGCPfJ7fQjvpln3Rq5+PS03LD32Ost1Q9N+eEnaQwGRIriKkMImXD56ocjQmfjbV3w==", 2044 2132 "license": "MIT" 2045 2133 }, 2046 2134 "node_modules/devlop": { ··· 2077 2165 "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", 2078 2166 "license": "MIT" 2079 2167 }, 2168 + "node_modules/dom-serializer": { 2169 + "version": "2.0.0", 2170 + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", 2171 + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", 2172 + "license": "MIT", 2173 + "dependencies": { 2174 + "domelementtype": "^2.3.0", 2175 + "domhandler": "^5.0.2", 2176 + "entities": "^4.2.0" 2177 + }, 2178 + "funding": { 2179 + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" 2180 + } 2181 + }, 2182 + "node_modules/dom-serializer/node_modules/entities": { 2183 + "version": "4.5.0", 2184 + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", 2185 + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", 2186 + "license": "BSD-2-Clause", 2187 + "engines": { 2188 + "node": ">=0.12" 2189 + }, 2190 + "funding": { 2191 + "url": "https://github.com/fb55/entities?sponsor=1" 2192 + } 2193 + }, 2194 + "node_modules/domelementtype": { 2195 + "version": "2.3.0", 2196 + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", 2197 + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", 2198 + "funding": [ 2199 + { 2200 + "type": "github", 2201 + "url": "https://github.com/sponsors/fb55" 2202 + } 2203 + ], 2204 + "license": "BSD-2-Clause" 2205 + }, 2206 + "node_modules/domhandler": { 2207 + "version": "5.0.3", 2208 + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", 2209 + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", 2210 + "license": "BSD-2-Clause", 2211 + "dependencies": { 2212 + "domelementtype": "^2.3.0" 2213 + }, 2214 + "engines": { 2215 + "node": ">= 4" 2216 + }, 2217 + "funding": { 2218 + "url": "https://github.com/fb55/domhandler?sponsor=1" 2219 + } 2220 + }, 2221 + "node_modules/domutils": { 2222 + "version": "3.2.2", 2223 + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", 2224 + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", 2225 + "license": "BSD-2-Clause", 2226 + "dependencies": { 2227 + "dom-serializer": "^2.0.0", 2228 + "domelementtype": "^2.3.0", 2229 + "domhandler": "^5.0.3" 2230 + }, 2231 + "funding": { 2232 + "url": "https://github.com/fb55/domutils?sponsor=1" 2233 + } 2234 + }, 2080 2235 "node_modules/dset": { 2081 2236 "version": "3.1.4", 2082 2237 "resolved": "https://registry.npmjs.org/dset/-/dset-3.1.4.tgz", ··· 2189 2344 "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 2190 2345 "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", 2191 2346 "license": "MIT" 2347 + }, 2348 + "node_modules/fast-xml-parser": { 2349 + "version": "5.3.0", 2350 + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.3.0.tgz", 2351 + "integrity": "sha512-gkWGshjYcQCF+6qtlrqBqELqNqnt4CxruY6UVAWWnqb3DQ6qaNFEIKqzYep1XzHLM/QtrHVCxyPOtTk4LTQ7Aw==", 2352 + "funding": [ 2353 + { 2354 + "type": "github", 2355 + "url": "https://github.com/sponsors/NaturalIntelligence" 2356 + } 2357 + ], 2358 + "license": "MIT", 2359 + "dependencies": { 2360 + "strnum": "^2.1.0" 2361 + }, 2362 + "bin": { 2363 + "fxparser": "src/cli/cli.js" 2364 + } 2192 2365 }, 2193 2366 "node_modules/fdir": { 2194 2367 "version": "6.5.0", ··· 2590 2763 } 2591 2764 }, 2592 2765 "node_modules/js-yaml": { 2593 - "version": "4.1.0", 2594 - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", 2595 - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", 2766 + "version": "4.1.1", 2767 + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", 2768 + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", 2596 2769 "license": "MIT", 2597 2770 "dependencies": { 2598 2771 "argparse": "^2.0.1" ··· 2636 2809 } 2637 2810 }, 2638 2811 "node_modules/magicast": { 2639 - "version": "0.3.5", 2640 - "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.5.tgz", 2641 - "integrity": "sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==", 2812 + "version": "0.5.1", 2813 + "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.5.1.tgz", 2814 + "integrity": "sha512-xrHS24IxaLrvuo613F719wvOIv9xPHFWQHuvGUBmPnCA/3MQxKI3b+r7n1jAoDHmsbC5bRhTZYR77invLAxVnw==", 2642 2815 "license": "MIT", 2643 2816 "dependencies": { 2644 - "@babel/parser": "^7.25.4", 2645 - "@babel/types": "^7.25.4", 2646 - "source-map-js": "^1.2.0" 2817 + "@babel/parser": "^7.28.5", 2818 + "@babel/types": "^7.28.5", 2819 + "source-map-js": "^1.2.1" 2647 2820 } 2648 2821 }, 2649 2822 "node_modules/markdown-table": { ··· 3526 3699 "node": ">=0.10.0" 3527 3700 } 3528 3701 }, 3702 + "node_modules/nth-check": { 3703 + "version": "2.1.1", 3704 + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", 3705 + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", 3706 + "license": "BSD-2-Clause", 3707 + "dependencies": { 3708 + "boolbase": "^1.0.0" 3709 + }, 3710 + "funding": { 3711 + "url": "https://github.com/fb55/nth-check?sponsor=1" 3712 + } 3713 + }, 3529 3714 "node_modules/ofetch": { 3530 - "version": "1.4.1", 3531 - "resolved": "https://registry.npmjs.org/ofetch/-/ofetch-1.4.1.tgz", 3532 - "integrity": "sha512-QZj2DfGplQAr2oj9KzceK9Hwz6Whxazmn85yYeVuS3u9XTMOGMRx0kO95MQ+vLsj/S/NwBDMMLU5hpxvI6Tklw==", 3715 + "version": "1.5.1", 3716 + "resolved": "https://registry.npmjs.org/ofetch/-/ofetch-1.5.1.tgz", 3717 + "integrity": "sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA==", 3533 3718 "license": "MIT", 3534 3719 "dependencies": { 3535 - "destr": "^2.0.3", 3536 - "node-fetch-native": "^1.6.4", 3537 - "ufo": "^1.5.4" 3720 + "destr": "^2.0.5", 3721 + "node-fetch-native": "^1.6.7", 3722 + "ufo": "^1.6.1" 3538 3723 } 3539 3724 }, 3540 3725 "node_modules/ohash": { ··· 3550 3735 "license": "MIT" 3551 3736 }, 3552 3737 "node_modules/oniguruma-to-es": { 3553 - "version": "4.3.3", 3554 - "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-4.3.3.tgz", 3555 - "integrity": "sha512-rPiZhzC3wXwE59YQMRDodUwwT9FZ9nNBwQQfsd1wfdtlKEyCdRV0avrTcSZ5xlIvGRVPd/cx6ZN45ECmS39xvg==", 3738 + "version": "4.3.4", 3739 + "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-4.3.4.tgz", 3740 + "integrity": "sha512-3VhUGN3w2eYxnTzHn+ikMI+fp/96KoRSVK9/kMTcFqj1NRDh2IhQCKvYxDnWePKRXY/AqH+Fuiyb7VHSzBjHfA==", 3556 3741 "license": "MIT", 3557 3742 "dependencies": { 3558 3743 "oniguruma-parser": "^0.12.1", ··· 3644 3829 "funding": { 3645 3830 "url": "https://github.com/inikulin/parse5?sponsor=1" 3646 3831 } 3832 + }, 3833 + "node_modules/piccolore": { 3834 + "version": "0.1.3", 3835 + "resolved": "https://registry.npmjs.org/piccolore/-/piccolore-0.1.3.tgz", 3836 + "integrity": "sha512-o8bTeDWjE086iwKrROaDf31K0qC/BENdm15/uH9usSC/uZjJOKb2YGiVHfLY4GhwsERiPI1jmwI2XrA7ACOxVw==", 3837 + "license": "ISC" 3647 3838 }, 3648 3839 "node_modules/picocolors": { 3649 3840 "version": "1.1.1", ··· 4011 4202 "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.52.5.tgz", 4012 4203 "integrity": "sha512-3GuObel8h7Kqdjt0gxkEzaifHTqLVW56Y/bjN7PSQtkKr0w3V/QYSdt6QWYtd7A1xUtYQigtdUfgj1RvWVtorw==", 4013 4204 "license": "MIT", 4014 - "peer": true, 4015 4205 "dependencies": { 4016 4206 "@types/estree": "1.0.8" 4017 4207 }, ··· 4065 4255 "suf-log": "^2.5.3" 4066 4256 } 4067 4257 }, 4258 + "node_modules/sax": { 4259 + "version": "1.4.3", 4260 + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.3.tgz", 4261 + "integrity": "sha512-yqYn1JhPczigF94DMS+shiDMjDowYO6y9+wB/4WgO0Y19jWYk0lQ4tuG5KI7kj4FTp1wxPj5IFfcrz/s1c3jjQ==", 4262 + "license": "BlueOak-1.0.0" 4263 + }, 4068 4264 "node_modules/semver": { 4069 4265 "version": "7.7.3", 4070 4266 "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", ··· 4121 4317 } 4122 4318 }, 4123 4319 "node_modules/shiki": { 4124 - "version": "3.14.0", 4125 - "resolved": "https://registry.npmjs.org/shiki/-/shiki-3.14.0.tgz", 4126 - "integrity": "sha512-J0yvpLI7LSig3Z3acIuDLouV5UCKQqu8qOArwMx+/yPVC3WRMgrP67beaG8F+j4xfEWE0eVC4GeBCIXeOPra1g==", 4320 + "version": "3.17.0", 4321 + "resolved": "https://registry.npmjs.org/shiki/-/shiki-3.17.0.tgz", 4322 + "integrity": "sha512-lUZfWsyW7czITYTdo/Tb6ZM4VfyXlzmKYBQBjTz+pBzPPkP08RgIt00Ls1Z50Cl3SfwJsue6WbJeF3UgqLVI9Q==", 4127 4323 "license": "MIT", 4128 4324 "dependencies": { 4129 - "@shikijs/core": "3.14.0", 4130 - "@shikijs/engine-javascript": "3.14.0", 4131 - "@shikijs/engine-oniguruma": "3.14.0", 4132 - "@shikijs/langs": "3.14.0", 4133 - "@shikijs/themes": "3.14.0", 4134 - "@shikijs/types": "3.14.0", 4325 + "@shikijs/core": "3.17.0", 4326 + "@shikijs/engine-javascript": "3.17.0", 4327 + "@shikijs/engine-oniguruma": "3.17.0", 4328 + "@shikijs/langs": "3.17.0", 4329 + "@shikijs/themes": "3.17.0", 4330 + "@shikijs/types": "3.17.0", 4135 4331 "@shikijs/vscode-textmate": "^10.0.2", 4136 4332 "@types/hast": "^3.0.4" 4137 4333 } ··· 4143 4339 "license": "MIT" 4144 4340 }, 4145 4341 "node_modules/smol-toml": { 4146 - "version": "1.4.2", 4147 - "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.4.2.tgz", 4148 - "integrity": "sha512-rInDH6lCNiEyn3+hH8KVGFdbjc099j47+OSgbMrfDYX1CmXLfdKd7qi6IfcWj2wFxvSVkuI46M+wPGYfEOEj6g==", 4342 + "version": "1.5.2", 4343 + "resolved": "https://registry.npmjs.org/smol-toml/-/smol-toml-1.5.2.tgz", 4344 + "integrity": "sha512-QlaZEqcAH3/RtNyet1IPIYPsEWAaYyXXv1Krsi+1L/QHppjX4Ifm8MQsBISz9vE8cHicIq3clogsheili5vhaQ==", 4149 4345 "license": "BSD-3-Clause", 4150 4346 "engines": { 4151 4347 "node": ">= 18" ··· 4219 4415 "url": "https://github.com/chalk/strip-ansi?sponsor=1" 4220 4416 } 4221 4417 }, 4418 + "node_modules/strnum": { 4419 + "version": "2.1.1", 4420 + "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.1.1.tgz", 4421 + "integrity": "sha512-7ZvoFTiCnGxBtDqJ//Cu6fWtZtc7Y3x+QOirG15wztbdngGSkht27o2pyGWrVy0b4WAy3jbKmnoK6g5VlVNUUw==", 4422 + "funding": [ 4423 + { 4424 + "type": "github", 4425 + "url": "https://github.com/sponsors/NaturalIntelligence" 4426 + } 4427 + ], 4428 + "license": "MIT" 4429 + }, 4222 4430 "node_modules/suf-log": { 4223 4431 "version": "2.5.3", 4224 4432 "resolved": "https://registry.npmjs.org/suf-log/-/suf-log-2.5.3.tgz", ··· 4229 4437 "s.color": "0.0.15" 4230 4438 } 4231 4439 }, 4440 + "node_modules/svgo": { 4441 + "version": "4.0.0", 4442 + "resolved": "https://registry.npmjs.org/svgo/-/svgo-4.0.0.tgz", 4443 + "integrity": "sha512-VvrHQ+9uniE+Mvx3+C9IEe/lWasXCU0nXMY2kZeLrHNICuRiC8uMPyM14UEaMOFA5mhyQqEkB02VoQ16n3DLaw==", 4444 + "license": "MIT", 4445 + "dependencies": { 4446 + "commander": "^11.1.0", 4447 + "css-select": "^5.1.0", 4448 + "css-tree": "^3.0.1", 4449 + "css-what": "^6.1.0", 4450 + "csso": "^5.0.5", 4451 + "picocolors": "^1.1.1", 4452 + "sax": "^1.4.1" 4453 + }, 4454 + "bin": { 4455 + "svgo": "bin/svgo.js" 4456 + }, 4457 + "engines": { 4458 + "node": ">=16" 4459 + }, 4460 + "funding": { 4461 + "type": "opencollective", 4462 + "url": "https://opencollective.com/svgo" 4463 + } 4464 + }, 4232 4465 "node_modules/tiny-inflate": { 4233 4466 "version": "1.0.3", 4234 4467 "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", ··· 4236 4469 "license": "MIT" 4237 4470 }, 4238 4471 "node_modules/tinyexec": { 4239 - "version": "1.0.1", 4240 - "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.1.tgz", 4241 - "integrity": "sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==", 4242 - "license": "MIT" 4472 + "version": "1.0.2", 4473 + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.2.tgz", 4474 + "integrity": "sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==", 4475 + "license": "MIT", 4476 + "engines": { 4477 + "node": ">=18" 4478 + } 4243 4479 }, 4244 4480 "node_modules/tinyglobby": { 4245 4481 "version": "0.2.15", ··· 4527 4763 } 4528 4764 }, 4529 4765 "node_modules/unstorage": { 4530 - "version": "1.17.1", 4531 - "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.17.1.tgz", 4532 - "integrity": "sha512-KKGwRTT0iVBCErKemkJCLs7JdxNVfqTPc/85ae1XES0+bsHbc/sFBfVi5kJp156cc51BHinIH2l3k0EZ24vOBQ==", 4766 + "version": "1.17.3", 4767 + "resolved": "https://registry.npmjs.org/unstorage/-/unstorage-1.17.3.tgz", 4768 + "integrity": "sha512-i+JYyy0DoKmQ3FximTHbGadmIYb8JEpq7lxUjnjeB702bCPum0vzo6oy5Mfu0lpqISw7hCyMW2yj4nWC8bqJ3Q==", 4533 4769 "license": "MIT", 4534 4770 "dependencies": { 4535 4771 "anymatch": "^3.1.3", ··· 4538 4774 "h3": "^1.15.4", 4539 4775 "lru-cache": "^10.4.3", 4540 4776 "node-fetch-native": "^1.6.7", 4541 - "ofetch": "^1.4.1", 4777 + "ofetch": "^1.5.1", 4542 4778 "ufo": "^1.6.1" 4543 4779 }, 4544 4780 "peerDependencies": { ··· 4669 4905 "resolved": "https://registry.npmjs.org/vite/-/vite-6.4.1.tgz", 4670 4906 "integrity": "sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==", 4671 4907 "license": "MIT", 4672 - "peer": true, 4673 4908 "dependencies": { 4674 4909 "esbuild": "^0.25.0", 4675 4910 "fdir": "^6.4.4", ··· 4868 5103 "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", 4869 5104 "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", 4870 5105 "license": "MIT", 4871 - "peer": true, 4872 5106 "funding": { 4873 5107 "url": "https://github.com/sponsors/colinhacks" 4874 5108 } 4875 5109 }, 4876 5110 "node_modules/zod-to-json-schema": { 4877 - "version": "3.24.6", 4878 - "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.24.6.tgz", 4879 - "integrity": "sha512-h/z3PKvcTcTetyjl1fkj79MHNEjm+HpD6NXheWjzOekY7kV+lwDYnHw+ivHkijnCSMz1yJaWBD9vu/Fcmk+vEg==", 5111 + "version": "3.25.0", 5112 + "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.25.0.tgz", 5113 + "integrity": "sha512-HvWtU2UG41LALjajJrML6uQejQhNJx+JBO9IflpSja4R03iNWfKXrj6W2h7ljuLyc1nKS+9yDyL/9tD1U/yBnQ==", 4880 5114 "license": "ISC", 4881 5115 "peerDependencies": { 4882 - "zod": "^3.24.1" 5116 + "zod": "^3.25 || ^4" 4883 5117 } 4884 5118 }, 4885 5119 "node_modules/zod-to-ts": {
+2 -1
package.json
··· 7 7 "build": "astro build", 8 8 "preview": "astro preview", 9 9 "astro": "astro", 10 - "cleanup": "prettier . --write" 10 + "cleanup": "prettier . --write --check" 11 11 }, 12 12 "dependencies": { 13 + "@astrojs/rss": "^4.0.13", 13 14 "astro": "^5.15.1" 14 15 }, 15 16 "devDependencies": {
public/favicon.png

This is a binary file and will not be displayed.

public/img/icons/backarrow.png

This is a binary file and will not be displayed.

public/img/icons/home.png

This is a binary file and will not be displayed.

public/img/sitebuttons/afterlifepro.neocities.org.gif

This is a binary file and will not be displayed.

public/img/sitebuttons/afterlifepro.neocities.org.png

This is a binary file and will not be displayed.

public/img/sitebuttons/bensect.space.png

This is a binary file and will not be displayed.

public/img/sitebuttons/corru.observer.gif

This is a binary file and will not be displayed.

public/img/sitebuttons/corru.observer.png

This is a binary file and will not be displayed.

public/img/sitebuttons/doqmeat.com.png

This is a binary file and will not be displayed.

public/img/sitebuttons/espy.world.gif

This is a binary file and will not be displayed.

public/img/sitebuttons/espy.world.png

This is a binary file and will not be displayed.

public/img/sitebuttons/heavenonline.xyz.png

This is a binary file and will not be displayed.

public/img/sitebuttons/kerka.neocities.org.gif

This is a binary file and will not be displayed.

public/img/sitebuttons/kerka.neocities.org.png

This is a binary file and will not be displayed.

public/img/sitebuttons/megaknecht.com.gif

This is a binary file and will not be displayed.

public/img/sitebuttons/megaknecht.com.png

This is a binary file and will not be displayed.

public/img/sitebuttons/myrrh.city.png

This is a binary file and will not be displayed.

public/img/sitebuttons/pocl.vip.gif

This is a binary file and will not be displayed.

public/img/sitebuttons/pocl.vip.png

This is a binary file and will not be displayed.

public/sitebutton.gif

This is a binary file and will not be displayed.

public/sitebutton.png

This is a binary file and will not be displayed.

+12 -3
src/components/Base.astro
··· 16 16 <html lang="en"> 17 17 <head> 18 18 <title>{title}</title> 19 + <link rel="icon" type="image/png" href="/favicon.png" /> 19 20 <link rel="icon" type="image/svg+xml" href="/favicon.svg" /> 21 + <link 22 + rel="alternate" 23 + type="application/rss+xml" 24 + title="entomoviscera.online" 25 + href={new URL("rss.xml", Astro.site)} 26 + /> 20 27 <meta charset="utf-8" /> 21 28 <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 22 29 <meta name="generator" content={Astro.generator} /> ··· 28 35 <meta property="og:description" content={graph.description} /> 29 36 <meta 30 37 property="og:url" 31 - content={ 32 - "https://entomoviscera.online" + Astro.url.pathname.toString() 33 - } 38 + content={new URL(Astro.url.pathname.toString(), Astro.site)} 34 39 /> 35 40 <meta property="og:type" content={graph.type ?? "website"} /> 36 41 <meta property="og:image" content={banner} /> 42 + <meta property="twitter:card" content="summary_large_image" /> 43 + <meta name="twitter:title" content={title} /> 44 + <meta name="twitter:description" content={graph.description} /> 45 + <meta name="twitter:image" content={banner} /> 37 46 </Fragment> 38 47 ) 39 48 }
+31 -1
src/components/BlogPost.astro
··· 3 3 --- 4 4 5 5 <a href={url}> 6 + <div class="decorativetab"></div> 6 7 <article> 7 8 <h3>{title}</h3> 8 9 <time class="barcodetext" datetime={time}>{time}</time> ··· 11 12 12 13 <style> 13 14 a { 14 - display: block; 15 + display: flex; 15 16 border: 10px double; 16 17 text-decoration: none; 18 + margin-bottom: 13px; 17 19 } 18 20 19 21 article { 22 + flex: 1 1; 20 23 padding: 13px 15px; 24 + overflow: hidden; 25 + } 26 + 27 + article h3 { 28 + white-space: nowrap; 29 + overflow: hidden; 30 + text-overflow: ellipsis; 21 31 } 22 32 23 33 time { 24 34 font-weight: bold; 25 35 font-size: 2rem; 36 + } 37 + 38 + .decorativetab { 39 + width: 16px; 40 + border-right: 10px double; 41 + transition: width 200ms; 42 + } 43 + 44 + a:hover { 45 + color: var(--yellow); 46 + } 47 + 48 + a:hover .decorativetab { 49 + width: 64px; 50 + } 51 + 52 + @media (prefers-reduced-motion: reduce) { 53 + .decorativetab { 54 + transition: none; 55 + } 26 56 } 27 57 </style>
+20
src/components/SiteButton.astro
··· 1 + --- 2 + const { url, name, filetype = ".gif" } = Astro.props; 3 + --- 4 + 5 + <a href={url}> 6 + <picture> 7 + <source 8 + srcset={`/img/sitebuttons/${name}.png`} 9 + media="(prefers-reduced-motion: reduce)" 10 + /> 11 + <img srcset={`/img/sitebuttons/${name}${filetype}`} alt={name} /> 12 + </picture> 13 + </a> 14 + 15 + <style> 16 + a { 17 + display: inline-block; 18 + margin-bottom: 6px; 19 + } 20 + </style>
+32
src/components/Toolbar.astro
··· 1 + --- 2 + const { backlink = "/home" } = Astro.props; 3 + --- 4 + 5 + <div id="toolbar" class="flex"> 6 + <a href={backlink}> 7 + <img class="center" src="/img/icons/backarrow.png" alt="return" /> 8 + </a> 9 + <a href="/home"> 10 + <img class="center" src="/img/icons/home.png" alt="home" /> 11 + </a> 12 + </div> 13 + 14 + <style> 15 + #toolbar { 16 + justify-content: space-between; 17 + position: sticky; 18 + top: 0; 19 + margin-bottom: 13px; 20 + } 21 + 22 + #toolbar a { 23 + color: var(--white); 24 + background-color: var(--black); 25 + border: 10px double; 26 + padding: 6px; 27 + } 28 + 29 + #toolbar img { 30 + display: block; 31 + } 32 + </style>
+12
src/content/blog/V03.md
··· 1 + --- 2 + title: Site update V0.3 3 + bio: Fixing some bits and pieces here and there. 4 + pub: 2025-11-28 5 + --- 6 + 7 + Not any major changes this time, mostly just making coding more managable. 8 + Fixing some bits and pieces here and there. 9 + 10 + The poweroff (link back to index) button glows now when hovered over. 11 + 12 + Added a link to my website's repository. Apparently I forgot to do that the first time. Have fun looking at jank code.
+1 -1
src/content/blog/v01.md
··· 1 1 --- 2 2 title: Site update V0.1 3 - bio: Website update log. 3 + bio: Start of this website. Added blog posts. 4 4 pub: 2025-10-31 5 5 --- 6 6
+9
src/content/blog/v02.md
··· 1 + --- 2 + title: Site update V0.2 3 + bio: Added bookmarks page. 4 + pub: 2025-11-03 5 + --- 6 + 7 + There's now a [bookmarks](/bookmarks) page. It links to a bunch of other websites or tools that I personally find cool. Go check em out if you wanna. 8 + 9 + Oh yea, I also made a 88x31 button for my site too.
+10
src/content/bookmarks/bookmarks.md
··· 1 + --- 2 + --- 3 + 4 + - [vielle.dev](https://vielle.dev/) - Cool dev, she codes awesome stuff. Has helped quite a lot with my website too. :P 5 + - [yugoslavia.best](https://yugoslavia.best) - Click here to experience instant brain explosion. 6 + 7 + ## Resources and tools 8 + 9 + - [Marginalia Search](https://marginalia-search.com/) - Better internet search engine that doesn't shove ads down your throat, unlike google. 10 + - [DaFont](https://www.dafont.com/) - Free fonts for commercial and personal use. Make sure to check the license for each font before using.
+54
src/content/bookmarks/personalsites.ts
··· 1 + import { type bookmark } from "/content/config"; 2 + 3 + export const buttonwall: bookmark[] = [ 4 + { 5 + name: "afterlifepro.neocities.org", 6 + url: "https://afterlifepro.neocities.org/", 7 + filetype: ".gif", 8 + }, 9 + { 10 + name: "kerka.neocities.org", 11 + url: "https://kerka.neocities.org/", 12 + filetype: ".gif", 13 + }, 14 + { 15 + name: "heavenonline.xyz", 16 + url: "https://heavenonline.xyz", 17 + filetype: ".png", 18 + }, 19 + { 20 + name: "doqmeat.com", 21 + url: "https://doqmeat.com", 22 + filetype: ".png", 23 + }, 24 + { 25 + name: "corru.observer", 26 + url: "https://corru.observer", 27 + filetype: ".gif", 28 + }, 29 + { 30 + name: "pocl.vip", 31 + url: "https://pocl.vip", 32 + filetype: ".gif", 33 + }, 34 + { 35 + name: "bensect.space", 36 + url: "https://bensect.space", 37 + filetype: ".png", 38 + }, 39 + { 40 + name: "espy.world", 41 + url: "https://espy.world/", 42 + filetype: ".gif", 43 + }, 44 + { 45 + name: "megaknecht.com", 46 + url: "https://megaknecht.com/", 47 + filetype: ".gif", 48 + }, 49 + { 50 + name: "myrrh.city", 51 + url: "https://myrrh.city/", 52 + filetype: ".png", 53 + }, 54 + ];
+6
src/content/config.ts
··· 1 1 import { defineCollection, z } from "astro:content"; 2 2 import { glob } from "astro/loaders"; 3 3 4 + export type bookmark = { 5 + name: string; 6 + url: string; 7 + filetype?: ".gif" | ".png"; 8 + }; 9 + 4 10 const blog = defineCollection({ 5 11 loader: glob({ pattern: "**/*.md", base: "./src/content/blog" }), 6 12 schema: z.object({
+23
src/layouts/SinglePage.astro
··· 1 + --- 2 + import "/styles/main.css"; 3 + import Toolbar from "/components/Toolbar.astro"; 4 + 5 + const { backlink } = Astro.props; 6 + --- 7 + 8 + <Toolbar {backlink} /> 9 + <div class="wrapper bwcontainer"> 10 + <header class="bwbox center"> 11 + <slot name="header" /> 12 + </header> 13 + <main class="bwbox"> 14 + <slot /> 15 + </main> 16 + </div> 17 + 18 + <style> 19 + .wrapper { 20 + max-width: 82ch; 21 + margin: 0 auto; 22 + } 23 + </style>
+3 -3
src/pages/404.astro
··· 1 1 --- 2 - import Base from "../components/Base.astro"; 3 - import "../styles/main.css"; 4 - import "../styles/splashscreen.css"; 2 + import Base from "/components/Base.astro"; 3 + import "/styles/main.css"; 4 + import "/styles/splashscreen.css"; 5 5 --- 6 6 7 7 <Base title="404">
+4 -2
src/pages/blog/[slug].astro
··· 1 1 --- 2 2 import { getCollection, render } from "astro:content"; 3 - import Base from "../../components/Base.astro"; 4 - import "../../styles/main.css"; 3 + import Base from "/components/Base.astro"; 4 + import Toolbar from "/components/Toolbar.astro"; 5 + import "/styles/main.css"; 5 6 6 7 export async function getStaticPaths() { 7 8 const posts = await getCollection("blog"); ··· 22 23 type: "article", 23 24 }} 24 25 > 26 + <Toolbar backlink="/blog" /> 25 27 <article class="bwcontainer"> 26 28 <header class="bwbox center"> 27 29 <h1>{post.data.title}</h1>
+33
src/pages/blog/index.astro
··· 1 + --- 2 + import { getCollection } from "astro:content"; 3 + import Base from "/components/Base.astro"; 4 + import SinglePage from "/layouts/SinglePage.astro"; 5 + import BlogPost from "/components/BlogPost.astro"; 6 + 7 + const post = await getCollection("blog").then((x) => 8 + x.sort( 9 + (a, b) => 10 + (b.data.pub as unknown as number) - (a.data.pub as unknown as number), 11 + ), 12 + ); 13 + --- 14 + 15 + <Base 16 + title="BLOG" 17 + graph={{ 18 + description: "Blog posts and such.", 19 + }} 20 + > 21 + <SinglePage> 22 + <h1 slot="header">Blog posts</h1> 23 + { 24 + post.map((post) => ( 25 + <BlogPost 26 + url={`/blog/${post.id}`} 27 + title={post.data.title} 28 + time={`${post.data.pub.getFullYear()}-${post.data.pub.getMonth() + 1}-${post.data.pub.getDate()}`} 29 + /> 30 + )) 31 + } 32 + </SinglePage> 33 + </Base>
+41
src/pages/bookmarks.astro
··· 1 + --- 2 + import Base from "/components/Base.astro"; 3 + import SinglePage from "/layouts/SinglePage.astro"; 4 + import SiteButton from "/components/SiteButton.astro"; 5 + import { buttonwall } from "/content/bookmarks/personalsites.ts"; 6 + import { Content as OtherBookmarks } from "/content/bookmarks/bookmarks.md"; 7 + --- 8 + 9 + <Base 10 + title="BOOKMARKS" 11 + graph={{ 12 + description: "Links to other cool sites.", 13 + }} 14 + > 15 + <SinglePage> 16 + <h1 slot="header">Bookmarks</h1> 17 + <img src="/sitebutton.gif" alt="site button animated" /> 18 + <img src="/sitebutton.png" alt="site button static" class="hidebutton" /> 19 + <p>Button above you can use to link to my website.</p> 20 + <p> 21 + If you are here and you don't want your site listed please let me know to 22 + remove it. Contact at 23 + <a href="mailto:entomoviscera@gmail.com">entomoviscera@gmail.com</a>. 24 + </p> 25 + <h2>Cool zone</h2> 26 + { 27 + buttonwall.map((x) => ( 28 + <SiteButton name={x.name} url={x.url} filetype={x.filetype} /> 29 + )) 30 + } 31 + <OtherBookmarks /> 32 + </SinglePage> 33 + </Base> 34 + 35 + <style> 36 + @media (prefers-reduced-motion: reduce) { 37 + .hidebutton { 38 + display: none; 39 + } 40 + } 41 + </style>
+34 -6
src/pages/home.astro
··· 1 1 --- 2 2 import { getCollection } from "astro:content"; 3 - import Base from "../components/Base.astro"; 4 - import BlogPost from "../components/BlogPost.astro"; 5 - import "../styles/main.css"; 3 + import Base from "/components/Base.astro"; 4 + import BlogPost from "/components/BlogPost.astro"; 5 + import "/styles/main.css"; 6 6 7 7 const post = await getCollection("blog").then((x) => 8 8 x.sort( ··· 21 21 <div class="bwcontainer wrapper"> 22 22 <header class="bwbox center flex"> 23 23 <h1 class="barcodetext">ENTOMOVISCERA.ONLINE</h1> 24 - <a href="/"> 24 + <a href="/" class="glow"> 25 25 <img src="/img/icons/poweroff.png" alt="return to landing page" /> 26 26 </a> 27 27 </header> 28 + <nav class="bwbox flex flexcenter center"> 29 + <a href="/bookmarks" class="button">::BOOKMARKS::</a> 30 + </nav> 28 31 <main class="grid"> 29 - <div class="bwbox center hidedeco"> 32 + <div class="bwbox flex flexcenter hidedeco"> 30 33 <img src="/img/sprites/sunfl1.png" alt="" /> 31 34 </div> 32 35 <div id="blog" class="bwbox"> 33 - <h2>Latest blog post</h2> 36 + <h2 class="center">Latest blog post</h2> 34 37 <BlogPost 35 38 url={`/blog/${post[0].id}`} 36 39 title={post[0].data.title} 37 40 time={`${post[0].data.pub.getFullYear()}-${post[0].data.pub.getMonth() + 1}-${post[0].data.pub.getDate()}`} 38 41 /> 42 + <div class="blogbuttons center flex flexcenter"> 43 + <a href="/blog" class="button">::ALL_POSTS::</a> 44 + <a href="/rss.xml" class="button">::RSS_FEED::</a> 45 + </div> 39 46 </div> 40 47 </main> 41 48 </div> ··· 48 55 gap: 8px; 49 56 } 50 57 58 + nav { 59 + gap: 13px 15px; 60 + } 61 + 62 + nav a, 63 + .blogbuttons a { 64 + flex: 1 1; 65 + } 66 + 51 67 #blog { 52 68 grid-column: span 3; 53 69 } 54 70 71 + .blogbuttons { 72 + gap: 8px; 73 + } 74 + 55 75 .wrapper { 56 76 max-width: 100ch; 57 77 margin: 0 auto; ··· 60 80 .grid { 61 81 display: grid; 62 82 grid-template-columns: repeat(4, 1fr); 83 + } 84 + 85 + .glow { 86 + filter: 0; 87 + } 88 + 89 + .glow:hover { 90 + filter: drop-shadow(0 0 4px var(--white)); 63 91 } 64 92 65 93 @media (max-width: 86ch) {
+15 -4
src/pages/index.astro
··· 1 1 --- 2 - import Base from "../components/Base.astro"; 3 - import "../styles/main.css"; 4 - import "../styles/splashscreen.css"; 2 + import Base from "/components/Base.astro"; 3 + import "/styles/main.css"; 4 + import "/styles/splashscreen.css"; 5 5 --- 6 6 7 7 <Base ··· 21 21 <a href="https://bsky.app/profile/entomoviscera.online">BLUESKY</a> 22 22 </li> 23 23 <li> 24 + <a 25 + href="https://tangled.org/did:plc:y3zqaodyl6y47l4dptwyhu5n?tab=overview" 26 + >TANGLED</a 27 + > 28 + </li> 29 + <li> 24 30 <a href="https://entomoviscera.tumblr.com/">TUMBLR</a> 25 31 </li> 26 32 <li> ··· 33 39 </div> 34 40 <div class="bwbox"> 35 41 <a href="mailto:entomoviscera@gmail.com">entomoviscera@gmail.com</a> 42 + </div> 43 + <div class="bwbox"> 44 + <a href="https://tangled.org/entomoviscera.online/personal-site" 45 + >SITE REPOSITORY</a 46 + > 36 47 </div> 37 48 </div> 38 49 </Base> ··· 56 67 57 68 @media (prefers-reduced-motion: reduce) { 58 69 #door { 59 - transition: 0; 70 + transition: none; 60 71 } 61 72 } 62 73 </style>
+17
src/pages/rss.xml.js
··· 1 + import rss from "@astrojs/rss"; 2 + import { getCollection } from "astro:content"; 3 + 4 + export async function GET(context) { 5 + const blog = await getCollection("blog"); 6 + return rss({ 7 + title: "ENTOMOVISCERA.ONLINE", 8 + description: "WARNING: Bug inside.", 9 + site: context.site, 10 + items: blog.map((post) => ({ 11 + title: post.data.title, 12 + description: post.data.bio, 13 + pubDate: post.data.pub, 14 + link: `/blog/${post.id}/`, 15 + })), 16 + }); 17 + }
+22 -1
src/styles/main.css
··· 29 29 font-size: 1.5rem; 30 30 } 31 31 32 + h3 { 33 + font-size: 1.25rem; 34 + } 35 + 32 36 p, 33 37 li { 34 38 font-size: 1rem; 35 39 line-height: 1.5rem; 36 40 } 37 41 38 - p { 42 + p, 43 + ul { 39 44 margin: 13px 0; 40 45 } 41 46 ··· 72 77 flex-wrap: wrap; 73 78 } 74 79 80 + .flexcenter { 81 + justify-content: center; 82 + align-items: center; 83 + } 84 + 75 85 .barcodetext { 76 86 font-family: barcodetext; 87 + } 88 + 89 + .button { 90 + display: inline-block; 91 + color: var(--yellow); 92 + border: 10px double; 93 + padding: 4px 6px; 94 + } 95 + 96 + a.button { 97 + text-decoration: none; 77 98 } 78 99 79 100 @font-face {
+6 -1
tsconfig.json
··· 1 1 { 2 2 "extends": "astro/tsconfigs/strict", 3 3 "include": [".astro/types.d.ts", "**/*"], 4 - "exclude": ["dist"] 4 + "exclude": ["dist"], 5 + "compilerOptions": { 6 + "paths": { 7 + "/*": ["./src/*"] 8 + } 9 + } 5 10 }