mushroom tcg on atproto

repository

- updating favicon
- setting the groundwork for auth. i intend to actually get it working
today
- updating dependencies so i can finally try out atcute

Changed files
+197 -162
frontend
.svelte-kit
generated
server
src
lib
components
utils
routes
static
lexicons
records
net.skyshrooms
+104 -124
frontend/.svelte-kit/ambient.d.ts
··· 26 26 * ``` 27 27 */ 28 28 declare module '$env/static/private' { 29 - export const NVM_INC: string; 30 - export const NIX_PROFILES: string; 31 - export const TERM_PROGRAM: string; 32 - export const NODE: string; 33 - export const _P9K_TTY: string; 34 - export const NVM_CD_FLAGS: string; 35 - export const __ETC_PROFILE_NIX_SOURCED: string; 36 - export const TERM: string; 37 29 export const SHELL: string; 38 - export const TMPDIR: string; 39 - export const HOMEBREW_REPOSITORY: string; 40 - export const CONDA_SHLVL: string; 30 + export const LSCOLORS: string; 31 + export const WINDOWID: string; 32 + export const NVM_RC_VERSION: string; 33 + export const COLORTERM: string; 34 + export const XDG_CONFIG_DIRS: string; 35 + export const LESS: string; 36 + export const XPC_FLAGS: string; 41 37 export const TERM_PROGRAM_VERSION: string; 42 - export const CONDA_PROMPT_MODIFIER: string; 43 - export const WINDOWID: string; 38 + export const _P9K_TTY: string; 39 + export const NODE: string; 40 + export const __CFBundleIdentifier: string; 41 + export const SSH_AUTH_SOCK: string; 42 + export const P9K_TTY: string; 43 + export const OPENAI_API_KEY: string; 44 44 export const npm_config_local_prefix: string; 45 + export const HOMEBREW_PREFIX: string; 46 + export const EDITOR: string; 47 + export const PWD: string; 48 + export const NIX_PROFILES: string; 49 + export const CLAUDE_KEY: string; 50 + export const LOGNAME: string; 51 + export const NIX_PATH: string; 52 + export const BUN_WHICH_IGNORE_CWD: string; 53 + export const __NIX_DARWIN_SET_ENVIRONMENT_DONE: string; 54 + export const _: string; 55 + export const COMMAND_MODE: string; 56 + export const HOME: string; 57 + export const LANG: string; 58 + export const LS_COLORS: string; 59 + export const npm_package_version: string; 60 + export const NIX_SSL_CERT_FILE: string; 61 + export const TMPDIR: string; 62 + export const INIT_CWD: string; 63 + export const NIX_USER_PROFILE_DIR: string; 64 + export const INFOPATH: string; 65 + export const NVM_DIR: string; 66 + export const TERM: string; 67 + export const npm_package_name: string; 45 68 export const ZSH: string; 46 69 export const USER: string; 47 - export const NVM_DIR: string; 48 - export const PGPORT: string; 49 - export const LS_COLORS: string; 50 - export const COMMAND_MODE: string; 51 - export const CONDA_EXE: string; 52 - export const SSH_AUTH_SOCK: string; 53 - export const PGUSER: string; 54 - export const __CF_USER_TEXT_ENCODING: string; 55 - export const PYTORCH_ENABLE_MPS_FALLBACK: string; 70 + export const HOMEBREW_CELLAR: string; 71 + export const SHLVL: string; 72 + export const NVM_CD_FLAGS: string; 73 + export const PAGER: string; 74 + export const HOMEBREW_REPOSITORY: string; 75 + export const _P9K_SSH_TTY: string; 76 + export const XPC_SERVICE_NAME: string; 77 + export const npm_config_user_agent: string; 78 + export const TERMINFO_DIRS: string; 56 79 export const npm_execpath: string; 57 - export const PGPASSWORD: string; 58 - export const PGDATABASE: string; 59 - export const PAGER: string; 60 - export const _CE_CONDA: string; 61 - export const LSCOLORS: string; 62 - export const PATH: string; 63 80 export const npm_package_json: string; 64 - export const _: string; 65 - export const __CFBundleIdentifier: string; 66 - export const CONDA_PREFIX: string; 67 - export const npm_command: string; 68 - export const PWD: string; 69 - export const npm_lifecycle_event: string; 81 + export const BUN_INSTALL: string; 70 82 export const P9K_SSH: string; 71 - export const EDITOR: string; 72 - export const npm_package_name: string; 73 - export const P9K_TTY: string; 74 - export const LANG: string; 75 - export const PGHOST: string; 76 - export const XPC_FLAGS: string; 77 - export const NIX_SSL_CERT_FILE: string; 78 - export const npm_package_version: string; 79 - export const _CE_M: string; 80 - export const XPC_SERVICE_NAME: string; 81 - export const SHLVL: string; 82 - export const HOME: string; 83 - export const HOMEBREW_PREFIX: string; 84 - export const LOGNAME: string; 85 - export const LESS: string; 86 - export const CONDA_PYTHON_EXE: string; 87 - export const npm_lifecycle_script: string; 83 + export const XDG_DATA_DIRS: string; 84 + export const PATH: string; 88 85 export const ALACRITTY_WINDOW_ID: string; 89 - export const XDG_DATA_DIRS: string; 86 + export const ENVMAN_LOAD: string; 90 87 export const ZED_TERM: string; 91 - export const NVM_BIN: string; 92 - export const CONDA_DEFAULT_ENV: string; 93 - export const BUN_INSTALL: string; 94 - export const npm_config_user_agent: string; 95 - export const INFOPATH: string; 96 - export const HOMEBREW_CELLAR: string; 97 - export const _P9K_SSH_TTY: string; 98 - export const PGSSLMODE: string; 99 88 export const npm_node_execpath: string; 100 - export const COLORTERM: string; 101 - export const NODE_ENV: string; 89 + export const OLDPWD: string; 90 + export const __CF_USER_TEXT_ENCODING: string; 91 + export const TERM_PROGRAM: string; 102 92 } 103 93 104 94 /** ··· 130 120 */ 131 121 declare module '$env/dynamic/private' { 132 122 export const env: { 133 - NVM_INC: string; 134 - NIX_PROFILES: string; 135 - TERM_PROGRAM: string; 136 - NODE: string; 137 - _P9K_TTY: string; 138 - NVM_CD_FLAGS: string; 139 - __ETC_PROFILE_NIX_SOURCED: string; 140 - TERM: string; 141 123 SHELL: string; 142 - TMPDIR: string; 143 - HOMEBREW_REPOSITORY: string; 144 - CONDA_SHLVL: string; 124 + LSCOLORS: string; 125 + WINDOWID: string; 126 + NVM_RC_VERSION: string; 127 + COLORTERM: string; 128 + XDG_CONFIG_DIRS: string; 129 + LESS: string; 130 + XPC_FLAGS: string; 145 131 TERM_PROGRAM_VERSION: string; 146 - CONDA_PROMPT_MODIFIER: string; 147 - WINDOWID: string; 132 + _P9K_TTY: string; 133 + NODE: string; 134 + __CFBundleIdentifier: string; 135 + SSH_AUTH_SOCK: string; 136 + P9K_TTY: string; 137 + OPENAI_API_KEY: string; 148 138 npm_config_local_prefix: string; 139 + HOMEBREW_PREFIX: string; 140 + EDITOR: string; 141 + PWD: string; 142 + NIX_PROFILES: string; 143 + CLAUDE_KEY: string; 144 + LOGNAME: string; 145 + NIX_PATH: string; 146 + BUN_WHICH_IGNORE_CWD: string; 147 + __NIX_DARWIN_SET_ENVIRONMENT_DONE: string; 148 + _: string; 149 + COMMAND_MODE: string; 150 + HOME: string; 151 + LANG: string; 152 + LS_COLORS: string; 153 + npm_package_version: string; 154 + NIX_SSL_CERT_FILE: string; 155 + TMPDIR: string; 156 + INIT_CWD: string; 157 + NIX_USER_PROFILE_DIR: string; 158 + INFOPATH: string; 159 + NVM_DIR: string; 160 + TERM: string; 161 + npm_package_name: string; 149 162 ZSH: string; 150 163 USER: string; 151 - NVM_DIR: string; 152 - PGPORT: string; 153 - LS_COLORS: string; 154 - COMMAND_MODE: string; 155 - CONDA_EXE: string; 156 - SSH_AUTH_SOCK: string; 157 - PGUSER: string; 158 - __CF_USER_TEXT_ENCODING: string; 159 - PYTORCH_ENABLE_MPS_FALLBACK: string; 164 + HOMEBREW_CELLAR: string; 165 + SHLVL: string; 166 + NVM_CD_FLAGS: string; 167 + PAGER: string; 168 + HOMEBREW_REPOSITORY: string; 169 + _P9K_SSH_TTY: string; 170 + XPC_SERVICE_NAME: string; 171 + npm_config_user_agent: string; 172 + TERMINFO_DIRS: string; 160 173 npm_execpath: string; 161 - PGPASSWORD: string; 162 - PGDATABASE: string; 163 - PAGER: string; 164 - _CE_CONDA: string; 165 - LSCOLORS: string; 166 - PATH: string; 167 174 npm_package_json: string; 168 - _: string; 169 - __CFBundleIdentifier: string; 170 - CONDA_PREFIX: string; 171 - npm_command: string; 172 - PWD: string; 173 - npm_lifecycle_event: string; 175 + BUN_INSTALL: string; 174 176 P9K_SSH: string; 175 - EDITOR: string; 176 - npm_package_name: string; 177 - P9K_TTY: string; 178 - LANG: string; 179 - PGHOST: string; 180 - XPC_FLAGS: string; 181 - NIX_SSL_CERT_FILE: string; 182 - npm_package_version: string; 183 - _CE_M: string; 184 - XPC_SERVICE_NAME: string; 185 - SHLVL: string; 186 - HOME: string; 187 - HOMEBREW_PREFIX: string; 188 - LOGNAME: string; 189 - LESS: string; 190 - CONDA_PYTHON_EXE: string; 191 - npm_lifecycle_script: string; 177 + XDG_DATA_DIRS: string; 178 + PATH: string; 192 179 ALACRITTY_WINDOW_ID: string; 193 - XDG_DATA_DIRS: string; 180 + ENVMAN_LOAD: string; 194 181 ZED_TERM: string; 195 - NVM_BIN: string; 196 - CONDA_DEFAULT_ENV: string; 197 - BUN_INSTALL: string; 198 - npm_config_user_agent: string; 199 - INFOPATH: string; 200 - HOMEBREW_CELLAR: string; 201 - _P9K_SSH_TTY: string; 202 - PGSSLMODE: string; 203 182 npm_node_execpath: string; 204 - COLORTERM: string; 205 - NODE_ENV: string; 183 + OLDPWD: string; 184 + __CF_USER_TEXT_ENCODING: string; 185 + TERM_PROGRAM: string; 206 186 [key: `PUBLIC_${string}`]: undefined; 207 187 [key: `${string}`]: string | undefined; 208 188 }
+1 -1
frontend/.svelte-kit/generated/server/internal.js
··· 21 21 app: ({ head, body, assets, nonce, env }) => "<!doctype html>\n<html lang=\"en\">\n\t<head>\n\t\t<meta charset=\"utf-8\" />\n\t\t<link rel=\"icon\" href=\"" + assets + "/favicon.png\" />\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n\t\t" + head + "\n\t</head>\n\t<body data-sveltekit-preload-data=\"hover\">\n\t\t<div style=\"display: contents\">" + body + "</div>\n\t</body>\n</html>\n", 22 22 error: ({ status, message }) => "<!doctype html>\n<html lang=\"en\">\n\t<head>\n\t\t<meta charset=\"utf-8\" />\n\t\t<title>" + message + "</title>\n\n\t\t<style>\n\t\t\tbody {\n\t\t\t\t--bg: white;\n\t\t\t\t--fg: #222;\n\t\t\t\t--divider: #ccc;\n\t\t\t\tbackground: var(--bg);\n\t\t\t\tcolor: var(--fg);\n\t\t\t\tfont-family:\n\t\t\t\t\tsystem-ui,\n\t\t\t\t\t-apple-system,\n\t\t\t\t\tBlinkMacSystemFont,\n\t\t\t\t\t'Segoe UI',\n\t\t\t\t\tRoboto,\n\t\t\t\t\tOxygen,\n\t\t\t\t\tUbuntu,\n\t\t\t\t\tCantarell,\n\t\t\t\t\t'Open Sans',\n\t\t\t\t\t'Helvetica Neue',\n\t\t\t\t\tsans-serif;\n\t\t\t\tdisplay: flex;\n\t\t\t\talign-items: center;\n\t\t\t\tjustify-content: center;\n\t\t\t\theight: 100vh;\n\t\t\t\tmargin: 0;\n\t\t\t}\n\n\t\t\t.error {\n\t\t\t\tdisplay: flex;\n\t\t\t\talign-items: center;\n\t\t\t\tmax-width: 32rem;\n\t\t\t\tmargin: 0 1rem;\n\t\t\t}\n\n\t\t\t.status {\n\t\t\t\tfont-weight: 200;\n\t\t\t\tfont-size: 3rem;\n\t\t\t\tline-height: 1;\n\t\t\t\tposition: relative;\n\t\t\t\ttop: -0.05rem;\n\t\t\t}\n\n\t\t\t.message {\n\t\t\t\tborder-left: 1px solid var(--divider);\n\t\t\t\tpadding: 0 0 0 1rem;\n\t\t\t\tmargin: 0 0 0 1rem;\n\t\t\t\tmin-height: 2.5rem;\n\t\t\t\tdisplay: flex;\n\t\t\t\talign-items: center;\n\t\t\t}\n\n\t\t\t.message h1 {\n\t\t\t\tfont-weight: 400;\n\t\t\t\tfont-size: 1em;\n\t\t\t\tmargin: 0;\n\t\t\t}\n\n\t\t\t@media (prefers-color-scheme: dark) {\n\t\t\t\tbody {\n\t\t\t\t\t--bg: #222;\n\t\t\t\t\t--fg: #ddd;\n\t\t\t\t\t--divider: #666;\n\t\t\t\t}\n\t\t\t}\n\t\t</style>\n\t</head>\n\t<body>\n\t\t<div class=\"error\">\n\t\t\t<span class=\"status\">" + status + "</span>\n\t\t\t<div class=\"message\">\n\t\t\t\t<h1>" + message + "</h1>\n\t\t\t</div>\n\t\t</div>\n\t</body>\n</html>\n" 23 23 }, 24 - version_hash: "r96mk0" 24 + version_hash: "13za3h2" 25 25 }; 26 26 27 27 export async function get_hooks() {
+17 -20
frontend/bun.lock
··· 3 3 "workspaces": { 4 4 "": { 5 5 "name": "skyshrooms", 6 + "dependencies": { 7 + "@atcute/atproto": "^3.0.1", 8 + "@atcute/bluesky": "^3.0.1", 9 + "@atcute/client": "^4.0.1", 10 + }, 6 11 "devDependencies": { 7 12 "@chromatic-com/storybook": "^3", 8 13 "@eslint/compat": "^1.2.5", ··· 45 50 46 51 "@ampproject/remapping": ["@ampproject/remapping@2.3.0", "", { "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw=="], 47 52 53 + "@atcute/atproto": ["@atcute/atproto@3.0.1", "", { "dependencies": { "@atcute/lexicons": "^1.0.1" } }, "sha512-c5HW/zIHkW254Lw5vghH46sODUelCfvkIubtCt8UAB9jRhVPYMcNhemehhfVIjq8ytpPn1oLz/4RzTyti1Wx9Q=="], 54 + 55 + "@atcute/bluesky": ["@atcute/bluesky@3.0.1", "", { "dependencies": { "@atcute/atproto": "^3.0.1", "@atcute/lexicons": "^1.0.1" } }, "sha512-c3Eks9a8GmR2gydg5njQibHoWp6Td7KUaqJ9iZ2oSlOCOTf4dD7nwVBr9m0vTz2iNwYgMt/QJiUWER1gZQGorw=="], 56 + 57 + "@atcute/client": ["@atcute/client@4.0.1", "", { "dependencies": { "@atcute/identity": "^1.0.1", "@atcute/lexicons": "^1.0.1" } }, "sha512-Wgu0H92bSYxW63ZdTtr1pKwIg1e7+hoqLv4zpPsr6Ei9b8aM3u8PxGczgNBH+w0P4RZsvONbFDElhNvPWV/j8A=="], 58 + 59 + "@atcute/identity": ["@atcute/identity@1.0.1", "", { "dependencies": { "@atcute/lexicons": "^1.0.1", "@badrap/valita": "^0.4.4" } }, "sha512-hZHDr0BfMlsNDSwifDZHw2NK5igiHdz0VgB78q+v43RJ3BqJBYLD4g2wsax4qUtEoPfenmU42NbPC8PMGChBig=="], 60 + 61 + "@atcute/lexicons": ["@atcute/lexicons@1.0.1", "", {}, "sha512-3GaVEhXXyFvPF9aCPjB6jbLSJ1k+Q/mJGVvuQ6vTxrlL8lsFdnAv6vSCS7dKTLblAp8L619vhVXOmwni++G3gQ=="], 62 + 48 63 "@babel/code-frame": ["@babel/code-frame@7.27.1", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.27.1", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg=="], 49 64 50 65 "@babel/helper-string-parser": ["@babel/helper-string-parser@7.27.1", "", {}, "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA=="], ··· 56 71 "@babel/runtime": ["@babel/runtime@7.27.1", "", {}, "sha512-1x3D2xEk2fRo3PAhwQwu5UubzgiVWSXTBfWpVd2Mx2AzRqJuDJCsgaDVZ7HB5iGzDW1Hl1sWN2mFyKjmR9uAog=="], 57 72 58 73 "@babel/types": ["@babel/types@7.27.1", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.27.1" } }, "sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q=="], 74 + 75 + "@badrap/valita": ["@badrap/valita@0.4.4", "", {}, "sha512-GEhUCk9c4XbNxi+0YZHZsV4fYNd6HejfWuN4Ti4c02DauX+LyX5WY1Y3WfyZ8Pxxl0zqhs+MLtW98cMh86vv6g=="], 59 76 60 77 "@bcoe/v8-coverage": ["@bcoe/v8-coverage@1.0.2", "", {}, "sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA=="], 61 78 ··· 1141 1158 1142 1159 "@vitest/browser/@testing-library/user-event": ["@testing-library/user-event@14.6.1", "", { "peerDependencies": { "@testing-library/dom": ">=7.21.4" } }, "sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw=="], 1143 1160 1144 - "@vitest/coverage-v8/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], 1145 - 1146 1161 "@vitest/expect/@vitest/utils": ["@vitest/utils@2.0.5", "", { "dependencies": { "@vitest/pretty-format": "2.0.5", "estree-walker": "^3.0.3", "loupe": "^3.1.1", "tinyrainbow": "^1.2.0" } }, "sha512-d8HKbqIcya+GR67mkZbrzhS5kKhtp8dQLcmRZLGTscGVg7yImT82cIrhtn2L8+VujWcy6KZweApgNmPsTAO/UQ=="], 1147 1162 1148 1163 "@vitest/expect/tinyrainbow": ["tinyrainbow@1.2.0", "", {}, "sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ=="], 1149 1164 1150 1165 "@vitest/mocker/@vitest/spy": ["@vitest/spy@3.1.2", "", { "dependencies": { "tinyspy": "^3.0.2" } }, "sha512-OEc5fSXMws6sHVe4kOFyDSj/+4MSwst0ib4un0DlcYgQvRuYQ0+M2HyqGaauUMnjq87tmUaMNDxKQx7wNfVqPA=="], 1151 - 1152 - "@vitest/pretty-format/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], 1153 - 1154 - "@vitest/runner/@vitest/utils": ["@vitest/utils@3.1.2", "", { "dependencies": { "@vitest/pretty-format": "3.1.2", "loupe": "^3.1.3", "tinyrainbow": "^2.0.0" } }, "sha512-5GGd0ytZ7BH3H6JTj9Kw7Prn1Nbg0wZVrIvou+UWxm54d+WoXXgAgjFJ8wn3LdagWLFSEfpPeyYrByZaGEZHLg=="], 1155 - 1156 - "@vitest/snapshot/@vitest/pretty-format": ["@vitest/pretty-format@3.1.2", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-R0xAiHuWeDjTSB3kQ3OQpT8Rx3yhdOAIm/JM4axXxnG7Q/fS8XUwggv/A4xzbQA+drYRjzkMnpYnOGAc4oeq8w=="], 1157 - 1158 - "@vitest/utils/@vitest/pretty-format": ["@vitest/pretty-format@3.1.2", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-R0xAiHuWeDjTSB3kQ3OQpT8Rx3yhdOAIm/JM4axXxnG7Q/fS8XUwggv/A4xzbQA+drYRjzkMnpYnOGAc4oeq8w=="], 1159 1166 1160 1167 "dom-serializer/domhandler": ["domhandler@4.3.1", "", { "dependencies": { "domelementtype": "^2.2.0" } }, "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ=="], 1161 1168 ··· 1207 1214 1208 1215 "vitest/@vitest/spy": ["@vitest/spy@3.1.2", "", { "dependencies": { "tinyspy": "^3.0.2" } }, "sha512-OEc5fSXMws6sHVe4kOFyDSj/+4MSwst0ib4un0DlcYgQvRuYQ0+M2HyqGaauUMnjq87tmUaMNDxKQx7wNfVqPA=="], 1209 1216 1210 - "vitest/@vitest/utils": ["@vitest/utils@3.1.2", "", { "dependencies": { "@vitest/pretty-format": "3.1.2", "loupe": "^3.1.3", "tinyrainbow": "^2.0.0" } }, "sha512-5GGd0ytZ7BH3H6JTj9Kw7Prn1Nbg0wZVrIvou+UWxm54d+WoXXgAgjFJ8wn3LdagWLFSEfpPeyYrByZaGEZHLg=="], 1211 - 1212 - "vitest/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], 1213 - 1214 1217 "wrap-ansi/ansi-styles": ["ansi-styles@6.2.1", "", {}, "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug=="], 1215 1218 1216 1219 "wrap-ansi-cjs/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], ··· 1224 1227 "@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@2.0.1", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA=="], 1225 1228 1226 1229 "@vitest/expect/@vitest/utils/@vitest/pretty-format": ["@vitest/pretty-format@2.0.5", "", { "dependencies": { "tinyrainbow": "^1.2.0" } }, "sha512-h8k+1oWHfwTkyTkb9egzwNMfJAEx4veaPSnMeKbVSjp4euqGSbQlm5+6VHwTr7u4FJslVVsUG5nopCaAYdOmSQ=="], 1227 - 1228 - "@vitest/runner/@vitest/utils/@vitest/pretty-format": ["@vitest/pretty-format@3.1.2", "", { "dependencies": { "tinyrainbow": "^2.0.0" } }, "sha512-R0xAiHuWeDjTSB3kQ3OQpT8Rx3yhdOAIm/JM4axXxnG7Q/fS8XUwggv/A4xzbQA+drYRjzkMnpYnOGAc4oeq8w=="], 1229 - 1230 - "@vitest/runner/@vitest/utils/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], 1231 - 1232 - "@vitest/snapshot/@vitest/pretty-format/tinyrainbow": ["tinyrainbow@2.0.0", "", {}, "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw=="], 1233 1230 1234 1231 "enquirer/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="], 1235 1232
+5
frontend/package.json
··· 49 49 "typescript-eslint": "^8.20.0", 50 50 "vite": "^6.2.6", 51 51 "vitest": "^3.1.2" 52 + }, 53 + "dependencies": { 54 + "@atcute/atproto": "^3.0.1", 55 + "@atcute/bluesky": "^3.0.1", 56 + "@atcute/client": "^4.0.1" 52 57 } 53 58 }
+27 -17
frontend/src/lib/components/ui/ProfileModal.svelte
··· 1 1 <script> 2 2 import demoProfile from '$lib/testData/demoProfile.json'; 3 3 4 - let open = $state(false); 4 + let signedIn = $state(false); 5 + let open = $state(true); 6 + 7 + function initiateSignIn() { 8 + signedIn = true; 9 + } 5 10 </script> 6 11 7 12 <div class="menu bonkus flex flex-col justify-center self-end bg-amber-100 p-2 bg-blend-soft-light"> 8 13 <div class="header flex flex-row items-center"> 9 - {#if open} 10 - <div class="flex flex-col px-4"> 11 - <a href="/profile/{demoProfile.id}"> 12 - <p class="pr-4 text-2xl">{demoProfile.username}</p> 13 - </a> 14 - <div class="stats"> 15 - <p class="text-lg">Collected {demoProfile.collection} cards</p> 16 - <p class="text-lg">Won {demoProfile.victories} battles</p> 17 - <p class="text-lg">Lost {demoProfile.losses} battles</p> 14 + {#if signedIn} 15 + {#if open} 16 + <div class="flex flex-col px-4"> 17 + <a href="/profile/{demoProfile.id}"> 18 + <p class="pr-4 text-2xl">{demoProfile.username}</p> 19 + </a> 20 + <div class="stats"> 21 + <p class="text-lg">Collected {demoProfile.collection} cards</p> 22 + <p class="text-lg">Won {demoProfile.victories} battles</p> 23 + <p class="text-lg">Lost {demoProfile.losses} battles</p> 24 + </div> 18 25 </div> 19 - </div> 26 + {/if} 27 + 28 + <img 29 + onclick={() => (open = !open)} 30 + class="m-1 size-12 lg:size-24 lg:rounded-xl" 31 + src={demoProfile.avatar} 32 + alt="" 33 + /> 34 + {:else} 35 + <a onclick={initiateSignIn} class="text-2xl font-bold">SIGN IN</a> 20 36 {/if} 21 - <img 22 - onclick={() => (open = !open)} 23 - class="m-1 size-12 lg:size-24 lg:rounded-xl" 24 - src={demoProfile.avatar} 25 - alt="" 26 - /> 27 37 </div> 28 38 </div> 29 39
+5
frontend/src/lib/utils/atdemo.ts
··· 1 + import { Client, CredentialManager, ok, simpleFetchHandler } from '@atcute/client'; 2 + import type {} from '@atcute/bluesky'; 3 + 4 + export const handler = simpleFetchHandler({ service: 'https://public.api.bsky.app' }); 5 + export const rpc = new Client({ handler });
+21
frontend/src/routes/+layout.svelte
··· 2 2 import ProfileModal from '$lib/components/ui/ProfileModal.svelte'; 3 3 import '../app.css'; 4 4 5 + import { ok } from '@atcute/client'; 6 + 7 + import { handler, rpc } from '$lib/utils/atdemo'; 8 + 9 + async function testClient() { 10 + const data = await ok( 11 + rpc.get('app.bsky.actor.getProfile', { 12 + params: { 13 + actor: 'bsky.app' 14 + } 15 + }) 16 + ); 17 + 18 + console.log(data.displayName); 19 + } 20 + 21 + testClient(); 5 22 let { children } = $props(); 6 23 </script> 24 + 25 + <svelte:head> 26 + <link rel="icon" href="/favicon.png" /> 27 + </svelte:head> 7 28 8 29 <div 9 30 class="flex min-h-screen
frontend/static/favicon.png

This is a binary file and will not be displayed.

+17
lexicons/records/net.skyshrooms/profile.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "net.skyshrooms.profile", 4 + "defs": { 5 + "main": { 6 + "type": "record", 7 + "description": "Collector profile for a trading card game", 8 + "record": { 9 + "type": "object", 10 + "required": ["displayName", "profileImage", "collection", "createdAt"], 11 + "properties": { 12 + 13 + } 14 + } 15 + } 16 + } 17 + }