diff --git a/Dockerfile b/Dockerfile index 0d3a351..1b5f8bf 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM node:18 AS builder +FROM node:24 AS builder WORKDIR /app diff --git a/package.json b/package.json index 8df638b..0ee3f73 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,8 @@ "dev": "astro dev", "build": "astro build", "preview": "astro preview", - "astro": "astro" + "astro": "astro", + "shell": "nix-shell" }, "dependencies": { "@astrojs/mdx": "^4.3.0", @@ -14,21 +15,20 @@ "@astrojs/preact": "^4.1.0", "@astrojs/rss": "^4.0.12", "@iarna/toml": "^2.2.5", - "@preact/signals": "^2.2.0", + "@preact/signals": "^2.2.1", "@tailwindcss/typography": "^0.5.16", "@tailwindcss/vite": "^4.1.11", - "@types/puppeteer": "^7.0.4", "astro": "^5.10.1", "astro-icon": "^1.1.5", "lucide-preact": "^0.525.0", "preact": "^10.26.9", - "puppeteer": "^24.11.0", + "puppeteer": "^24.11.1", "sharp": "^0.34.2", "tailwindcss": "^4.1.11" }, "devDependencies": { "@iconify-json/mdi": "^1.2.3", - "@iconify-json/simple-icons": "^1.2.40", + "@iconify-json/simple-icons": "^1.2.41", "daisyui": "^5.0.43" }, "pnpm": { @@ -38,4 +38,4 @@ "puppeteer" ] } -} +} \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e6ef81a..2966b86 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,13 +10,13 @@ importers: dependencies: '@astrojs/mdx': specifier: ^4.3.0 - version: 4.3.0(astro@5.10.1(@types/node@24.0.6)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.44.1)(typescript@5.8.3)) + version: 4.3.0(astro@5.10.1(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.44.1)(typescript@5.8.3)) '@astrojs/node': specifier: ^9.2.2 - version: 9.2.2(astro@5.10.1(@types/node@24.0.6)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.44.1)(typescript@5.8.3)) + version: 9.2.2(astro@5.10.1(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.44.1)(typescript@5.8.3)) '@astrojs/preact': specifier: ^4.1.0 - version: 4.1.0(@babel/core@7.27.7)(@types/node@24.0.6)(jiti@2.4.2)(lightningcss@1.30.1)(preact@10.26.9) + version: 4.1.0(@babel/core@7.27.7)(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1)(preact@10.26.9) '@astrojs/rss': specifier: ^4.0.12 version: 4.0.12 @@ -24,20 +24,17 @@ importers: specifier: ^2.2.5 version: 2.2.5 '@preact/signals': - specifier: ^2.2.0 - version: 2.2.0(preact@10.26.9) + specifier: ^2.2.1 + version: 2.2.1(preact@10.26.9) '@tailwindcss/typography': specifier: ^0.5.16 version: 0.5.16(tailwindcss@4.1.11) '@tailwindcss/vite': specifier: ^4.1.11 - version: 4.1.11(vite@6.3.5(@types/node@24.0.6)(jiti@2.4.2)(lightningcss@1.30.1)) - '@types/puppeteer': - specifier: ^7.0.4 - version: 7.0.4(typescript@5.8.3) + version: 4.1.11(vite@6.3.5(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1)) astro: specifier: ^5.10.1 - version: 5.10.1(@types/node@24.0.6)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.44.1)(typescript@5.8.3) + version: 5.10.1(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.44.1)(typescript@5.8.3) astro-icon: specifier: ^1.1.5 version: 1.1.5 @@ -48,8 +45,8 @@ importers: specifier: ^10.26.9 version: 10.26.9 puppeteer: - specifier: ^24.11.0 - version: 24.11.0(typescript@5.8.3) + specifier: ^24.11.1 + version: 24.11.1(typescript@5.8.3) sharp: specifier: ^0.34.2 version: 0.34.2 @@ -61,8 +58,8 @@ importers: specifier: ^1.2.3 version: 1.2.3 '@iconify-json/simple-icons': - specifier: ^1.2.40 - version: 1.2.40 + specifier: ^1.2.41 + version: 1.2.41 daisyui: specifier: ^5.0.43 version: 5.0.43 @@ -367,8 +364,8 @@ packages: '@iconify-json/mdi@1.2.3': resolution: {integrity: sha512-O3cLwbDOK7NNDf2ihaQOH5F9JglnulNDFV7WprU2dSoZu3h3cWH//h74uQAB87brHmvFVxIOkuBX2sZSzYhScg==} - '@iconify-json/simple-icons@1.2.40': - resolution: {integrity: sha512-sr2fbrS8rRhJNap41ucTStctxTcWQ3lcsHkY3loc4Yt1KNOne6D+l1JTOQCDj9f/VrUktVIEdaRQoYTvqfuSSw==} + '@iconify-json/simple-icons@1.2.41': + resolution: {integrity: sha512-4tt29cKzNsxvt6rjAOVhEgpZV0L8jleTDTMdtvIJjF14Afp9aH8peuwGYyX35l6idfFwuzbvjSVfVyVjJtfmYA==} '@iconify/tools@4.1.2': resolution: {integrity: sha512-q6NzLQYEN9zkDfcyBqD3vItHcZw97w/s++3H3TBxUORr57EfHxj6tOW6fyufDjMq+Vl56WXWaPx1csBPYlI5CA==} @@ -604,23 +601,18 @@ packages: resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} engines: {node: '>=18.0.0'} - '@jridgewell/gen-mapping@0.3.8': - resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} - engines: {node: '>=6.0.0'} + '@jridgewell/gen-mapping@0.3.11': + resolution: {integrity: sha512-C512c1ytBTio4MrpWKlJpyFHT6+qfFL8SZ58zBzJ1OOzUEjHeF1BtjY2fH7n4x/g2OV/KiiMLAivOp1DXmiMMw==} '@jridgewell/resolve-uri@3.1.2': resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} - '@jridgewell/set-array@1.2.1': - resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} - engines: {node: '>=6.0.0'} + '@jridgewell/sourcemap-codec@1.5.3': + resolution: {integrity: sha512-AiR5uKpFxP3PjO4R19kQGIMwxyRyPuXmKEEy301V1C0+1rVjS94EZQXf1QKZYN8Q0YM+estSPhmx5JwNftv6nw==} - '@jridgewell/sourcemap-codec@1.5.0': - resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} - - '@jridgewell/trace-mapping@0.3.25': - resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + '@jridgewell/trace-mapping@0.3.28': + resolution: {integrity: sha512-KNNHHwW3EIp4EDYOvYFGyIFfx36R2dNJYH4knnZlF8T5jdbD5Wx8xmSaQ2gP9URkJ04LGEtlcCtwArKcmFcwKw==} '@mdx-js/mdx@3.1.0': resolution: {integrity: sha512-/QxEhPAvGwbQmy1Px8F899L5Uc2KZ6JtXwlCgJmjSTBedwOZkByYcBG4GceIGPXRDsmfxhHazuS+hlOShRLeDw==} @@ -634,27 +626,27 @@ packages: '@babel/core': 7.x vite: 2.x || 3.x || 4.x || 5.x || 6.x || 7.x - '@preact/signals-core@1.10.0': - resolution: {integrity: sha512-qlKeXlfqtlC+sjxCPHt6Sk0/dXBrKZVcPlianqjNc/vW263YBFiP5mRrgKpHoO0q222Thm1TdYQWfCKpbbgvwA==} + '@preact/signals-core@1.11.0': + resolution: {integrity: sha512-jglbibeWHuFRzEWVFY/TT7wB1PppJxmcSfUHcK+2J9vBRtiooMfw6tAPttojNYrrpdGViqAYCbPpmWYlMm+eMQ==} - '@preact/signals@2.2.0': - resolution: {integrity: sha512-P3KPcEYyVk9Wiwfw68QQzRpPkt0H+zjfH3X4AaGCDlc86GuRBYFGiAxT1nC5F5qlsVIEmjNJ9yVYe7C91z3L+g==} + '@preact/signals@2.2.1': + resolution: {integrity: sha512-cX3mijdjHbbz3dBoJ6z687CGYEOp9ifj3uFnm4UKW+DxXKPMvE2y/VSdm0PXhXmHnr6F0iSnDJ+dLwmV7CYT5A==} peerDependencies: preact: '>= 10.25.0' - '@prefresh/babel-plugin@0.5.1': - resolution: {integrity: sha512-uG3jGEAysxWoyG3XkYfjYHgaySFrSsaEb4GagLzYaxlydbuREtaX+FTxuIidp241RaLl85XoHg9Ej6E4+V1pcg==} + '@prefresh/babel-plugin@0.5.2': + resolution: {integrity: sha512-AOl4HG6dAxWkJ5ndPHBgBa49oo/9bOiJuRDKHLSTyH+Fd9x00shTXpdiTj1W41l6oQIwUOAgJeHMn4QwIDpHkA==} - '@prefresh/core@1.5.3': - resolution: {integrity: sha512-nDzxj0tA1/M6APNAWqaxkZ+3sTdPHESa+gol4+Bw7rMc2btWdkLoNH7j9rGhUb8SThC0Vz0VoXtq+U+9azGLHg==} + '@prefresh/core@1.5.4': + resolution: {integrity: sha512-F7Sd/qnPX2QEkgiJr0hmImYjp6s85chlkR3Y9ncWVSMusN3UM9vMhQIdcYo/ugqxqo7cKH7Y7Oofrsimf7TWuQ==} peerDependencies: preact: ^10.0.0 - '@prefresh/utils@1.2.0': - resolution: {integrity: sha512-KtC/fZw+oqtwOLUFM9UtiitB0JsVX0zLKNyRTA332sqREqSALIIQQxdUCS1P3xR/jT1e2e8/5rwH6gdcMLEmsQ==} + '@prefresh/utils@1.2.1': + resolution: {integrity: sha512-vq/sIuN5nYfYzvyayXI4C2QkprfNaHUQ9ZX+3xLD8nL3rWyzpxOm1+K7RtMbhd+66QcaISViK7amjnheQ/4WZw==} - '@prefresh/vite@2.4.7': - resolution: {integrity: sha512-zmCEDWSFHl5A7PciXa/fe+OUjoGi4iiCQclpWfpIg7LjxwWrtlUT4DfxDBcQwHfTyipS/XDm8x7WYrkiTW0q+w==} + '@prefresh/vite@2.4.8': + resolution: {integrity: sha512-H7vlo9UbJInuRbZhRQrdgVqLP7qKjDoX7TgYWWwIVhEHeHO0hZ4zyicvwBrV1wX5A3EPOmArgRkUaN7cPI2VXQ==} peerDependencies: preact: ^10.4.0 vite: '>=2.0.0' @@ -930,12 +922,8 @@ packages: '@types/nlcst@2.0.3': resolution: {integrity: sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==} - '@types/node@24.0.6': - resolution: {integrity: sha512-ZOyn+gOs749xU7ovp+Ibj0g1o3dFRqsfPnT22C2t5JzcRvgsEDpGawPbCISGKLudJk9Y0wiu9sYd6kUh0pc9TA==} - - '@types/puppeteer@7.0.4': - resolution: {integrity: sha512-ja78vquZc8y+GM2al07GZqWDKQskQXygCDiu0e3uO0DMRKqE0MjrFBFmTulfPYzLB6WnL7Kl2tFPy0WXSpPomg==} - deprecated: This is a stub types definition. puppeteer provides its own type definitions, so you do not need this installed. + '@types/node@24.0.7': + resolution: {integrity: sha512-YIEUUr4yf8q8oQoXPpSlnvKNVKDQlPMWrmOcgzoduo7kvA2UF0/BwJ/eMKFTiTtkNL17I0M6Xe2tvwFU7be6iw==} '@types/tar@6.1.13': resolution: {integrity: sha512-IznnlmU5f4WcGTh2ltRu/Ijpmk8wiWXfF0VA4s+HPjHZgvFggk1YaIkbo5krX/zUCzWF8N/l4+W/LNxnvAJ8nw==} @@ -1237,8 +1225,8 @@ packages: crossws@0.3.5: resolution: {integrity: sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==} - css-select@5.1.0: - resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} + css-select@5.2.2: + resolution: {integrity: sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==} css-tree@2.2.1: resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==} @@ -1252,8 +1240,8 @@ packages: resolution: {integrity: sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} - css-what@6.1.0: - resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} + css-what@6.2.2: + resolution: {integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==} engines: {node: '>= 6'} cssesc@3.0.0: @@ -1357,8 +1345,8 @@ packages: ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - electron-to-chromium@1.5.177: - resolution: {integrity: sha512-7EH2G59nLsEMj97fpDuvVcYi6lwTcM1xuWw3PssD8xzboAW7zj7iB3COEEEATUfjLHrs5uKBLQT03V/8URx06g==} + electron-to-chromium@1.5.178: + resolution: {integrity: sha512-wObbz/ar3Bc6e4X5vf0iO8xTN8YAjN/tgiAOJLr7yjYFtP9wAjq8Mb5h0yn6kResir+VYx2DXBj9NNobs0ETSA==} emoji-regex@10.4.0: resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==} @@ -2265,8 +2253,8 @@ packages: pkg-types@1.3.1: resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} - pkg-types@2.1.1: - resolution: {integrity: sha512-eY0QFb6eSwc9+0d/5D2lFFUq+A3n3QNGSy/X2Nvp+6MfzGw2u6EbA7S80actgjY1lkvvI0pqB+a4hioMh443Ew==} + pkg-types@2.2.0: + resolution: {integrity: sha512-2SM/GZGAEkPp3KWORxQZns4M+WSeXbC2HEvmOIJe3Cmiv6ieAJvdVhDldtHqM5J1Y7MrR1XhkBT/rMlhh9FdqQ==} postcss-selector-parser@6.0.10: resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==} @@ -2312,12 +2300,12 @@ packages: pump@3.0.3: resolution: {integrity: sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==} - puppeteer-core@24.11.0: - resolution: {integrity: sha512-ncLty0wRjCX67UxzXemmD1mOxb6y1Xzrx1nym8SAQ6cYrcypOVf77CfcZru6P+EiMA9gNDeQNscowKSE9xvhMw==} + puppeteer-core@24.11.1: + resolution: {integrity: sha512-I0Gv3jWBRY9E3NTBElp7br7Gaid5RbFTxCRRMHym1kCf0ompO0Pel4REGsGDwMWkg3uwFzIH7t7qXs3T4DKRWA==} engines: {node: '>=18'} - puppeteer@24.11.0: - resolution: {integrity: sha512-7XFpexeYIMen/pfGiDjUpIV7BB9EuVQBtXeQ0cUOmVJTkAuQD3oPHVU7iYeA/mrIJyk79sfOmT20a6SEDwGTLQ==} + puppeteer@24.11.1: + resolution: {integrity: sha512-QbccB/LgxX4tSZRzr9KQ1Jajdvu3n35Dlf/Otjz0QfR+6mDoZdMWLcWF94uQoC3OJerCyYm5hlU2Ru4nBoId2A==} engines: {node: '>=18'} hasBin: true @@ -2464,8 +2452,8 @@ packages: resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} - smol-toml@1.3.4: - resolution: {integrity: sha512-UOPtVuYkzYGee0Bd2Szz8d2G3RfMfJ2t3qVdZUAozZyAk+a0Sxa+QKix0YCwjL/A1RR0ar44nCxaoN9FxdJGwA==} + smol-toml@1.4.0: + resolution: {integrity: sha512-IMxaDA/58wBvkvX77ykQ6e9r6fjs8xbxpz8bMCyVQ/fEFWbA5uJrnaVwDuhLrrANGdd7apRyTPDBvI893Bxu9g==} engines: {node: '>= 18'} socks-proxy-agent@8.0.5: @@ -2549,8 +2537,8 @@ packages: resolution: {integrity: sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==} engines: {node: '>=6'} - tar-fs@3.0.10: - resolution: {integrity: sha512-C1SwlQGNLe/jPNqapK8epDsXME7CAJR5RL3GcE6KWx1d9OUByzoHVcbu1VPI8tevg9H8Alae0AApHHFGzrD5zA==} + tar-fs@3.1.0: + resolution: {integrity: sha512-5Mty5y/sOF1YWj1J6GiBodjlDc05CUR8PKXrsnFAiSG0xA+GHeWLovaZPYUDXkH/1iKRf2+M5+OrRgzC7O9b7w==} tar-stream@3.1.7: resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==} @@ -2841,8 +2829,8 @@ packages: wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - ws@8.18.2: - resolution: {integrity: sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==} + ws@8.18.3: + resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -2914,8 +2902,8 @@ snapshots: '@ampproject/remapping@2.3.0': dependencies: - '@jridgewell/gen-mapping': 0.3.8 - '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/gen-mapping': 0.3.11 + '@jridgewell/trace-mapping': 0.3.28 '@antfu/install-pkg@1.1.0': dependencies: @@ -2945,7 +2933,7 @@ snapshots: remark-rehype: 11.1.2 remark-smartypants: 3.0.2 shiki: 3.7.0 - smol-toml: 1.3.4 + smol-toml: 1.4.0 unified: 11.0.5 unist-util-remove-position: 5.0.0 unist-util-visit: 5.0.0 @@ -2954,12 +2942,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@astrojs/mdx@4.3.0(astro@5.10.1(@types/node@24.0.6)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.44.1)(typescript@5.8.3))': + '@astrojs/mdx@4.3.0(astro@5.10.1(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.44.1)(typescript@5.8.3))': dependencies: '@astrojs/markdown-remark': 6.3.2 '@mdx-js/mdx': 3.1.0(acorn@8.15.0) acorn: 8.15.0 - astro: 5.10.1(@types/node@24.0.6)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.44.1)(typescript@5.8.3) + astro: 5.10.1(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.44.1)(typescript@5.8.3) es-module-lexer: 1.7.0 estree-util-visit: 2.0.0 hast-util-to-html: 9.0.5 @@ -2973,22 +2961,22 @@ snapshots: transitivePeerDependencies: - supports-color - '@astrojs/node@9.2.2(astro@5.10.1(@types/node@24.0.6)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.44.1)(typescript@5.8.3))': + '@astrojs/node@9.2.2(astro@5.10.1(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.44.1)(typescript@5.8.3))': dependencies: '@astrojs/internal-helpers': 0.6.1 - astro: 5.10.1(@types/node@24.0.6)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.44.1)(typescript@5.8.3) + astro: 5.10.1(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.44.1)(typescript@5.8.3) send: 1.2.0 server-destroy: 1.0.1 transitivePeerDependencies: - supports-color - '@astrojs/preact@4.1.0(@babel/core@7.27.7)(@types/node@24.0.6)(jiti@2.4.2)(lightningcss@1.30.1)(preact@10.26.9)': + '@astrojs/preact@4.1.0(@babel/core@7.27.7)(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1)(preact@10.26.9)': dependencies: - '@preact/preset-vite': 2.10.2(@babel/core@7.27.7)(preact@10.26.9)(vite@6.3.5(@types/node@24.0.6)(jiti@2.4.2)(lightningcss@1.30.1)) - '@preact/signals': 2.2.0(preact@10.26.9) + '@preact/preset-vite': 2.10.2(@babel/core@7.27.7)(preact@10.26.9)(vite@6.3.5(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1)) + '@preact/signals': 2.2.1(preact@10.26.9) preact: 10.26.9 preact-render-to-string: 6.5.13(preact@10.26.9) - vite: 6.3.5(@types/node@24.0.6)(jiti@2.4.2)(lightningcss@1.30.1) + vite: 6.3.5(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1) transitivePeerDependencies: - '@babel/core' - '@types/node' @@ -3057,8 +3045,8 @@ snapshots: dependencies: '@babel/parser': 7.27.7 '@babel/types': 7.27.7 - '@jridgewell/gen-mapping': 0.3.8 - '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/gen-mapping': 0.3.11 + '@jridgewell/trace-mapping': 0.3.28 jsesc: 3.1.0 '@babel/helper-annotate-as-pure@7.27.3': @@ -3246,7 +3234,7 @@ snapshots: dependencies: '@iconify/types': 2.0.0 - '@iconify-json/simple-icons@1.2.40': + '@iconify-json/simple-icons@1.2.41': dependencies: '@iconify/types': 2.0.0 @@ -3442,22 +3430,19 @@ snapshots: dependencies: minipass: 7.1.2 - '@jridgewell/gen-mapping@0.3.8': + '@jridgewell/gen-mapping@0.3.11': dependencies: - '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.5.0 - '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/sourcemap-codec': 1.5.3 + '@jridgewell/trace-mapping': 0.3.28 '@jridgewell/resolve-uri@3.1.2': {} - '@jridgewell/set-array@1.2.1': {} + '@jridgewell/sourcemap-codec@1.5.3': {} - '@jridgewell/sourcemap-codec@1.5.0': {} - - '@jridgewell/trace-mapping@0.3.25': + '@jridgewell/trace-mapping@0.3.28': dependencies: '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/sourcemap-codec': 1.5.3 '@mdx-js/mdx@3.1.0(acorn@8.15.0)': dependencies: @@ -3491,46 +3476,46 @@ snapshots: '@oslojs/encoding@1.1.0': {} - '@preact/preset-vite@2.10.2(@babel/core@7.27.7)(preact@10.26.9)(vite@6.3.5(@types/node@24.0.6)(jiti@2.4.2)(lightningcss@1.30.1))': + '@preact/preset-vite@2.10.2(@babel/core@7.27.7)(preact@10.26.9)(vite@6.3.5(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1))': dependencies: '@babel/core': 7.27.7 '@babel/plugin-transform-react-jsx': 7.27.1(@babel/core@7.27.7) '@babel/plugin-transform-react-jsx-development': 7.27.1(@babel/core@7.27.7) - '@prefresh/vite': 2.4.7(preact@10.26.9)(vite@6.3.5(@types/node@24.0.6)(jiti@2.4.2)(lightningcss@1.30.1)) + '@prefresh/vite': 2.4.8(preact@10.26.9)(vite@6.3.5(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1)) '@rollup/pluginutils': 4.2.1 babel-plugin-transform-hook-names: 1.0.2(@babel/core@7.27.7) debug: 4.4.1 picocolors: 1.1.1 - vite: 6.3.5(@types/node@24.0.6)(jiti@2.4.2)(lightningcss@1.30.1) - vite-prerender-plugin: 0.5.10(vite@6.3.5(@types/node@24.0.6)(jiti@2.4.2)(lightningcss@1.30.1)) + vite: 6.3.5(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1) + vite-prerender-plugin: 0.5.10(vite@6.3.5(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1)) transitivePeerDependencies: - preact - supports-color - '@preact/signals-core@1.10.0': {} + '@preact/signals-core@1.11.0': {} - '@preact/signals@2.2.0(preact@10.26.9)': + '@preact/signals@2.2.1(preact@10.26.9)': dependencies: - '@preact/signals-core': 1.10.0 + '@preact/signals-core': 1.11.0 preact: 10.26.9 - '@prefresh/babel-plugin@0.5.1': {} + '@prefresh/babel-plugin@0.5.2': {} - '@prefresh/core@1.5.3(preact@10.26.9)': + '@prefresh/core@1.5.4(preact@10.26.9)': dependencies: preact: 10.26.9 - '@prefresh/utils@1.2.0': {} + '@prefresh/utils@1.2.1': {} - '@prefresh/vite@2.4.7(preact@10.26.9)(vite@6.3.5(@types/node@24.0.6)(jiti@2.4.2)(lightningcss@1.30.1))': + '@prefresh/vite@2.4.8(preact@10.26.9)(vite@6.3.5(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1))': dependencies: '@babel/core': 7.27.7 - '@prefresh/babel-plugin': 0.5.1 - '@prefresh/core': 1.5.3(preact@10.26.9) - '@prefresh/utils': 1.2.0 + '@prefresh/babel-plugin': 0.5.2 + '@prefresh/core': 1.5.4(preact@10.26.9) + '@prefresh/utils': 1.2.1 '@rollup/pluginutils': 4.2.1 preact: 10.26.9 - vite: 6.3.5(@types/node@24.0.6)(jiti@2.4.2)(lightningcss@1.30.1) + vite: 6.3.5(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1) transitivePeerDependencies: - supports-color @@ -3541,7 +3526,7 @@ snapshots: progress: 2.0.3 proxy-agent: 6.5.0 semver: 7.7.2 - tar-fs: 3.0.10 + tar-fs: 3.1.0 yargs: 17.7.2 transitivePeerDependencies: - bare-buffer @@ -3729,12 +3714,12 @@ snapshots: postcss-selector-parser: 6.0.10 tailwindcss: 4.1.11 - '@tailwindcss/vite@4.1.11(vite@6.3.5(@types/node@24.0.6)(jiti@2.4.2)(lightningcss@1.30.1))': + '@tailwindcss/vite@4.1.11(vite@6.3.5(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1))': dependencies: '@tailwindcss/node': 4.1.11 '@tailwindcss/oxide': 4.1.11 tailwindcss: 4.1.11 - vite: 6.3.5(@types/node@24.0.6)(jiti@2.4.2)(lightningcss@1.30.1) + vite: 6.3.5(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1) '@tootallnate/quickjs-emscripten@0.23.0': {} @@ -3752,7 +3737,7 @@ snapshots: '@types/fontkit@2.0.8': dependencies: - '@types/node': 24.0.6 + '@types/node': 24.0.7 '@types/hast@3.0.4': dependencies: @@ -3770,23 +3755,13 @@ snapshots: dependencies: '@types/unist': 3.0.3 - '@types/node@24.0.6': + '@types/node@24.0.7': dependencies: undici-types: 7.8.0 - '@types/puppeteer@7.0.4(typescript@5.8.3)': - dependencies: - puppeteer: 24.11.0(typescript@5.8.3) - transitivePeerDependencies: - - bare-buffer - - bufferutil - - supports-color - - typescript - - utf-8-validate - '@types/tar@6.1.13': dependencies: - '@types/node': 24.0.6 + '@types/node': 24.0.7 minipass: 4.2.8 '@types/unist@2.0.11': {} @@ -3795,7 +3770,7 @@ snapshots: '@types/yauzl@2.10.3': dependencies: - '@types/node': 24.0.6 + '@types/node': 24.0.7 optional: true '@ungap/structured-clone@1.3.0': {} @@ -3848,7 +3823,7 @@ snapshots: - debug - supports-color - astro@5.10.1(@types/node@24.0.6)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.44.1)(typescript@5.8.3): + astro@5.10.1(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1)(rollup@4.44.1)(typescript@5.8.3): dependencies: '@astrojs/compiler': 2.12.2 '@astrojs/internal-helpers': 0.6.1 @@ -3903,8 +3878,8 @@ snapshots: unist-util-visit: 5.0.0 unstorage: 1.16.0 vfile: 6.0.3 - vite: 6.3.5(@types/node@24.0.6)(jiti@2.4.2)(lightningcss@1.30.1) - vitefu: 1.0.7(vite@6.3.5(@types/node@24.0.6)(jiti@2.4.2)(lightningcss@1.30.1)) + vite: 6.3.5(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1) + vitefu: 1.0.7(vite@6.3.5(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1)) xxhash-wasm: 1.1.0 yargs-parser: 21.1.1 yocto-spinner: 0.2.3 @@ -4021,7 +3996,7 @@ snapshots: browserslist@4.25.1: dependencies: caniuse-lite: 1.0.30001726 - electron-to-chromium: 1.5.177 + electron-to-chromium: 1.5.178 node-releases: 2.0.19 update-browserslist-db: 1.1.3(browserslist@4.25.1) @@ -4053,8 +4028,8 @@ snapshots: cheerio-select@2.1.0: dependencies: boolbase: 1.0.0 - css-select: 5.1.0 - css-what: 6.1.0 + css-select: 5.2.2 + css-what: 6.2.2 domelementtype: 2.3.0 domhandler: 5.0.3 domutils: 3.2.2 @@ -4158,10 +4133,10 @@ snapshots: dependencies: uncrypto: 0.1.3 - css-select@5.1.0: + css-select@5.2.2: dependencies: boolbase: 1.0.0 - css-what: 6.1.0 + css-what: 6.2.2 domhandler: 5.0.3 domutils: 3.2.2 nth-check: 2.1.1 @@ -4181,7 +4156,7 @@ snapshots: mdn-data: 2.12.2 source-map-js: 1.2.1 - css-what@6.1.0: {} + css-what@6.2.2: {} cssesc@3.0.0: {} @@ -4265,7 +4240,7 @@ snapshots: ee-first@1.1.1: {} - electron-to-chromium@1.5.177: {} + electron-to-chromium@1.5.178: {} emoji-regex@10.4.0: {} @@ -4846,7 +4821,7 @@ snapshots: local-pkg@1.1.1: dependencies: mlly: 1.7.4 - pkg-types: 2.1.1 + pkg-types: 2.2.0 quansync: 0.2.10 lodash.castarray@4.4.0: {} @@ -4871,7 +4846,7 @@ snapshots: magic-string@0.30.17: dependencies: - '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/sourcemap-codec': 1.5.3 magicast@0.3.5: dependencies: @@ -5390,7 +5365,7 @@ snapshots: node-html-parser@6.1.13: dependencies: - css-select: 5.1.0 + css-select: 5.2.2 he: 1.2.0 node-mock-http@1.0.1: {} @@ -5521,7 +5496,7 @@ snapshots: mlly: 1.7.4 pathe: 2.0.3 - pkg-types@2.1.1: + pkg-types@2.2.0: dependencies: confbox: 0.2.2 exsolve: 1.0.7 @@ -5577,27 +5552,27 @@ snapshots: end-of-stream: 1.4.5 once: 1.4.0 - puppeteer-core@24.11.0: + puppeteer-core@24.11.1: dependencies: '@puppeteer/browsers': 2.10.5 chromium-bidi: 5.1.0(devtools-protocol@0.0.1464554) debug: 4.4.1 devtools-protocol: 0.0.1464554 typed-query-selector: 2.12.0 - ws: 8.18.2 + ws: 8.18.3 transitivePeerDependencies: - bare-buffer - bufferutil - supports-color - utf-8-validate - puppeteer@24.11.0(typescript@5.8.3): + puppeteer@24.11.1(typescript@5.8.3): dependencies: '@puppeteer/browsers': 2.10.5 chromium-bidi: 5.1.0(devtools-protocol@0.0.1464554) cosmiconfig: 9.0.0(typescript@5.8.3) devtools-protocol: 0.0.1464554 - puppeteer-core: 24.11.0 + puppeteer-core: 24.11.1 typed-query-selector: 2.12.0 transitivePeerDependencies: - bare-buffer @@ -5896,7 +5871,7 @@ snapshots: smart-buffer@4.2.0: {} - smol-toml@1.3.4: {} + smol-toml@1.4.0: {} socks-proxy-agent@8.0.5: dependencies: @@ -5974,9 +5949,9 @@ snapshots: dependencies: '@trysound/sax': 0.2.0 commander: 7.2.0 - css-select: 5.1.0 + css-select: 5.2.2 css-tree: 2.3.1 - css-what: 6.1.0 + css-what: 6.2.2 csso: 5.0.5 picocolors: 1.1.1 @@ -5984,7 +5959,7 @@ snapshots: tapable@2.2.2: {} - tar-fs@3.0.10: + tar-fs@3.1.0: dependencies: pump: 3.0.3 tar-stream: 3.1.7 @@ -6169,7 +6144,7 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.2 - vite-prerender-plugin@0.5.10(vite@6.3.5(@types/node@24.0.6)(jiti@2.4.2)(lightningcss@1.30.1)): + vite-prerender-plugin@0.5.10(vite@6.3.5(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1)): dependencies: kolorist: 1.8.0 magic-string: 0.30.17 @@ -6177,9 +6152,9 @@ snapshots: simple-code-frame: 1.3.0 source-map: 0.7.4 stack-trace: 1.0.0-pre2 - vite: 6.3.5(@types/node@24.0.6)(jiti@2.4.2)(lightningcss@1.30.1) + vite: 6.3.5(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1) - vite@6.3.5(@types/node@24.0.6)(jiti@2.4.2)(lightningcss@1.30.1): + vite@6.3.5(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1): dependencies: esbuild: 0.25.5 fdir: 6.4.6(picomatch@4.0.2) @@ -6188,14 +6163,14 @@ snapshots: rollup: 4.44.1 tinyglobby: 0.2.14 optionalDependencies: - '@types/node': 24.0.6 + '@types/node': 24.0.7 fsevents: 2.3.3 jiti: 2.4.2 lightningcss: 1.30.1 - vitefu@1.0.7(vite@6.3.5(@types/node@24.0.6)(jiti@2.4.2)(lightningcss@1.30.1)): + vitefu@1.0.7(vite@6.3.5(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1)): optionalDependencies: - vite: 6.3.5(@types/node@24.0.6)(jiti@2.4.2)(lightningcss@1.30.1) + vite: 6.3.5(@types/node@24.0.7)(jiti@2.4.2)(lightningcss@1.30.1) web-namespaces@2.0.1: {} @@ -6232,7 +6207,7 @@ snapshots: wrappy@1.0.2: {} - ws@8.18.2: {} + ws@8.18.3: {} xxhash-wasm@1.1.0: {} diff --git a/shell.nix b/shell.nix new file mode 100644 index 0000000..34aad9f --- /dev/null +++ b/shell.nix @@ -0,0 +1,30 @@ +{ pkgs ? import {} }: + +pkgs.mkShell { + buildInputs = with pkgs; [ + nodejs_24 + nodePackages.pnpm + chromium + git + curl + ]; + + shellHook = '' + echo "🚀 atridotdad development environment loaded!" + echo "Node version: $(node --version)" + echo "pnpm version: $(pnpm --version)" + echo "Chromium path: ${pkgs.chromium}/bin/chromium" + + export PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true + export PUPPETEER_EXECUTABLE_PATH="${pkgs.chromium}/bin/chromium" + + if [ ! -d "node_modules" ]; then + echo "📦 Installing dependencies..." + pnpm install + fi + ''; + + # Environment variables + PUPPETEER_SKIP_CHROMIUM_DOWNLOAD = "true"; + PUPPETEER_EXECUTABLE_PATH = "${pkgs.chromium}/bin/chromium"; +} \ No newline at end of file diff --git a/src/pages/api/resume/pdf.ts b/src/pages/api/resume/pdf.ts index dd3274a..e611272 100644 --- a/src/pages/api/resume/pdf.ts +++ b/src/pages/api/resume/pdf.ts @@ -184,8 +184,8 @@ const generateResumeHTML = async (data: ResumeData): Promise => { ?.map((edu) => { const detailsList = edu.details ? edu.details - .map((detail) => `
  • ${detail}
  • `) - .join("") + .map((detail) => `
  • ${detail}
  • `) + .join("") : ""; return ` @@ -263,23 +263,21 @@ const generateResumeHTML = async (data: ResumeData): Promise => {

    ${data.basics.name}

    ${data.basics.email ? `
    ${emailIcon} ${data.basics.email}
    ` : ""} - ${ - data.basics.profiles - ?.map((profile) => { - const icon = profileIcons[profile.network] || ""; - const displayUrl = profile.url - .replace(/^https?:\/\//, "") - .replace(/\/$/, ""); - return `
    ${icon} ${displayUrl}
    `; - }) - .join("") || "" - } + ${data.basics.profiles + ?.map((profile) => { + const icon = profileIcons[profile.network] || ""; + const displayUrl = profile.url + .replace(/^https?:\/\//, "") + .replace(/\/$/, ""); + return `
    ${icon} ${displayUrl}
    `; + }) + .join("") || "" + }
    - ${ - data.summary && resumeConfig.sections.summary?.enabled - ? ` + ${data.summary && resumeConfig.sections.summary?.enabled + ? `

    ${resumeConfig.sections.summary.title || "Summary"} @@ -287,100 +285,100 @@ const generateResumeHTML = async (data: ResumeData): Promise => {
    ${data.summary.content}

    ` - : "" - } + : "" + }
    ${generateColumnSections(layout.leftColumn, { - experience: { - data: data.experience, - html: experienceHTML, - title: - resumeConfig.sections.experience?.title || "Experience", - enabled: resumeConfig.sections.experience?.enabled, - spacing: "space-y-3", - }, - volunteer: { - data: data.volunteer, - html: volunteerHTML, - title: - resumeConfig.sections.volunteer?.title || - "Volunteer Work", - enabled: resumeConfig.sections.volunteer?.enabled, - spacing: "space-y-2", - }, - awards: { - data: data.awards, - html: awardsHTML, - title: - resumeConfig.sections.awards?.title || - "Awards & Recognition", - enabled: resumeConfig.sections.awards?.enabled, - spacing: "space-y-2", - }, - skills: { - data: data.skills, - html: skillsHTML, - title: resumeConfig.sections.skills?.title || "Skills", - enabled: resumeConfig.sections.skills?.enabled, - spacing: "space-y-1", - }, - education: { - data: data.education, - html: educationHTML, - title: - resumeConfig.sections.education?.title || "Education", - enabled: resumeConfig.sections.education?.enabled, - spacing: "space-y-3", - }, - })} + experience: { + data: data.experience, + html: experienceHTML, + title: + resumeConfig.sections.experience?.title || "Experience", + enabled: resumeConfig.sections.experience?.enabled, + spacing: "space-y-3", + }, + volunteer: { + data: data.volunteer, + html: volunteerHTML, + title: + resumeConfig.sections.volunteer?.title || + "Volunteer Work", + enabled: resumeConfig.sections.volunteer?.enabled, + spacing: "space-y-2", + }, + awards: { + data: data.awards, + html: awardsHTML, + title: + resumeConfig.sections.awards?.title || + "Awards & Recognition", + enabled: resumeConfig.sections.awards?.enabled, + spacing: "space-y-2", + }, + skills: { + data: data.skills, + html: skillsHTML, + title: resumeConfig.sections.skills?.title || "Skills", + enabled: resumeConfig.sections.skills?.enabled, + spacing: "space-y-1", + }, + education: { + data: data.education, + html: educationHTML, + title: + resumeConfig.sections.education?.title || "Education", + enabled: resumeConfig.sections.education?.enabled, + spacing: "space-y-3", + }, + })}
    ${generateColumnSections(layout.rightColumn, { - experience: { - data: data.experience, - html: experienceHTML, - title: - resumeConfig.sections.experience?.title || "Experience", - enabled: resumeConfig.sections.experience?.enabled, - spacing: "space-y-3", - }, - volunteer: { - data: data.volunteer, - html: volunteerHTML, - title: - resumeConfig.sections.volunteer?.title || - "Volunteer Work", - enabled: resumeConfig.sections.volunteer?.enabled, - spacing: "space-y-2", - }, - awards: { - data: data.awards, - html: awardsHTML, - title: - resumeConfig.sections.awards?.title || - "Awards & Recognition", - enabled: resumeConfig.sections.awards?.enabled, - spacing: "space-y-2", - }, - skills: { - data: data.skills, - html: skillsHTML, - title: resumeConfig.sections.skills?.title || "Skills", - enabled: resumeConfig.sections.skills?.enabled, - spacing: "space-y-1", - }, - education: { - data: data.education, - html: educationHTML, - title: - resumeConfig.sections.education?.title || "Education", - enabled: resumeConfig.sections.education?.enabled, - spacing: "space-y-3", - }, - })} + experience: { + data: data.experience, + html: experienceHTML, + title: + resumeConfig.sections.experience?.title || "Experience", + enabled: resumeConfig.sections.experience?.enabled, + spacing: "space-y-3", + }, + volunteer: { + data: data.volunteer, + html: volunteerHTML, + title: + resumeConfig.sections.volunteer?.title || + "Volunteer Work", + enabled: resumeConfig.sections.volunteer?.enabled, + spacing: "space-y-2", + }, + awards: { + data: data.awards, + html: awardsHTML, + title: + resumeConfig.sections.awards?.title || + "Awards & Recognition", + enabled: resumeConfig.sections.awards?.enabled, + spacing: "space-y-2", + }, + skills: { + data: data.skills, + html: skillsHTML, + title: resumeConfig.sections.skills?.title || "Skills", + enabled: resumeConfig.sections.skills?.enabled, + spacing: "space-y-1", + }, + education: { + data: data.education, + html: educationHTML, + title: + resumeConfig.sections.education?.title || "Education", + enabled: resumeConfig.sections.education?.enabled, + spacing: "space-y-3", + }, + })}
    @@ -416,10 +414,8 @@ export const GET: APIRoute = async ({ request }) => { const browser = await puppeteer.launch({ headless: true, defaultViewport: null, - executablePath: - process.env.NODE_ENV === "production" - ? "/usr/bin/google-chrome" - : undefined, + executablePath: process.env.PUPPETEER_EXECUTABLE_PATH || + (process.env.NODE_ENV === "production" ? "/usr/bin/google-chrome" : undefined), args: [ "--no-sandbox", "--disable-setuid-sandbox",