.gitignore | 3 + deno.jsonc | 10 + framework/assets.ts | 99 +++ framework/bundle.ts | 85 +++ framework/css.ts | 87 +++ framework/fs.ts | 10 + framework/hot.ts | 240 +++++++ framework/incremental.ts | 265 ++++++++ framework/meta/index.ts | 13 + framework/meta/merge.ts | 154 +++++ framework/meta/nextjs/constants.ts | 15 + framework/meta/nextjs/default-metadata.ts | 50 ++ framework/meta/nextjs/generate/alternate.tsx | 72 +++ framework/meta/nextjs/generate/basic.tsx | 171 +++++ framework/meta/nextjs/generate/icons.tsx | 62 ++ framework/meta/nextjs/generate/meta.tsx | 124 ++++ framework/meta/nextjs/generate/opengraph.tsx | 316 ++++++++++ framework/meta/nextjs/generate/utils.ts | 20 + framework/meta/nextjs/get-metadata-route.ts | 67 ++ framework/meta/nextjs/is-metadata-route.ts | 136 ++++ framework/meta/nextjs/metadata.tsx | 58 ++ framework/meta/nextjs/resolve-metadata.ts | 453 ++++++++++++++ framework/meta/nextjs/resolvers/resolve-basics.ts | 259 ++++++++ framework/meta/nextjs/resolvers/resolve-icons.ts | 34 + framework/meta/nextjs/resolvers/resolve-opengraph.ts | 147 +++++ framework/meta/nextjs/resolvers/resolve-title.ts | 39 ++ framework/meta/nextjs/resolvers/resolve-url.ts | 38 ++ framework/meta/nextjs/types/alternative-urls-types.ts | 450 ++++++++++++++ framework/meta/nextjs/types/extra-types.ts | 104 ++++ framework/meta/nextjs/types/manifest-types.ts | 86 +++ framework/meta/nextjs/types/metadata-interface.ts | 566 +++++++++++++++++ framework/meta/nextjs/types/metadata-types.ts | 155 +++++ framework/meta/nextjs/types/opengraph-types.ts | 267 ++++++++ framework/meta/nextjs/types/resolvers.ts | 17 + framework/meta/nextjs/types/twitter-types.ts | 94 +++ framework/meta/readme.md | 5 + framework/meta/render.ts | 565 +++++++++++++++++ framework/meta/types.ts | 57 ++ framework/meta/utils.ts | 13 + framework/mime.ts | 30 + framework/mime.txt | 8 + framework/queue.ts | 206 ++++++ framework/sitegen-lib.ts | 49 ++ framework/sitegen.tsx | 11 + framework/sqlite.ts | 101 +++ framework/typecheck.ts | 0 package-lock.json | 81 +++ package.json | 25 + repl.js | 11 + run.js | 38 ++ src/components/Video.tsx | 0 src/components/video.client.ts | 29 + src/file-viewer/backend.tsx | 29 + src/file-viewer/cache.ts | 36 ++ src/file-viewer/cert.pem | 91 +++ src/file-viewer/cotyledon.tsx | 291 +++++++++ src/file-viewer/extension-stats.ts | 40 ++ src/file-viewer/highlight-grammar/astro.plist | 44 ++ src/file-viewer/highlight-grammar/css.plist | 53 ++ src/file-viewer/highlight-grammar/diff.plist | 56 ++ src/file-viewer/highlight-grammar/dosbatch.plist | 33 + src/file-viewer/highlight-grammar/json.plist | 11 + src/file-viewer/highlight-grammar/lua.plist | 61 ++ src/file-viewer/highlight-grammar/mdx.plist | 17 + src/file-viewer/highlight-grammar/php.plist | 0 src/file-viewer/highlight-grammar/powershell.plist | 676 ++++++++++++++++++++ src/file-viewer/highlight-grammar/python.plist | 33 + src/file-viewer/highlight-grammar/shell.plist | 52 ++ src/file-viewer/highlight-grammar/toml.plist | 28 + src/file-viewer/highlight-grammar/ts.plist | 28 + src/file-viewer/highlight-grammar/tsx.plist | 23 + src/file-viewer/highlight-grammar/xml.plist | 10 + src/file-viewer/highlight-grammar/yaml.plist | 25 + src/file-viewer/highlight-grammar/zig.plist | 17 + src/file-viewer/highlight.ts | 200 ++++++ src/file-viewer/mime.json | 463 ++++++++++++++ src/file-viewer/models/BlobAsset.ts | 55 ++ src/file-viewer/models/FilePermissions.ts | 0 src/file-viewer/models/MediaFile.ts | 51 ++ src/file-viewer/pages.off/file.cotyledon_enterance.tsx | 27 + src/file-viewer/pages.off/file.cotyledon_speedbump.tsx | 43 ++ src/file-viewer/redirects.ts | 284 +++++++++ src/file-viewer/scan.ts | 1008 ++++++++++++++++++++++++++++++ src/file-viewer/scripts/canvas_2017.client.ts | 233 +++++++ src/file-viewer/scripts/canvas_2018.client.ts | 431 +++++++++++++ src/file-viewer/scripts/canvas_2019.client.ts | 109 ++++ src/file-viewer/scripts/canvas_2020.client.ts | 197 ++++++ src/file-viewer/scripts/canvas_2021.client.ts | 783 +++++++++++++++++++++++ src/file-viewer/scripts/canvas_2022.client.ts | 160 +++++ src/file-viewer/scripts/canvas_2023.client.ts | 197 ++++++ src/file-viewer/scripts/canvas_2024.client.ts | 251 ++++++++ src/file-viewer/scripts/canvas_cotyledon.client.ts | 197 ++++++ src/file-viewer/server/.gitignore | 98 +++ src/file-viewer/server/CHANGES.md | 4 + src/file-viewer/server/CLAUDE.md | 12 + src/file-viewer/server/Cargo.lock | 61 ++ src/file-viewer/server/Cargo.toml | 69 ++ src/file-viewer/server/DOCKER.md | 23 + src/file-viewer/server/Dockerfile | 40 ++ src/file-viewer/server/README.md | 10 + src/file-viewer/server/config.docker.toml | 5 + src/file-viewer/server/config.example.toml | 34 + src/file-viewer/server/config.test.toml | 22 + src/file-viewer/server/docker-compose.yml | 10 + src/file-viewer/server/docker-compose.yml.bak | 298 +++++++++ src/file-viewer/server/generate_certs.sh | 323 ++++++++++ src/file-viewer/server/src/cache.rs | 6 + src/file-viewer/server/src/config.rs | 16 + src/file-viewer/server/src/database.rs | 8 + src/file-viewer/server/src/main.rs | 20 + src/file-viewer/server/src/routes.rs | 6 + src/file-viewer/server/src/routes_test.rs | 84 +++ src/file-viewer/server/src/server.rs | 89 +++ src/file-viewer/server/tests/end_to_end.rs | 101 +++ src/file-viewer/server/tests/manual_test.cjs | 53 ++ src/file-viewer/server/tests/setup_test_env.sh | 138 ++++ src/file-viewer/share.ts | 17 + src/file-viewer/static/captcha/image/0.jpeg | 44 ++ src/file-viewer/static/captcha/image/1.jpeg | 47 ++ src/file-viewer/static/captcha/image/10.jpeg | 14 + src/file-viewer/static/captcha/image/11.jpeg | 73 +++ src/file-viewer/static/captcha/image/12.jpeg | 4 + src/file-viewer/static/captcha/image/13.jpeg | 23 + src/file-viewer/static/captcha/image/14.jpeg | 16 + src/file-viewer/static/captcha/image/15.jpeg | 24 + src/file-viewer/static/captcha/image/16.jpeg | 86 +++ src/file-viewer/static/captcha/image/17.jpeg | 49 ++ src/file-viewer/static/captcha/image/2.jpeg | 39 ++ src/file-viewer/static/captcha/image/3.jpeg | 162 +++++ src/file-viewer/static/captcha/image/4.jpeg | 26 + src/file-viewer/static/captcha/image/5.jpeg | 2 + src/file-viewer/static/captcha/image/6.jpeg | 229 +++++++ src/file-viewer/static/captcha/image/7.jpeg | 13 + src/file-viewer/static/captcha/image/8.jpeg | 37 ++ src/file-viewer/static/captcha/image/9.jpeg | 23 + src/file-viewer/test-tree.ts | 4 + src/file-viewer/text-formatting.ts | 1073 ++++++++++++++++++++++++++++++++ src/file-viewer/views/canvas.client.ts | 30 + src/file-viewer/views/canvas.marko | 13 + src/file-viewer/views/file-viewer.client.ts | 25 + src/file-viewer/views/file-viewer.css | 33 + src/file-viewer/views/file-viewer.tsx | 1007 ++++++++++++++++++++++++++++++ src/global.css | 120 ++++ src/pages/admin/index.mdx | 9 + src/pages/admin/login.fail.marko | 9 + src/pages/admin/login.marko | 8 + src/pages/index.css | 26 + src/pages/index.marko | 46 ++ src/pages/license.mdx | 31 + src/pages/subscribe.client.ts | Bin 0 -> 2662 bytes src/pages/subscribe.css | 8 + src/pages/subscribe.marko | Bin 0 -> 1156 bytes src/q+a/artifacts.ts | Bin 0 -> 2789 bytes src/q+a/backend.ts | 242 +++++++ src/q+a/clover-markdown.tsx | 250 ++++++++ src/q+a/components/Question.marko | 37 ++ src/q+a/components/clickable-links.client.ts | 126 ++++ src/q+a/edit-frontend.css | 39 ++ src/q+a/edit-frontend.tsx | 8 + src/q+a/format.ts | Bin 0 -> 935 bytes src/q+a/header.client.ts | 4 + src/q+a/layout.tsx | 30 + src/q+a/models/PendingQuestion.ts | 72 +++ src/q+a/models/Question.ts | 118 ++++ src/q+a/pages/admin.q+a.marko | 23 + src/q+a/pages/q+a.404.marko | 9 + src/q+a/pages/q+a.marko | 35 ++ src/q+a/question-image.tsx | Bin 0 -> 3018 bytes src/q+a/questions.css | 257 ++++++++ src/q+a/simple-markdown.ts | 867 ++++++++++++++++++++++++++ src/q+a/views/backend-edit.tsx | Bin 0 -> 2000 bytes src/q+a/views/backend-inbox.client.ts | Bin 0 -> 1925 bytes src/q+a/views/backend-inbox.marko | 40 ++ src/q+a/views/fail.marko | 29 + src/q+a/views/permalink.tsx | Bin 0 -> 1881 bytes src/q+a/views/success.marko | 30 + src/q+a/views/things-random.client.ts | 5 + src/q+a/views/things-random.marko | 10 + src/sections.ts | 19 + src/static/robots.txt | 59 ++ src/static/rss.xml | 115 ++++ src/static/wurtzhome.html | 30 + tsconfig.json | 35 ++ 183 files changed, 19727 insertions(+)