+3
-1
astro.config.mjs
+3
-1
astro.config.mjs
+343
-109
package-lock.json
+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
+2
-1
package.json
public/favicon.png
public/favicon.png
This is a binary file and will not be displayed.
public/img/icons/backarrow.png
public/img/icons/backarrow.png
This is a binary file and will not be displayed.
public/img/icons/home.png
public/img/icons/home.png
This is a binary file and will not be displayed.
+18
-4
src/components/Base.astro
+18
-4
src/components/Base.astro
···
1
1
---
2
2
interface Props {
3
3
title: string;
4
+
banner?: string;
4
5
graph?: {
5
6
description: string;
6
-
url?: string;
7
7
type?: "website" | "article";
8
-
image?: string;
9
8
};
10
9
}
11
10
12
11
const title = "::" + Astro.props.title;
12
+
const { banner = "https://entomoviscera.online/mainbanner.png" } = Astro.props;
13
13
const { graph } = Astro.props;
14
14
---
15
15
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} />
···
26
33
<meta name="description" content={graph.description} />
27
34
<meta property="og:title" content={title} />
28
35
<meta property="og:description" content={graph.description} />
29
-
<meta property="og:url" content={graph.url} />
36
+
<meta
37
+
property="og:url"
38
+
content={new URL(Astro.url.pathname.toString(), Astro.site)}
39
+
/>
30
40
<meta property="og:type" content={graph.type ?? "website"} />
31
-
<meta property="og:image" content={graph.image} />
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} />
32
46
</Fragment>
33
47
)
34
48
}
+57
src/components/BlogPost.astro
+57
src/components/BlogPost.astro
···
1
+
---
2
+
const { url, title, time } = Astro.props;
3
+
---
4
+
5
+
<a href={url}>
6
+
<div class="decorativetab"></div>
7
+
<article>
8
+
<h3>{title}</h3>
9
+
<time class="barcodetext" datetime={time}>{time}</time>
10
+
</article>
11
+
</a>
12
+
13
+
<style>
14
+
a {
15
+
display: flex;
16
+
border: 10px double;
17
+
text-decoration: none;
18
+
margin-bottom: 13px;
19
+
}
20
+
21
+
article {
22
+
flex: 1 1;
23
+
padding: 13px 15px;
24
+
overflow: hidden;
25
+
}
26
+
27
+
article h3 {
28
+
white-space: nowrap;
29
+
overflow: hidden;
30
+
text-overflow: ellipsis;
31
+
}
32
+
33
+
time {
34
+
font-weight: bold;
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
+
}
56
+
}
57
+
</style>
+20
src/components/SiteButton.astro
+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
+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
+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.
+9
src/content/blog/v01.md
+9
src/content/blog/v01.md
···
1
+
---
2
+
title: Site update V0.1
3
+
bio: Start of this website. Added blog posts.
4
+
pub: 2025-10-31
5
+
---
6
+
7
+
Hello world. Currently there isn't much to see here but at least now there's blog posts. Learning how to use astro. It's the framework I'm currently using to make this site. So far it's not too bad actually.
8
+
9
+
God have mercy for my code is utterly garbage but at least I have the audacity to make it public.
+9
src/content/blog/v02.md
+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
+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
+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
+
];
+19
src/content/config.ts
+19
src/content/config.ts
···
1
+
import { defineCollection, z } from "astro:content";
2
+
import { glob } from "astro/loaders";
3
+
4
+
export type bookmark = {
5
+
name: string;
6
+
url: string;
7
+
filetype?: ".gif" | ".png";
8
+
};
9
+
10
+
const blog = defineCollection({
11
+
loader: glob({ pattern: "**/*.md", base: "./src/content/blog" }),
12
+
schema: z.object({
13
+
title: z.string(),
14
+
bio: z.string(),
15
+
pub: z.date(),
16
+
}),
17
+
});
18
+
19
+
export const collections = { blog };
+23
src/layouts/SinglePage.astro
+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>
+4
-9
src/pages/404.astro
+4
-9
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
-
<Base
8
-
title="404"
9
-
graph={{
10
-
description: "Page not found.",
11
-
}}
12
-
>
7
+
<Base title="404">
13
8
<div class="bwcontainer">
14
9
<main class="bwbox center">
15
10
<h1>ERROR_404</h1>
+59
src/pages/blog/[slug].astro
+59
src/pages/blog/[slug].astro
···
1
+
---
2
+
import { getCollection, render } from "astro:content";
3
+
import Base from "/components/Base.astro";
4
+
import Toolbar from "/components/Toolbar.astro";
5
+
import "/styles/main.css";
6
+
7
+
export async function getStaticPaths() {
8
+
const posts = await getCollection("blog");
9
+
return posts.map((post) => ({
10
+
params: { slug: post.id },
11
+
props: { post },
12
+
}));
13
+
}
14
+
15
+
const { post } = Astro.props;
16
+
const { Content } = await render(post);
17
+
---
18
+
19
+
<Base
20
+
title={`LOG_${post.data.pub.getFullYear()}-${post.data.pub.getMonth() + 1}-${post.data.pub.getDate()} | ${post.data.title}`}
21
+
graph={{
22
+
description: post.data.bio,
23
+
type: "article",
24
+
}}
25
+
>
26
+
<Toolbar backlink="/blog" />
27
+
<article class="bwcontainer">
28
+
<header class="bwbox center">
29
+
<h1>{post.data.title}</h1>
30
+
<time
31
+
class="barcodetext"
32
+
datetime={`${post.data.pub.getFullYear()}-${post.data.pub.getMonth() + 1}-${post.data.pub.getDate()}`}
33
+
>
34
+
{
35
+
`${post.data.pub.getFullYear()}-${post.data.pub.getMonth() + 1}-${post.data.pub.getDate()}`
36
+
}
37
+
</time>
38
+
</header>
39
+
<div class="bwbox">
40
+
<Content />
41
+
</div>
42
+
</article>
43
+
</Base>
44
+
45
+
<style>
46
+
h1 {
47
+
margin-bottom: 13px;
48
+
}
49
+
50
+
time {
51
+
font-weight: bold;
52
+
font-size: 2.5rem;
53
+
}
54
+
55
+
article {
56
+
max-width: 82ch;
57
+
margin: 0 auto;
58
+
}
59
+
</style>
+33
src/pages/blog/index.astro
+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
+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>
+48
-8
src/pages/home.astro
+48
-8
src/pages/home.astro
···
1
1
---
2
-
import Base from "../components/Base.astro";
3
-
import "../styles/main.css";
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";
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
+
);
4
13
---
5
14
6
15
<Base
7
16
title="HOME"
8
17
graph={{
9
18
description: "WARNING: Bug inside.",
10
-
url: "https://entomoviscera.online/home",
11
19
}}
12
20
>
13
21
<div class="bwcontainer wrapper">
14
22
<header class="bwbox center flex">
15
-
<h1>ENTOMOVISCERA.ONLINE</h1>
16
-
<a href="/">
23
+
<h1 class="barcodetext">ENTOMOVISCERA.ONLINE</h1>
24
+
<a href="/" class="glow">
17
25
<img src="/img/icons/poweroff.png" alt="return to landing page" />
18
26
</a>
19
27
</header>
28
+
<nav class="bwbox flex flexcenter center">
29
+
<a href="/bookmarks" class="button">::BOOKMARKS::</a>
30
+
</nav>
20
31
<main class="grid">
21
-
<div class="bwbox center hidedeco">
32
+
<div class="bwbox flex flexcenter hidedeco">
22
33
<img src="/img/sprites/sunfl1.png" alt="" />
23
34
</div>
24
35
<div id="blog" class="bwbox">
25
-
<h2>Latest blog post</h2>
26
-
<p>Under construction. Come back later.</p>
36
+
<h2 class="center">Latest blog post</h2>
37
+
<BlogPost
38
+
url={`/blog/${post[0].id}`}
39
+
title={post[0].data.title}
40
+
time={`${post[0].data.pub.getFullYear()}-${post[0].data.pub.getMonth() + 1}-${post[0].data.pub.getDate()}`}
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>
27
46
</div>
28
47
</main>
29
48
</div>
···
36
55
gap: 8px;
37
56
}
38
57
58
+
nav {
59
+
gap: 13px 15px;
60
+
}
61
+
62
+
nav a,
63
+
.blogbuttons a {
64
+
flex: 1 1;
65
+
}
66
+
39
67
#blog {
40
68
grid-column: span 3;
69
+
}
70
+
71
+
.blogbuttons {
72
+
gap: 8px;
41
73
}
42
74
43
75
.wrapper {
···
48
80
.grid {
49
81
display: grid;
50
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));
51
91
}
52
92
53
93
@media (max-width: 86ch) {
+15
-5
src/pages/index.astro
+15
-5
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
8
8
title="ENTRANCE"
9
9
graph={{
10
10
description: "WARNING: Bug inside.",
11
-
url: "https://entomoviscera.online/",
12
11
}}
13
12
>
14
13
<a href="/home" id="welcome">
···
22
21
<a href="https://bsky.app/profile/entomoviscera.online">BLUESKY</a>
23
22
</li>
24
23
<li>
24
+
<a
25
+
href="https://tangled.org/did:plc:y3zqaodyl6y47l4dptwyhu5n?tab=overview"
26
+
>TANGLED</a
27
+
>
28
+
</li>
29
+
<li>
25
30
<a href="https://entomoviscera.tumblr.com/">TUMBLR</a>
26
31
</li>
27
32
<li>
···
34
39
</div>
35
40
<div class="bwbox">
36
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
+
>
37
47
</div>
38
48
</div>
39
49
</Base>
···
57
67
58
68
@media (prefers-reduced-motion: reduce) {
59
69
#door {
60
-
transition: 0;
70
+
transition: none;
61
71
}
62
72
}
63
73
</style>
+17
src/pages/rss.xml.js
+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
+
}
+36
-7
src/styles/main.css
+36
-7
src/styles/main.css
···
1
-
body {
2
-
font-family: "Courier New", Courier, monospace;
3
-
background-color: var(--black);
4
-
}
5
-
6
1
:root {
2
+
font-family: "Courier New", Courier, monospace;
7
3
--black: #000;
8
4
--grey: #4e505c;
9
5
--orange: #fc9156;
···
11
7
--white: #eceee1;
12
8
}
13
9
10
+
body {
11
+
background-color: var(--black);
12
+
}
13
+
14
14
ul {
15
15
list-style: ":: ";
16
16
padding-left: 3ch;
···
18
18
19
19
h1 {
20
20
font-size: clamp(1.5rem, 1.8vw, 2rem);
21
-
font-family: barcodetext;
21
+
}
22
+
23
+
h2,
24
+
h3 {
25
+
margin-bottom: 13px;
22
26
}
23
27
24
28
h2 {
25
29
font-size: 1.5rem;
26
30
}
27
31
32
+
h3 {
33
+
font-size: 1.25rem;
34
+
}
35
+
28
36
p,
29
37
li {
30
38
font-size: 1rem;
31
39
line-height: 1.5rem;
32
40
}
33
41
34
-
p {
42
+
p,
43
+
ul {
35
44
margin: 13px 0;
36
45
}
37
46
···
66
75
.flex {
67
76
display: flex;
68
77
flex-wrap: wrap;
78
+
}
79
+
80
+
.flexcenter {
81
+
justify-content: center;
82
+
align-items: center;
83
+
}
84
+
85
+
.barcodetext {
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;
69
98
}
70
99
71
100
@font-face {