A website for the ATmosphereConf

fix: Fix installation and show better profile

authored by daffl.xyz and committed by bmann.ca aee60dd7 b712e2ba

+145 -309
package-lock.json
··· 9 9 "version": "0.0.1", 10 10 "dependencies": { 11 11 "@astrojs/node": "^9.5.0", 12 - "@astrojs/tailwind": "^6.0.2", 13 12 "@atproto/api": "^0.17.4", 14 13 "@atproto/oauth-client-node": "^0.3.10", 15 14 "@tailwindcss/vite": "^4.1.16", ··· 84 83 }, 85 84 "engines": { 86 85 "node": "18.20.8 || ^20.3.0 || >=22.0.0" 87 - } 88 - }, 89 - "node_modules/@astrojs/tailwind": { 90 - "version": "6.0.2", 91 - "resolved": "https://registry.npmjs.org/@astrojs/tailwind/-/tailwind-6.0.2.tgz", 92 - "integrity": "sha512-j3mhLNeugZq6A8dMNXVarUa8K6X9AW+QHU9u3lKNrPLMHhOQ0S7VeWhHwEeJFpEK1BTKEUY1U78VQv2gN6hNGg==", 93 - "license": "MIT", 94 - "dependencies": { 95 - "autoprefixer": "^10.4.21", 96 - "postcss": "^8.5.3", 97 - "postcss-load-config": "^4.0.2" 98 - }, 99 - "peerDependencies": { 100 - "astro": "^3.0.0 || ^4.0.0 || ^5.0.0", 101 - "tailwindcss": "^3.0.24" 102 86 } 103 87 }, 104 88 "node_modules/@astrojs/telemetry": { ··· 216 200 } 217 201 }, 218 202 "node_modules/@atproto/api": { 219 - "version": "0.17.4", 220 - "resolved": "https://registry.npmjs.org/@atproto/api/-/api-0.17.4.tgz", 221 - "integrity": "sha512-MRa0WdxyDiGF7fVKd/2ldvonsHQjsaLUOGw/PHrZ7J01lqlw/jaXLS25FNNYzjPGmGpnIyDCIg4Uucd/OblI9w==", 203 + "version": "0.17.6", 204 + "resolved": "https://registry.npmjs.org/@atproto/api/-/api-0.17.6.tgz", 205 + "integrity": "sha512-0iYCD8+LOsHjHjwJcqGPfJN/h4b+IpU3GjOV0TSLk0XdCaxpHBKNu3wgCJVst4DhVjXcgsr2qQoRZ3Jja2LupA==", 222 206 "license": "MIT", 223 207 "dependencies": { 224 208 "@atproto/common-web": "^0.4.3", ··· 1642 1626 ] 1643 1627 }, 1644 1628 "node_modules/@shikijs/core": { 1645 - "version": "3.13.0", 1646 - "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-3.13.0.tgz", 1647 - "integrity": "sha512-3P8rGsg2Eh2qIHekwuQjzWhKI4jV97PhvYjYUzGqjvJfqdQPz+nMlfWahU24GZAyW1FxFI1sYjyhfh5CoLmIUA==", 1629 + "version": "3.14.0", 1630 + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-3.14.0.tgz", 1631 + "integrity": "sha512-qRSeuP5vlYHCNUIrpEBQFO7vSkR7jn7Kv+5X3FO/zBKVDGQbcnlScD3XhkrHi/R8Ltz0kEjvFR9Szp/XMRbFMw==", 1648 1632 "license": "MIT", 1649 1633 "dependencies": { 1650 - "@shikijs/types": "3.13.0", 1634 + "@shikijs/types": "3.14.0", 1651 1635 "@shikijs/vscode-textmate": "^10.0.2", 1652 1636 "@types/hast": "^3.0.4", 1653 1637 "hast-util-to-html": "^9.0.5" 1654 1638 } 1655 1639 }, 1656 1640 "node_modules/@shikijs/engine-javascript": { 1657 - "version": "3.13.0", 1658 - "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-3.13.0.tgz", 1659 - "integrity": "sha512-Ty7xv32XCp8u0eQt8rItpMs6rU9Ki6LJ1dQOW3V/56PKDcpvfHPnYFbsx5FFUP2Yim34m/UkazidamMNVR4vKg==", 1641 + "version": "3.14.0", 1642 + "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-3.14.0.tgz", 1643 + "integrity": "sha512-3v1kAXI2TsWQuwv86cREH/+FK9Pjw3dorVEykzQDhwrZj0lwsHYlfyARaKmn6vr5Gasf8aeVpb8JkzeWspxOLQ==", 1660 1644 "license": "MIT", 1661 1645 "dependencies": { 1662 - "@shikijs/types": "3.13.0", 1646 + "@shikijs/types": "3.14.0", 1663 1647 "@shikijs/vscode-textmate": "^10.0.2", 1664 1648 "oniguruma-to-es": "^4.3.3" 1665 1649 } 1666 1650 }, 1667 1651 "node_modules/@shikijs/engine-oniguruma": { 1668 - "version": "3.13.0", 1669 - "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.13.0.tgz", 1670 - "integrity": "sha512-O42rBGr4UDSlhT2ZFMxqM7QzIU+IcpoTMzb3W7AlziI1ZF7R8eS2M0yt5Ry35nnnTX/LTLXFPUjRFCIW+Operg==", 1652 + "version": "3.14.0", 1653 + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.14.0.tgz", 1654 + "integrity": "sha512-TNcYTYMbJyy+ZjzWtt0bG5y4YyMIWC2nyePz+CFMWqm+HnZZyy9SWMgo8Z6KBJVIZnx8XUXS8U2afO6Y0g1Oug==", 1671 1655 "license": "MIT", 1672 1656 "dependencies": { 1673 - "@shikijs/types": "3.13.0", 1657 + "@shikijs/types": "3.14.0", 1674 1658 "@shikijs/vscode-textmate": "^10.0.2" 1675 1659 } 1676 1660 }, 1677 1661 "node_modules/@shikijs/langs": { 1678 - "version": "3.13.0", 1679 - "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.13.0.tgz", 1680 - "integrity": "sha512-672c3WAETDYHwrRP0yLy3W1QYB89Hbpj+pO4KhxK6FzIrDI2FoEXNiNCut6BQmEApYLfuYfpgOZaqbY+E9b8wQ==", 1662 + "version": "3.14.0", 1663 + "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.14.0.tgz", 1664 + "integrity": "sha512-DIB2EQY7yPX1/ZH7lMcwrK5pl+ZkP/xoSpUzg9YC8R+evRCCiSQ7yyrvEyBsMnfZq4eBzLzBlugMyTAf13+pzg==", 1681 1665 "license": "MIT", 1682 1666 "dependencies": { 1683 - "@shikijs/types": "3.13.0" 1667 + "@shikijs/types": "3.14.0" 1684 1668 } 1685 1669 }, 1686 1670 "node_modules/@shikijs/themes": { 1687 - "version": "3.13.0", 1688 - "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.13.0.tgz", 1689 - "integrity": "sha512-Vxw1Nm1/Od8jyA7QuAenaV78BG2nSr3/gCGdBkLpfLscddCkzkL36Q5b67SrLLfvAJTOUzW39x4FHVCFriPVgg==", 1671 + "version": "3.14.0", 1672 + "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.14.0.tgz", 1673 + "integrity": "sha512-fAo/OnfWckNmv4uBoUu6dSlkcBc+SA1xzj5oUSaz5z3KqHtEbUypg/9xxgJARtM6+7RVm0Q6Xnty41xA1ma1IA==", 1690 1674 "license": "MIT", 1691 1675 "dependencies": { 1692 - "@shikijs/types": "3.13.0" 1676 + "@shikijs/types": "3.14.0" 1693 1677 } 1694 1678 }, 1695 1679 "node_modules/@shikijs/types": { 1696 - "version": "3.13.0", 1697 - "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.13.0.tgz", 1698 - "integrity": "sha512-oM9P+NCFri/mmQ8LoFGVfVyemm5Hi27330zuOBp0annwJdKH1kOLndw3zCtAVDehPLg9fKqoEx3Ht/wNZxolfw==", 1680 + "version": "3.14.0", 1681 + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.14.0.tgz", 1682 + "integrity": "sha512-bQGgC6vrY8U/9ObG1Z/vTro+uclbjjD/uG58RvfxKZVD5p9Yc1ka3tVyEFy7BNJLzxuWyHH5NWynP9zZZS59eQ==", 1699 1683 "license": "MIT", 1700 1684 "dependencies": { 1701 1685 "@shikijs/vscode-textmate": "^10.0.2", ··· 2032 2016 } 2033 2017 }, 2034 2018 "node_modules/@types/node": { 2035 - "version": "24.9.1", 2036 - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.9.1.tgz", 2037 - "integrity": "sha512-QoiaXANRkSXK6p0Duvt56W208du4P9Uye9hWLWgGMDTEoKPhuenzNcC4vGUmrNkiOKTlIrBoyNQYNpSwfEZXSg==", 2019 + "version": "24.9.2", 2020 + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.9.2.tgz", 2021 + "integrity": "sha512-uWN8YqxXxqFMX2RqGOrumsKeti4LlmIMIyV0lgut4jx7KQBcBiW6vkDtIBvHnHIquwNfJhk8v2OtmO8zXWHfPA==", 2038 2022 "license": "MIT", 2039 2023 "dependencies": { 2040 2024 "undici-types": "~7.16.0" ··· 2189 2173 } 2190 2174 }, 2191 2175 "node_modules/astro": { 2192 - "version": "5.15.1", 2193 - "resolved": "https://registry.npmjs.org/astro/-/astro-5.15.1.tgz", 2194 - "integrity": "sha512-VM679M1qxOjGo6q3vKYDNDddkALGgMopG93IwbEXd3Buc2xVLuuPj4HNziNugSbPQx5S6UReMp5uzw10EJN81A==", 2176 + "version": "5.15.2", 2177 + "resolved": "https://registry.npmjs.org/astro/-/astro-5.15.2.tgz", 2178 + "integrity": "sha512-xQQ+PiYJ7WpUJrHJpAb52TQAUCFmSR8lAtQr3tFfSIZoTQiEMFx3HITJ01t3eDUpHjja8J6JcYqgAhr9xygKQg==", 2195 2179 "license": "MIT", 2196 2180 "dependencies": { 2197 2181 "@astrojs/compiler": "^2.12.2", ··· 2248 2232 "unist-util-visit": "^5.0.0", 2249 2233 "unstorage": "^1.17.0", 2250 2234 "vfile": "^6.0.3", 2251 - "vite": "^6.3.6", 2235 + "vite": "^6.4.1", 2252 2236 "vitefu": "^1.1.1", 2253 2237 "xxhash-wasm": "^1.1.0", 2254 2238 "yargs-parser": "^21.1.1", ··· 2273 2257 "sharp": "^0.34.0" 2274 2258 } 2275 2259 }, 2276 - "node_modules/autoprefixer": { 2277 - "version": "10.4.21", 2278 - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz", 2279 - "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==", 2280 - "funding": [ 2281 - { 2282 - "type": "opencollective", 2283 - "url": "https://opencollective.com/postcss/" 2284 - }, 2285 - { 2286 - "type": "tidelift", 2287 - "url": "https://tidelift.com/funding/github/npm/autoprefixer" 2288 - }, 2289 - { 2290 - "type": "github", 2291 - "url": "https://github.com/sponsors/ai" 2292 - } 2293 - ], 2260 + "node_modules/astro/node_modules/vite": { 2261 + "version": "6.4.1", 2262 + "resolved": "https://registry.npmjs.org/vite/-/vite-6.4.1.tgz", 2263 + "integrity": "sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==", 2294 2264 "license": "MIT", 2295 2265 "dependencies": { 2296 - "browserslist": "^4.24.4", 2297 - "caniuse-lite": "^1.0.30001702", 2298 - "fraction.js": "^4.3.7", 2299 - "normalize-range": "^0.1.2", 2300 - "picocolors": "^1.1.1", 2301 - "postcss-value-parser": "^4.2.0" 2266 + "esbuild": "^0.25.0", 2267 + "fdir": "^6.4.4", 2268 + "picomatch": "^4.0.2", 2269 + "postcss": "^8.5.3", 2270 + "rollup": "^4.34.9", 2271 + "tinyglobby": "^0.2.13" 2302 2272 }, 2303 2273 "bin": { 2304 - "autoprefixer": "bin/autoprefixer" 2274 + "vite": "bin/vite.js" 2305 2275 }, 2306 2276 "engines": { 2307 - "node": "^10 || ^12 || >=14" 2277 + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" 2278 + }, 2279 + "funding": { 2280 + "url": "https://github.com/vitejs/vite?sponsor=1" 2281 + }, 2282 + "optionalDependencies": { 2283 + "fsevents": "~2.3.3" 2308 2284 }, 2309 2285 "peerDependencies": { 2310 - "postcss": "^8.1.0" 2286 + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", 2287 + "jiti": ">=1.21.0", 2288 + "less": "*", 2289 + "lightningcss": "^1.21.0", 2290 + "sass": "*", 2291 + "sass-embedded": "*", 2292 + "stylus": "*", 2293 + "sugarss": "*", 2294 + "terser": "^5.16.0", 2295 + "tsx": "^4.8.1", 2296 + "yaml": "^2.4.2" 2297 + }, 2298 + "peerDependenciesMeta": { 2299 + "@types/node": { 2300 + "optional": true 2301 + }, 2302 + "jiti": { 2303 + "optional": true 2304 + }, 2305 + "less": { 2306 + "optional": true 2307 + }, 2308 + "lightningcss": { 2309 + "optional": true 2310 + }, 2311 + "sass": { 2312 + "optional": true 2313 + }, 2314 + "sass-embedded": { 2315 + "optional": true 2316 + }, 2317 + "stylus": { 2318 + "optional": true 2319 + }, 2320 + "sugarss": { 2321 + "optional": true 2322 + }, 2323 + "terser": { 2324 + "optional": true 2325 + }, 2326 + "tsx": { 2327 + "optional": true 2328 + }, 2329 + "yaml": { 2330 + "optional": true 2331 + } 2311 2332 } 2312 2333 }, 2313 2334 "node_modules/await-lock": { ··· 2361 2382 ], 2362 2383 "license": "MIT" 2363 2384 }, 2364 - "node_modules/baseline-browser-mapping": { 2365 - "version": "2.8.20", 2366 - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.20.tgz", 2367 - "integrity": "sha512-JMWsdF+O8Orq3EMukbUN1QfbLK9mX2CkUmQBcW2T0s8OmdAUL5LLM/6wFwSrqXzlXB13yhyK9gTKS1rIizOduQ==", 2368 - "license": "Apache-2.0", 2369 - "bin": { 2370 - "baseline-browser-mapping": "dist/cli.js" 2371 - } 2372 - }, 2373 2385 "node_modules/boxen": { 2374 2386 "version": "8.0.1", 2375 2387 "resolved": "https://registry.npmjs.org/boxen/-/boxen-8.0.1.tgz", ··· 2401 2413 "base64-js": "^1.1.2" 2402 2414 } 2403 2415 }, 2404 - "node_modules/browserslist": { 2405 - "version": "4.27.0", 2406 - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.27.0.tgz", 2407 - "integrity": "sha512-AXVQwdhot1eqLihwasPElhX2tAZiBjWdJ9i/Zcj2S6QYIjkx62OKSfnobkriB81C3l4w0rVy3Nt4jaTBltYEpw==", 2408 - "funding": [ 2409 - { 2410 - "type": "opencollective", 2411 - "url": "https://opencollective.com/browserslist" 2412 - }, 2413 - { 2414 - "type": "tidelift", 2415 - "url": "https://tidelift.com/funding/github/npm/browserslist" 2416 - }, 2417 - { 2418 - "type": "github", 2419 - "url": "https://github.com/sponsors/ai" 2420 - } 2421 - ], 2422 - "license": "MIT", 2423 - "dependencies": { 2424 - "baseline-browser-mapping": "^2.8.19", 2425 - "caniuse-lite": "^1.0.30001751", 2426 - "electron-to-chromium": "^1.5.238", 2427 - "node-releases": "^2.0.26", 2428 - "update-browserslist-db": "^1.1.4" 2429 - }, 2430 - "bin": { 2431 - "browserslist": "cli.js" 2432 - }, 2433 - "engines": { 2434 - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" 2435 - } 2436 - }, 2437 2416 "node_modules/camelcase": { 2438 2417 "version": "8.0.0", 2439 2418 "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-8.0.0.tgz", ··· 2446 2425 "url": "https://github.com/sponsors/sindresorhus" 2447 2426 } 2448 2427 }, 2449 - "node_modules/caniuse-lite": { 2450 - "version": "1.0.30001751", 2451 - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001751.tgz", 2452 - "integrity": "sha512-A0QJhug0Ly64Ii3eIqHu5X51ebln3k4yTUkY1j8drqpWHVreg/VLijN48cZ1bYPiqOQuqpkIKnzr/Ul8V+p6Cw==", 2453 - "funding": [ 2454 - { 2455 - "type": "opencollective", 2456 - "url": "https://opencollective.com/browserslist" 2457 - }, 2458 - { 2459 - "type": "tidelift", 2460 - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" 2461 - }, 2462 - { 2463 - "type": "github", 2464 - "url": "https://github.com/sponsors/ai" 2465 - } 2466 - ], 2467 - "license": "CC-BY-4.0" 2468 - }, 2469 2428 "node_modules/ccount": { 2470 2429 "version": "2.0.1", 2471 2430 "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", ··· 2655 2614 } 2656 2615 }, 2657 2616 "node_modules/daisyui": { 2658 - "version": "5.3.9", 2659 - "resolved": "https://registry.npmjs.org/daisyui/-/daisyui-5.3.9.tgz", 2660 - "integrity": "sha512-741x1pGGSGHcrBYtdE7iKbqW1OoiijYdAZ8oJPZR9MhSKLcMBlHjKfN3YlM2/K7t5jd7O0sg4SqkVNPylalRFw==", 2617 + "version": "5.3.10", 2618 + "resolved": "https://registry.npmjs.org/daisyui/-/daisyui-5.3.10.tgz", 2619 + "integrity": "sha512-vmjyPmm0hvFhA95KB6uiGmWakziB2pBv6CUcs5Ka/3iMBMn9S+C3SZYx9G9l2JrgTZ1EFn61F/HrPcwaUm2kLQ==", 2661 2620 "license": "MIT", 2662 2621 "funding": { 2663 2622 "url": "https://github.com/saadeghi/daisyui?sponsor=1" ··· 2811 2770 "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", 2812 2771 "license": "MIT" 2813 2772 }, 2814 - "node_modules/electron-to-chromium": { 2815 - "version": "1.5.240", 2816 - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.240.tgz", 2817 - "integrity": "sha512-OBwbZjWgrCOH+g6uJsA2/7Twpas2OlepS9uvByJjR2datRDuKGYeD+nP8lBBks2qnB7bGJNHDUx7c/YLaT3QMQ==", 2818 - "license": "ISC" 2819 - }, 2820 2773 "node_modules/emoji-regex": { 2821 2774 "version": "10.6.0", 2822 2775 "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", ··· 2902 2855 "@esbuild/win32-arm64": "0.25.11", 2903 2856 "@esbuild/win32-ia32": "0.25.11", 2904 2857 "@esbuild/win32-x64": "0.25.11" 2905 - } 2906 - }, 2907 - "node_modules/escalade": { 2908 - "version": "3.2.0", 2909 - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", 2910 - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", 2911 - "license": "MIT", 2912 - "engines": { 2913 - "node": ">=6" 2914 2858 } 2915 2859 }, 2916 2860 "node_modules/escape-html": { ··· 3020 2964 "unicode-trie": "^2.0.0" 3021 2965 } 3022 2966 }, 3023 - "node_modules/fraction.js": { 3024 - "version": "4.3.7", 3025 - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", 3026 - "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", 3027 - "license": "MIT", 3028 - "engines": { 3029 - "node": "*" 3030 - }, 3031 - "funding": { 3032 - "type": "patreon", 3033 - "url": "https://github.com/sponsors/rawify" 3034 - } 3035 - }, 3036 2967 "node_modules/fresh": { 3037 2968 "version": "2.0.0", 3038 2969 "resolved": "https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz", ··· 3732 3663 "funding": { 3733 3664 "type": "opencollective", 3734 3665 "url": "https://opencollective.com/parcel" 3735 - } 3736 - }, 3737 - "node_modules/lilconfig": { 3738 - "version": "3.1.3", 3739 - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", 3740 - "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", 3741 - "license": "MIT", 3742 - "engines": { 3743 - "node": ">=14" 3744 - }, 3745 - "funding": { 3746 - "url": "https://github.com/sponsors/antonk52" 3747 3666 } 3748 3667 }, 3749 3668 "node_modules/longest-streak": { ··· 4680 4599 "integrity": "sha512-jN8dK25fsfnMrVsEhluUTPkBFY+6ybu7jSB1n+ri/vOGjJxU8J9CZhpSGkHXSkFjtUhbmoncG/YG9ta5Ludqog==", 4681 4600 "license": "MIT" 4682 4601 }, 4683 - "node_modules/node-releases": { 4684 - "version": "2.0.26", 4685 - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.26.tgz", 4686 - "integrity": "sha512-S2M9YimhSjBSvYnlr5/+umAnPHE++ODwt5e2Ij6FoX45HA/s4vHdkDx1eax2pAPeAOqu4s9b7ppahsyEFdVqQA==", 4687 - "license": "MIT" 4688 - }, 4689 4602 "node_modules/normalize-path": { 4690 4603 "version": "3.0.0", 4691 4604 "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 4692 4605 "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 4693 - "license": "MIT", 4694 - "engines": { 4695 - "node": ">=0.10.0" 4696 - } 4697 - }, 4698 - "node_modules/normalize-range": { 4699 - "version": "0.1.2", 4700 - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", 4701 - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", 4702 4606 "license": "MIT", 4703 4607 "engines": { 4704 4608 "node": ">=0.10.0" 4705 4609 } 4706 4610 }, 4707 4611 "node_modules/ofetch": { 4708 - "version": "1.4.1", 4709 - "resolved": "https://registry.npmjs.org/ofetch/-/ofetch-1.4.1.tgz", 4710 - "integrity": "sha512-QZj2DfGplQAr2oj9KzceK9Hwz6Whxazmn85yYeVuS3u9XTMOGMRx0kO95MQ+vLsj/S/NwBDMMLU5hpxvI6Tklw==", 4612 + "version": "1.5.0", 4613 + "resolved": "https://registry.npmjs.org/ofetch/-/ofetch-1.5.0.tgz", 4614 + "integrity": "sha512-A7llJ7eZyziA5xq9//3ZurA8OhFqtS99K5/V1sLBJ5j137CM/OAjlbA/TEJXBuOWwOfLqih+oH5U3ran4za1FQ==", 4711 4615 "license": "MIT", 4712 4616 "dependencies": { 4713 - "destr": "^2.0.3", 4714 - "node-fetch-native": "^1.6.4", 4715 - "ufo": "^1.5.4" 4617 + "destr": "^2.0.5", 4618 + "node-fetch-native": "^1.6.7", 4619 + "ufo": "^1.6.1" 4716 4620 } 4717 4621 }, 4718 4622 "node_modules/ohash": { ··· 4881 4785 "node": "^10 || ^12 || >=14" 4882 4786 } 4883 4787 }, 4884 - "node_modules/postcss-load-config": { 4885 - "version": "4.0.2", 4886 - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", 4887 - "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", 4888 - "funding": [ 4889 - { 4890 - "type": "opencollective", 4891 - "url": "https://opencollective.com/postcss/" 4892 - }, 4893 - { 4894 - "type": "github", 4895 - "url": "https://github.com/sponsors/ai" 4896 - } 4897 - ], 4898 - "license": "MIT", 4899 - "dependencies": { 4900 - "lilconfig": "^3.0.0", 4901 - "yaml": "^2.3.4" 4902 - }, 4903 - "engines": { 4904 - "node": ">= 14" 4905 - }, 4906 - "peerDependencies": { 4907 - "postcss": ">=8.0.9", 4908 - "ts-node": ">=9.0.0" 4909 - }, 4910 - "peerDependenciesMeta": { 4911 - "postcss": { 4912 - "optional": true 4913 - }, 4914 - "ts-node": { 4915 - "optional": true 4916 - } 4917 - } 4918 - }, 4919 - "node_modules/postcss-value-parser": { 4920 - "version": "4.2.0", 4921 - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", 4922 - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", 4923 - "license": "MIT" 4924 - }, 4925 4788 "node_modules/prismjs": { 4926 4789 "version": "1.30.0", 4927 4790 "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz", ··· 5346 5209 } 5347 5210 }, 5348 5211 "node_modules/shiki": { 5349 - "version": "3.13.0", 5350 - "resolved": "https://registry.npmjs.org/shiki/-/shiki-3.13.0.tgz", 5351 - "integrity": "sha512-aZW4l8Og16CokuCLf8CF8kq+KK2yOygapU5m3+hoGw0Mdosc6fPitjM+ujYarppj5ZIKGyPDPP1vqmQhr+5/0g==", 5212 + "version": "3.14.0", 5213 + "resolved": "https://registry.npmjs.org/shiki/-/shiki-3.14.0.tgz", 5214 + "integrity": "sha512-J0yvpLI7LSig3Z3acIuDLouV5UCKQqu8qOArwMx+/yPVC3WRMgrP67beaG8F+j4xfEWE0eVC4GeBCIXeOPra1g==", 5352 5215 "license": "MIT", 5353 5216 "dependencies": { 5354 - "@shikijs/core": "3.13.0", 5355 - "@shikijs/engine-javascript": "3.13.0", 5356 - "@shikijs/engine-oniguruma": "3.13.0", 5357 - "@shikijs/langs": "3.13.0", 5358 - "@shikijs/themes": "3.13.0", 5359 - "@shikijs/types": "3.13.0", 5217 + "@shikijs/core": "3.14.0", 5218 + "@shikijs/engine-javascript": "3.14.0", 5219 + "@shikijs/engine-oniguruma": "3.14.0", 5220 + "@shikijs/langs": "3.14.0", 5221 + "@shikijs/themes": "3.14.0", 5222 + "@shikijs/types": "3.14.0", 5360 5223 "@shikijs/vscode-textmate": "^10.0.2", 5361 5224 "@types/hast": "^3.0.4" 5362 5225 } ··· 5576 5439 "url": "https://github.com/sponsors/sindresorhus" 5577 5440 } 5578 5441 }, 5442 + "node_modules/typescript": { 5443 + "version": "5.9.3", 5444 + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", 5445 + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", 5446 + "license": "Apache-2.0", 5447 + "peer": true, 5448 + "bin": { 5449 + "tsc": "bin/tsc", 5450 + "tsserver": "bin/tsserver" 5451 + }, 5452 + "engines": { 5453 + "node": ">=14.17" 5454 + } 5455 + }, 5579 5456 "node_modules/ufo": { 5580 5457 "version": "1.6.1", 5581 5458 "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.1.tgz", ··· 5887 5764 } 5888 5765 } 5889 5766 }, 5890 - "node_modules/update-browserslist-db": { 5891 - "version": "1.1.4", 5892 - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz", 5893 - "integrity": "sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==", 5894 - "funding": [ 5895 - { 5896 - "type": "opencollective", 5897 - "url": "https://opencollective.com/browserslist" 5898 - }, 5899 - { 5900 - "type": "tidelift", 5901 - "url": "https://tidelift.com/funding/github/npm/browserslist" 5902 - }, 5903 - { 5904 - "type": "github", 5905 - "url": "https://github.com/sponsors/ai" 5906 - } 5907 - ], 5908 - "license": "MIT", 5909 - "dependencies": { 5910 - "escalade": "^3.2.0", 5911 - "picocolors": "^1.1.1" 5912 - }, 5913 - "bin": { 5914 - "update-browserslist-db": "cli.js" 5915 - }, 5916 - "peerDependencies": { 5917 - "browserslist": ">= 4.21.0" 5918 - } 5919 - }, 5920 5767 "node_modules/vfile": { 5921 5768 "version": "6.0.3", 5922 5769 "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", ··· 5960 5807 } 5961 5808 }, 5962 5809 "node_modules/vite": { 5963 - "version": "6.4.1", 5964 - "resolved": "https://registry.npmjs.org/vite/-/vite-6.4.1.tgz", 5965 - "integrity": "sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==", 5810 + "version": "7.1.12", 5811 + "resolved": "https://registry.npmjs.org/vite/-/vite-7.1.12.tgz", 5812 + "integrity": "sha512-ZWyE8YXEXqJrrSLvYgrRP7p62OziLW7xI5HYGWFzOvupfAlrLvURSzv/FyGyy0eidogEM3ujU+kUG1zuHgb6Ug==", 5966 5813 "license": "MIT", 5814 + "peer": true, 5967 5815 "dependencies": { 5968 5816 "esbuild": "^0.25.0", 5969 - "fdir": "^6.4.4", 5970 - "picomatch": "^4.0.2", 5971 - "postcss": "^8.5.3", 5972 - "rollup": "^4.34.9", 5973 - "tinyglobby": "^0.2.13" 5817 + "fdir": "^6.5.0", 5818 + "picomatch": "^4.0.3", 5819 + "postcss": "^8.5.6", 5820 + "rollup": "^4.43.0", 5821 + "tinyglobby": "^0.2.15" 5974 5822 }, 5975 5823 "bin": { 5976 5824 "vite": "bin/vite.js" 5977 5825 }, 5978 5826 "engines": { 5979 - "node": "^18.0.0 || ^20.0.0 || >=22.0.0" 5827 + "node": "^20.19.0 || >=22.12.0" 5980 5828 }, 5981 5829 "funding": { 5982 5830 "url": "https://github.com/vitejs/vite?sponsor=1" ··· 5985 5833 "fsevents": "~2.3.3" 5986 5834 }, 5987 5835 "peerDependencies": { 5988 - "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", 5836 + "@types/node": "^20.19.0 || >=22.12.0", 5989 5837 "jiti": ">=1.21.0", 5990 - "less": "*", 5838 + "less": "^4.0.0", 5991 5839 "lightningcss": "^1.21.0", 5992 - "sass": "*", 5993 - "sass-embedded": "*", 5994 - "stylus": "*", 5995 - "sugarss": "*", 5840 + "sass": "^1.70.0", 5841 + "sass-embedded": "^1.70.0", 5842 + "stylus": ">=0.54.8", 5843 + "sugarss": "^5.0.0", 5996 5844 "terser": "^5.16.0", 5997 5845 "tsx": "^4.8.1", 5998 5846 "yaml": "^2.4.2" ··· 6108 5956 "resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-1.1.0.tgz", 6109 5957 "integrity": "sha512-147y/6YNh+tlp6nd/2pWq38i9h6mz/EuQ6njIrmW8D1BS5nCqs0P6DG+m6zTGnNz5I+uhZ0SHxBs9BsPrwcKDA==", 6110 5958 "license": "MIT" 6111 - }, 6112 - "node_modules/yaml": { 6113 - "version": "2.8.1", 6114 - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.1.tgz", 6115 - "integrity": "sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==", 6116 - "license": "ISC", 6117 - "bin": { 6118 - "yaml": "bin.mjs" 6119 - }, 6120 - "engines": { 6121 - "node": ">= 14.6" 6122 - } 6123 5959 }, 6124 5960 "node_modules/yargs-parser": { 6125 5961 "version": "21.1.1",
-1
package.json
··· 10 10 }, 11 11 "dependencies": { 12 12 "@astrojs/node": "^9.5.0", 13 - "@astrojs/tailwind": "^6.0.2", 14 13 "@atproto/api": "^0.17.4", 15 14 "@atproto/oauth-client-node": "^0.3.10", 16 15 "@tailwindcss/vite": "^4.1.16",
+35 -28
src/pages/index.astro
··· 1 1 --- 2 - import "../styles.css"; 3 - import { getSession } from "../lib/session"; 4 - import { getOAuthClient } from "../lib/context"; 5 - import { Agent } from "@atproto/api"; 2 + import '../styles.css' 3 + import { getSession } from '../lib/session' 4 + import { getOAuthClient } from '../lib/context' 5 + import { Agent } from '@atproto/api' 6 6 7 - const session = getSession(Astro.cookies); 8 - const oauthClient = getOAuthClient(Astro.cookies); 7 + const session = getSession(Astro.cookies) 8 + const oauthClient = getOAuthClient(Astro.cookies) 9 9 10 - let agent: Agent | null = null; 11 - let profile: any = null; 10 + let agent: Agent | null = null 11 + let profile: any = null 12 12 13 13 if (session.did) { 14 14 try { 15 - const oauthSession = await oauthClient.restore(session.did); 15 + const oauthSession = await oauthClient.restore(session.did) 16 16 if (oauthSession) { 17 - agent = new Agent(oauthSession); 17 + agent = new Agent(oauthSession) 18 18 19 19 try { 20 - const profileResponse = await agent.com.atproto.repo.getRecord({ 21 - repo: agent.assertDid, 22 - collection: "app.bsky.actor.profile", 23 - rkey: "self", 24 - }); 25 - profile = profileResponse.data; 20 + const profileResponse = await agent.app.bsky.actor.getProfile({ 21 + actor: agent.assertDid, 22 + }) 23 + profile = profileResponse.data 26 24 } catch (err) { 27 - console.warn("Failed to fetch profile:", err); 25 + console.warn('Failed to fetch profile:', err) 28 26 } 29 27 } 30 28 } catch (err) { 31 - console.warn("OAuth restore failed:", err); 32 - session.destroy(); 29 + console.warn('OAuth restore failed:', err) 30 + session.destroy() 33 31 } 34 32 } 35 33 36 - const displayName = profile?.value?.displayName || agent?.assertDid || "User"; 37 - const handle = agent?.assertDid || ""; 34 + const displayName = profile?.displayName || agent?.assertDid || 'User' 35 + const handle = profile?.handle || agent?.assertDid || '' 36 + const avatar = profile?.avatar 37 + const description = profile?.description 38 38 --- 39 39 40 40 <html lang="en" data-theme="dracula"> ··· 47 47 </head> 48 48 <body> 49 49 <div class="min-h-screen flex items-center justify-center"> 50 - <div class="card w-96 bg-base-100 shadow-xl"> 50 + <div class="card w-96 bg-base-200 shadow-xl p-8"> 51 51 <div class="card-body"> 52 52 { 53 53 agent ? ( 54 54 <> 55 55 <h2 class="card-title justify-center mb-4">Welcome!</h2> 56 56 <div class="space-y-4"> 57 - <div class="text-center"> 57 + <div class="flex flex-col items-center text-center"> 58 + {avatar && ( 59 + <div class="avatar mb-4"> 60 + <div class="w-24 rounded-full"> 61 + <img src={avatar} alt={displayName} /> 62 + </div> 63 + </div> 64 + )} 58 65 <p class="text-lg font-semibold">{displayName}</p> 59 66 <p class="text-sm opacity-70">{handle}</p> 67 + {description && ( 68 + <p class="text-sm mt-2 opacity-80">{description}</p> 69 + )} 60 70 </div> 61 71 <form method="POST" action="/api/logout" class="w-full"> 62 72 <button type="submit" class="btn btn-error w-full"> ··· 73 83 <input 74 84 type="text" 75 85 placeholder="Enter your handle (e.g. alice.bsky.social)" 76 - class="input input-bordered join-item" 86 + class="input input-bordered join-item w-full" 77 87 name="handle" 78 88 required 79 89 /> 80 - <button 81 - type="submit" 82 - class="btn btn-primary btn-wide join-item" 83 - > 90 + <button type="submit" class="btn btn-primary join-item w-full"> 84 91 Login 85 92 </button> 86 93 </div>
+2 -3
src/styles.css
··· 1 - @tailwind base; 2 - @tailwind components; 3 - @tailwind utilities; 1 + @import "tailwindcss"; 2 + 4 3 @plugin "daisyui" { 5 4 themes: 6 5 dracula --default,
-3
tailwind.config.mjs
··· 1 1 /** @type {import('tailwindcss').Config} */ 2 2 export default { 3 3 content: ["./src/**/*.{astro,html,js,jsx,md,mdx,svelte,ts,tsx,vue}"], 4 - daisyui: { 5 - themes: true, 6 - }, 7 4 };