diff --git a/docs/docs.json b/docs/docs.json
index 80f651a0b..163daad2f 100644
--- a/docs/docs.json
+++ b/docs/docs.json
@@ -32,7 +32,12 @@
"groups": [
{
"group": "Getting Started",
- "pages": ["getting-started/index", "getting-started/quickstart", "guides/accessing-the-previous-version"]
+ "pages": [
+ "getting-started/index",
+ "getting-started/quickstart",
+ "guides/checking-service-status",
+ "guides/accessing-the-previous-version"
+ ]
},
{
"group": "Account",
diff --git a/docs/guides/checking-service-status.mdx b/docs/guides/checking-service-status.mdx
new file mode 100644
index 000000000..5817fd54a
--- /dev/null
+++ b/docs/guides/checking-service-status.mdx
@@ -0,0 +1,94 @@
+---
+title: "Checking Service Status"
+description: "Learn how to check the status of Reactive Resume's servers and what to do if the service is experiencing issues"
+---
+
+## Status Page
+
+You can monitor the health and availability of Reactive Resume's servers at any time by visiting our status page:
+
+
+ View real-time server metrics including uptime, CPU usage, memory usage, and more.
+
+
+The status page provides information such as:
+
+- **Uptime**: How long the servers have been running without interruption
+- **CPU Usage**: Current processor utilization
+- **Memory Usage**: RAM consumption across services
+- **Response Times**: How quickly the servers are responding to requests
+
+---
+
+## What to Do If Servers Are Down
+
+If you notice the servers are experiencing high load or downtime, here are some recommendations:
+
+
+
+ Visit [status.rxresu.me](https://status.rxresu.me) to confirm if there's an ongoing issue. The page will show you the current state of all services.
+
+
+
+ If the servers are under heavy load, the best course of action is to wait a bit and try again later. Peak usage times can cause temporary slowdowns.
+
+
+ Reactive Resume is a **free, open-source service** used by thousands of people worldwide. During peak times, the servers may experience higher than usual load.
+
+
+
+
+ For major outages or planned maintenance, announcements may be posted on our [GitHub repository](https://github.com/amruthpillai/reactive-resume).
+
+
+
+---
+
+## A Note on Server Capacity
+
+
+ Reactive Resume is a **free service** that runs on limited server resources. As an open-source project maintained by a single developer, it's not feasible to invest in powerful dedicated servers without community support.
+
+
+The reality is:
+
+- **High demand**: Thousands of users rely on this service daily
+- **Limited resources**: As a free service, server capacity is constrained
+- **No corporate backing**: This isn't a venture-funded startup with unlimited cloud budgets
+
+If you find Reactive Resume valuable and want to help keep the servers running smoothly (and maybe even help scale them up), please consider supporting the project.
+
+---
+
+## Support the Project
+
+Your donations directly help cover server costs, improve infrastructure, and keep Reactive Resume free for everyone.
+
+
+ Support Reactive Resume's development and server costs through Open Collective. Every contribution helps keep the service running.
+
+
+
+
+ Make a single contribution of any amount to help with immediate server costs.
+
+
+ Become a backer with a monthly contribution to provide sustainable support.
+
+
+
+---
+
+## Self-Hosting as an Alternative
+
+If you need guaranteed uptime or want to avoid shared server limitations, you can always self-host Reactive Resume on your own infrastructure.
+
+
+ Learn how to deploy Reactive Resume on your own servers using Docker.
+
+
+Self-hosting gives you:
+
+- **Full control** over your data and infrastructure
+- **Guaranteed availability** based on your own server capacity
+- **No shared resources** with other users
diff --git a/package.json b/package.json
index 28800fb48..90205969c 100644
--- a/package.json
+++ b/package.json
@@ -4,7 +4,7 @@
"version": "5.0.3",
"license": "MIT",
"type": "module",
- "packageManager": "pnpm@10.28.1+sha512.7d7dbbca9e99447b7c3bf7a73286afaaf6be99251eb9498baefa7d406892f67b879adb3a1d7e687fc4ccc1a388c7175fbaae567a26ab44d1067b54fcb0d6a316",
+ "packageManager": "pnpm@10.28.2+sha512.41872f037ad22f7348e3b1debbaf7e867cfd448f2726d9cf74c08f19507c31d2c8e7a11525b983febc2df640b5438dee6023ebb1f84ed43cc2d654d2bc326264",
"repository": {
"type": "git",
"url": "https://github.com/amruthpillai/reactive-resume.git"
@@ -66,7 +66,7 @@
"@tiptap/pm": "^3.17.1",
"@tiptap/react": "^3.17.1",
"@tiptap/starter-kit": "^3.17.1",
- "ai": "^6.0.49",
+ "ai": "^6.0.50",
"ai-sdk-ollama": "^3.3.0",
"bcrypt": "^6.0.0",
"better-auth": "1.5.0-beta.9",
@@ -81,7 +81,7 @@
"input-otp": "^1.4.2",
"js-cookie": "^3.0.5",
"monaco-editor": "^0.55.1",
- "motion": "^12.29.0",
+ "motion": "^12.29.2",
"nodemailer": "^7.0.12",
"pg": "^8.17.2",
"puppeteer-core": "^24.36.0",
@@ -111,7 +111,7 @@
"zustand": "^5.0.10"
},
"devDependencies": {
- "@biomejs/biome": "^2.3.12",
+ "@biomejs/biome": "^2.3.13",
"@lingui/babel-plugin-lingui-macro": "^5.9.0",
"@lingui/cli": "^5.9.0",
"@lingui/vite-plugin": "^5.9.0",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 91bd01e30..d23292680 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -117,11 +117,11 @@ importers:
specifier: ^3.17.1
version: 3.17.1
ai:
- specifier: ^6.0.49
- version: 6.0.49(zod@4.3.6)
+ specifier: ^6.0.50
+ version: 6.0.50(zod@4.3.6)
ai-sdk-ollama:
specifier: ^3.3.0
- version: 3.3.0(ai@6.0.49(zod@4.3.6))(zod@4.3.6)
+ version: 3.3.0(ai@6.0.50(zod@4.3.6))(zod@4.3.6)
bcrypt:
specifier: ^6.0.0
version: 6.0.0
@@ -162,8 +162,8 @@ importers:
specifier: ^0.55.1
version: 0.55.1
motion:
- specifier: ^12.29.0
- version: 12.29.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ specifier: ^12.29.2
+ version: 12.29.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
nodemailer:
specifier: ^7.0.12
version: 7.0.12
@@ -247,8 +247,8 @@ importers:
version: 5.0.10(@types/react@19.2.9)(immer@11.1.3)(react@19.2.3)(use-sync-external-store@1.6.0(react@19.2.3))
devDependencies:
'@biomejs/biome':
- specifier: ^2.3.12
- version: 2.3.12
+ specifier: ^2.3.13
+ version: 2.3.13
'@lingui/babel-plugin-lingui-macro':
specifier: ^5.9.0
version: 5.9.0(babel-plugin-macros@3.1.0)(typescript@5.9.3)
@@ -327,8 +327,8 @@ packages:
peerDependencies:
zod: ^3.25.76 || ^4.1.8
- '@ai-sdk/gateway@3.0.22':
- resolution: {integrity: sha512-NgnlY73JNuooACHqUIz5uMOEWvqR1MMVbb2soGLMozLY1fgwEIF5iJFDAGa5/YArlzw2ATVU7zQu7HkR/FUjgA==}
+ '@ai-sdk/gateway@3.0.23':
+ resolution: {integrity: sha512-hievGeM4cXkKvEbaHvlfVDubyp+XiTZmd0f2uvzBEMKfA98lDw0Fg/RKvNwQE6DQjRADkvVJNhSaHmlZRZeh3g==}
engines: {node: '>=18'}
peerDependencies:
zod: ^3.25.76 || ^4.1.8
@@ -1297,55 +1297,59 @@ packages:
'@better-fetch/fetch@1.1.21':
resolution: {integrity: sha512-/ImESw0sskqlVR94jB+5+Pxjf+xBwDZF/N5+y2/q4EqD7IARUTSpPfIo8uf39SYpCxyOCtbyYpUrZ3F/k0zT4A==}
- '@biomejs/biome@2.3.12':
- resolution: {integrity: sha512-AR7h4aSlAvXj7TAajW/V12BOw2EiS0AqZWV5dGozf4nlLoUF/ifvD0+YgKSskT0ylA6dY1A8AwgP8kZ6yaCQnA==}
+ '@biomejs/biome@2.3.13':
+ resolution: {integrity: sha512-Fw7UsV0UAtWIBIm0M7g5CRerpu1eKyKAXIazzxhbXYUyMkwNrkX/KLkGI7b+uVDQ5cLUMfOC9vR60q9IDYDstA==}
engines: {node: '>=14.21.3'}
hasBin: true
- '@biomejs/cli-darwin-arm64@2.3.12':
- resolution: {integrity: sha512-cO6fn+KiMBemva6EARDLQBxeyvLzgidaFRJi8G7OeRqz54kWK0E+uSjgFaiHlc3DZYoa0+1UFE8mDxozpc9ieg==}
+ '@biomejs/cli-darwin-arm64@2.3.13':
+ resolution: {integrity: sha512-0OCwP0/BoKzyJHnFdaTk/i7hIP9JHH9oJJq6hrSCPmJPo8JWcJhprK4gQlhFzrwdTBAW4Bjt/RmCf3ZZe59gwQ==}
engines: {node: '>=14.21.3'}
cpu: [arm64]
os: [darwin]
- '@biomejs/cli-darwin-x64@2.3.12':
- resolution: {integrity: sha512-/fiF/qmudKwSdvmSrSe/gOTkW77mHHkH8Iy7YC2rmpLuk27kbaUOPa7kPiH5l+3lJzTUfU/t6x1OuIq/7SGtxg==}
+ '@biomejs/cli-darwin-x64@2.3.13':
+ resolution: {integrity: sha512-AGr8OoemT/ejynbIu56qeil2+F2WLkIjn2d8jGK1JkchxnMUhYOfnqc9sVzcRxpG9Ycvw4weQ5sprRvtb7Yhcw==}
engines: {node: '>=14.21.3'}
cpu: [x64]
os: [darwin]
- '@biomejs/cli-linux-arm64-musl@2.3.12':
- resolution: {integrity: sha512-aqkeSf7IH+wkzFpKeDVPSXy9uDjxtLpYA6yzkYsY+tVjwFFirSuajHDI3ul8en90XNs1NA0n8kgBrjwRi5JeyA==}
+ '@biomejs/cli-linux-arm64-musl@2.3.13':
+ resolution: {integrity: sha512-TUdDCSY+Eo/EHjhJz7P2GnWwfqet+lFxBZzGHldrvULr59AgahamLs/N85SC4+bdF86EhqDuuw9rYLvLFWWlXA==}
engines: {node: '>=14.21.3'}
cpu: [arm64]
os: [linux]
+ libc: [musl]
- '@biomejs/cli-linux-arm64@2.3.12':
- resolution: {integrity: sha512-nbOsuQROa3DLla5vvsTZg+T5WVPGi9/vYxETm9BOuLHBJN3oWQIg3MIkE2OfL18df1ZtNkqXkH6Yg9mdTPem7A==}
+ '@biomejs/cli-linux-arm64@2.3.13':
+ resolution: {integrity: sha512-xvOiFkrDNu607MPMBUQ6huHmBG1PZLOrqhtK6pXJW3GjfVqJg0Z/qpTdhXfcqWdSZHcT+Nct2fOgewZvytESkw==}
engines: {node: '>=14.21.3'}
cpu: [arm64]
os: [linux]
+ libc: [glibc]
- '@biomejs/cli-linux-x64-musl@2.3.12':
- resolution: {integrity: sha512-kVGWtupRRsOjvw47YFkk5mLiAdpCPMWBo1jOwAzh+juDpUb2sWarIp+iq+CPL1Wt0LLZnYtP7hH5kD6fskcxmg==}
+ '@biomejs/cli-linux-x64-musl@2.3.13':
+ resolution: {integrity: sha512-0bdwFVSbbM//Sds6OjtnmQGp4eUjOTt6kHvR/1P0ieR9GcTUAlPNvPC3DiavTqq302W34Ae2T6u5VVNGuQtGlQ==}
engines: {node: '>=14.21.3'}
cpu: [x64]
os: [linux]
+ libc: [musl]
- '@biomejs/cli-linux-x64@2.3.12':
- resolution: {integrity: sha512-CQtqrJ+qEEI8tgRSTjjzk6wJAwfH3wQlkIGsM5dlecfRZaoT+XCms/mf7G4kWNexrke6mnkRzNy6w8ebV177ow==}
+ '@biomejs/cli-linux-x64@2.3.13':
+ resolution: {integrity: sha512-s+YsZlgiXNq8XkgHs6xdvKDFOj/bwTEevqEY6rC2I3cBHbxXYU1LOZstH3Ffw9hE5tE1sqT7U23C00MzkXztMw==}
engines: {node: '>=14.21.3'}
cpu: [x64]
os: [linux]
+ libc: [glibc]
- '@biomejs/cli-win32-arm64@2.3.12':
- resolution: {integrity: sha512-Re4I7UnOoyE4kHMqpgtG6UvSBGBbbtvsOvBROgCCoH7EgANN6plSQhvo2W7OCITvTp7gD6oZOyZy72lUdXjqZg==}
+ '@biomejs/cli-win32-arm64@2.3.13':
+ resolution: {integrity: sha512-QweDxY89fq0VvrxME+wS/BXKmqMrOTZlN9SqQ79kQSIc3FrEwvW/PvUegQF6XIVaekncDykB5dzPqjbwSKs9DA==}
engines: {node: '>=14.21.3'}
cpu: [arm64]
os: [win32]
- '@biomejs/cli-win32-x64@2.3.12':
- resolution: {integrity: sha512-qqGVWqNNek0KikwPZlOIoxtXgsNGsX+rgdEzgw82Re8nF02W+E2WokaQhpF5TdBh/D/RQ3TLppH+otp6ztN0lw==}
+ '@biomejs/cli-win32-x64@2.3.13':
+ resolution: {integrity: sha512-trDw2ogdM2lyav9WFQsdsfdVy1dvZALymRpgmWsvSez0BJzBjulhOT/t+wyKeh3pZWvwP3VMs1SoOKwO3wecMQ==}
engines: {node: '>=14.21.3'}
cpu: [x64]
os: [win32]
@@ -1800,89 +1804,105 @@ packages:
resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==}
cpu: [arm64]
os: [linux]
+ libc: [glibc]
'@img/sharp-libvips-linux-arm@1.2.4':
resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==}
cpu: [arm]
os: [linux]
+ libc: [glibc]
'@img/sharp-libvips-linux-ppc64@1.2.4':
resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==}
cpu: [ppc64]
os: [linux]
+ libc: [glibc]
'@img/sharp-libvips-linux-riscv64@1.2.4':
resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==}
cpu: [riscv64]
os: [linux]
+ libc: [glibc]
'@img/sharp-libvips-linux-s390x@1.2.4':
resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==}
cpu: [s390x]
os: [linux]
+ libc: [glibc]
'@img/sharp-libvips-linux-x64@1.2.4':
resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==}
cpu: [x64]
os: [linux]
+ libc: [glibc]
'@img/sharp-libvips-linuxmusl-arm64@1.2.4':
resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==}
cpu: [arm64]
os: [linux]
+ libc: [musl]
'@img/sharp-libvips-linuxmusl-x64@1.2.4':
resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==}
cpu: [x64]
os: [linux]
+ libc: [musl]
'@img/sharp-linux-arm64@0.34.5':
resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [arm64]
os: [linux]
+ libc: [glibc]
'@img/sharp-linux-arm@0.34.5':
resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [arm]
os: [linux]
+ libc: [glibc]
'@img/sharp-linux-ppc64@0.34.5':
resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [ppc64]
os: [linux]
+ libc: [glibc]
'@img/sharp-linux-riscv64@0.34.5':
resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [riscv64]
os: [linux]
+ libc: [glibc]
'@img/sharp-linux-s390x@0.34.5':
resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [s390x]
os: [linux]
+ libc: [glibc]
'@img/sharp-linux-x64@0.34.5':
resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [x64]
os: [linux]
+ libc: [glibc]
'@img/sharp-linuxmusl-arm64@0.34.5':
resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [arm64]
os: [linux]
+ libc: [musl]
'@img/sharp-linuxmusl-x64@0.34.5':
resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==}
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
cpu: [x64]
os: [linux]
+ libc: [musl]
'@img/sharp-wasm32@0.34.5':
resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==}
@@ -2282,48 +2302,56 @@ packages:
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [linux]
+ libc: [glibc]
'@oxc-minify/binding-linux-arm64-musl@0.110.0':
resolution: {integrity: sha512-53GjCVY8kvymk9P6qNDh6zyblcehF5QHstq9QgCjv13ONGRnSHjeds0PxIwiihD7h295bxsWs84DN39syLPH4Q==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [linux]
+ libc: [musl]
'@oxc-minify/binding-linux-ppc64-gnu@0.110.0':
resolution: {integrity: sha512-li8XcN81dxbJDMBESnTgGhoiAQ+CNIdM0QGscZ4duVPjCry1RpX+5FJySFbGqG3pk4s9ZzlL/vtQtbRzZIZOzg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [ppc64]
os: [linux]
+ libc: [glibc]
'@oxc-minify/binding-linux-riscv64-gnu@0.110.0':
resolution: {integrity: sha512-SweKfsnLKShu6UFV8mwuj1d1wmlNoL/FlAxPUzwjEBgwiT2HQkY24KnjBH+TIA+//1O83kzmWKvvs4OuEhdIEQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [riscv64]
os: [linux]
+ libc: [glibc]
'@oxc-minify/binding-linux-riscv64-musl@0.110.0':
resolution: {integrity: sha512-oH8G4aFMP8XyTsEpdANC5PQyHgSeGlopHZuW1rpyYcaErg5YaK0vXjQ4EM5HVvPm+feBV24JjxgakTnZoF3aOQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [riscv64]
os: [linux]
+ libc: [musl]
'@oxc-minify/binding-linux-s390x-gnu@0.110.0':
resolution: {integrity: sha512-W9na+Vza7XVUlpf8wMt4QBfH35KeTENEmnpPUq3NSlbQHz8lSlSvhAafvo43NcKvHAXV3ckD/mUf2VkqSdbklg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [s390x]
os: [linux]
+ libc: [glibc]
'@oxc-minify/binding-linux-x64-gnu@0.110.0':
resolution: {integrity: sha512-XJdA4mmmXOjJxSRgNJXsDP7Xe8h3gQhmb56hUcCrvq5d+h5UcEi2pR8rxsdIrS8QmkLuBA3eHkGK8E27D7DTgQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [linux]
+ libc: [glibc]
'@oxc-minify/binding-linux-x64-musl@0.110.0':
resolution: {integrity: sha512-QqzvALuOTtSckI8x467R4GNArzYDb/yEh6aNzLoeaY1O7vfT7SPDwlOEcchaTznutpeS9Dy8gUS/AfqtUHaufw==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [linux]
+ libc: [musl]
'@oxc-minify/binding-openharmony-arm64@0.110.0':
resolution: {integrity: sha512-gAMssLs2Q3+uhLZxanh1DF+27Kaug3cf4PXb9AB7XK81DR+LVcKySXaoGYoOs20Co0fFSphd6rRzKge2qDK3dA==}
@@ -2400,41 +2428,49 @@ packages:
resolution: {integrity: sha512-0eVYZxSceNqGADzhlV4ZRqkHF0fjWxRXQOB7Qwl5y1gN/XYUDvMfip+ngtzj4dM7zQT4U97hUhJ7PUKSy/JIGQ==}
cpu: [arm64]
os: [linux]
+ libc: [glibc]
'@oxc-resolver/binding-linux-arm64-musl@11.16.3':
resolution: {integrity: sha512-B1BvLeZbgDdVN0FvU40l5Q7lej8310WlabCBaouk8jY7H7xbI8phtomTtk3Efmevgfy5hImaQJu6++OmcFb2NQ==}
cpu: [arm64]
os: [linux]
+ libc: [musl]
'@oxc-resolver/binding-linux-ppc64-gnu@11.16.3':
resolution: {integrity: sha512-q7khglic3Jqak7uDgA3MFnjDeI7krQT595GDZpvFq785fmFYSx8rlTkoHzmhQtUisYtl4XG7WUscwsoidFUI4w==}
cpu: [ppc64]
os: [linux]
+ libc: [glibc]
'@oxc-resolver/binding-linux-riscv64-gnu@11.16.3':
resolution: {integrity: sha512-aFRNmQNPzDgQEbw2s3c8yJYRimacSDI+u9df8rn5nSKzTVitHmbEpZqfxpwNLCKIuLSNmozHR1z1OT+oZVeYqg==}
cpu: [riscv64]
os: [linux]
+ libc: [glibc]
'@oxc-resolver/binding-linux-riscv64-musl@11.16.3':
resolution: {integrity: sha512-vZI85SvSMADcEL9G1TIrV0Rlkc1fY5Mup0DdlVC5EHPysZB4hXXHpr+h09pjlK5y+5om5foIzDRxE1baUCaWOA==}
cpu: [riscv64]
os: [linux]
+ libc: [musl]
'@oxc-resolver/binding-linux-s390x-gnu@11.16.3':
resolution: {integrity: sha512-xiLBnaUlddFEzRHiHiSGEMbkg8EwZY6VD8F+3GfnFsiK3xg/4boaUV2bwXd+nUzl3UDQOMW1QcZJ4jJSb0qiJA==}
cpu: [s390x]
os: [linux]
+ libc: [glibc]
'@oxc-resolver/binding-linux-x64-gnu@11.16.3':
resolution: {integrity: sha512-6y0b05wIazJJgwu7yU/AYGFswzQQudYJBOb/otDhiDacp1+6ye8egoxx63iVo9lSpDbipL++54AJQFlcOHCB+g==}
cpu: [x64]
os: [linux]
+ libc: [glibc]
'@oxc-resolver/binding-linux-x64-musl@11.16.3':
resolution: {integrity: sha512-RmMgwuMa42c9logS7Pjprf5KCp8J1a1bFiuBFtG9/+yMu0BhY2t+0VR/um7pwtkNFvIQqAVh6gDOg/PnoKRcdQ==}
cpu: [x64]
os: [linux]
+ libc: [musl]
'@oxc-resolver/binding-openharmony-arm64@11.16.3':
resolution: {integrity: sha512-/7AYRkjjW7xu1nrHgWUFy99Duj4/ydOBVaHtODie9/M6fFngo+8uQDFFnzmr4q//sd/cchIerISp/8CQ5TsqIA==}
@@ -2508,48 +2544,56 @@ packages:
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [linux]
+ libc: [glibc]
'@oxc-transform/binding-linux-arm64-musl@0.110.0':
resolution: {integrity: sha512-e5JN94/oy+wevk76q+LMr+2klTTcO60uXa+Wkq558Ms7mdF2TvkKFI++d/JeiuIwJLTi/BxQ4qdT5FWcsHM/ug==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [linux]
+ libc: [musl]
'@oxc-transform/binding-linux-ppc64-gnu@0.110.0':
resolution: {integrity: sha512-Y3/Tnnz1GvDpmv8FXBIKtdZPsdZklOEPdrL6NHrN5i2u54BOkybFaDSptgWF53wOrJlTrcmAVSE6fRKK9XCM2Q==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [ppc64]
os: [linux]
+ libc: [glibc]
'@oxc-transform/binding-linux-riscv64-gnu@0.110.0':
resolution: {integrity: sha512-Y0E35iA9/v9jlkNcP6tMJ+ZFOS0rLsWDqG6rU9z+X2R3fBFJBO9UARIK6ngx8upxk81y1TFR2CmBFhupfYdH6Q==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [riscv64]
os: [linux]
+ libc: [glibc]
'@oxc-transform/binding-linux-riscv64-musl@0.110.0':
resolution: {integrity: sha512-JOUSYFfHjBUs7xp2FHmZHb8eTYD/oEu0NklS6JgUauqnoXZHiTLPLVW2o2uVCqldnabYHcomuwI2iqVFYJNhTw==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [riscv64]
os: [linux]
+ libc: [musl]
'@oxc-transform/binding-linux-s390x-gnu@0.110.0':
resolution: {integrity: sha512-7blgoXF9D3Ngzb7eun23pNrHJpoV/TtE6LObwlZ3Nmb4oZ6Z+yMvBVaoW68NarbmvNGfZ95zrOjgm6cVETLYBA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [s390x]
os: [linux]
+ libc: [glibc]
'@oxc-transform/binding-linux-x64-gnu@0.110.0':
resolution: {integrity: sha512-YQ2joGWCVDZVEU2cD/r/w49hVjDm/Qu1BvC/7zs8LvprzdLS/HyMXGF2oA0puw0b+AqgYaz3bhwKB2xexHyITQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [linux]
+ libc: [glibc]
'@oxc-transform/binding-linux-x64-musl@0.110.0':
resolution: {integrity: sha512-fkjr5qE632ULmNgvFXWDR/8668WxERz3tU7TQFp6JebPBneColitjSkdx6VKNVXEoMmQnOvBIGeP5tUNT384oA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [linux]
+ libc: [musl]
'@oxc-transform/binding-openharmony-arm64@0.110.0':
resolution: {integrity: sha512-HWH9Zj+lMrdSTqFRCZsvDWMz7OnMjbdGsm3xURXWfRZpuaz0bVvyuZNDQXc4FyyhRDsemICaJbU1bgeIpUJDGw==}
@@ -3434,24 +3478,28 @@ packages:
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [linux]
+ libc: [glibc]
'@rolldown/binding-linux-arm64-musl@1.0.0-beta.53':
resolution: {integrity: sha512-bGe5EBB8FVjHBR1mOLOPEFg1Lp3//7geqWkU5NIhxe+yH0W8FVrQ6WRYOap4SUTKdklD/dC4qPLREkMMQ855FA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [linux]
+ libc: [musl]
'@rolldown/binding-linux-x64-gnu@1.0.0-beta.53':
resolution: {integrity: sha512-qL+63WKVQs1CMvFedlPt0U9PiEKJOAL/bsHMKUDS6Vp2Q+YAv/QLPu8rcvkfIMvQ0FPU2WL0aX4eWwF6e/GAnA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [linux]
+ libc: [glibc]
'@rolldown/binding-linux-x64-musl@1.0.0-beta.53':
resolution: {integrity: sha512-VGl9JIGjoJh3H8Mb+7xnVqODajBmrdOOb9lxWXdcmxyI+zjB2sux69br0hZJDTyLJfvBoYm439zPACYbCjGRmw==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [linux]
+ libc: [musl]
'@rolldown/binding-openharmony-arm64@1.0.0-beta.53':
resolution: {integrity: sha512-B4iIserJXuSnNzA5xBLFUIjTfhNy7d9sq4FUMQY3GhQWGVhS2RWWzzDnkSU6MUt7/aHUrep0CdQfXUJI9D3W7A==}
@@ -3860,24 +3908,28 @@ packages:
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
+ libc: [glibc]
'@tailwindcss/oxide-linux-arm64-musl@4.1.18':
resolution: {integrity: sha512-1px92582HkPQlaaCkdRcio71p8bc8i/ap5807tPRDK/uw953cauQBT8c5tVGkOwrHMfc2Yh6UuxaH4vtTjGvHg==}
engines: {node: '>= 10'}
cpu: [arm64]
os: [linux]
+ libc: [musl]
'@tailwindcss/oxide-linux-x64-gnu@4.1.18':
resolution: {integrity: sha512-v3gyT0ivkfBLoZGF9LyHmts0Isc8jHZyVcbzio6Wpzifg/+5ZJpDiRiUhDLkcr7f/r38SWNe7ucxmGW3j3Kb/g==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
+ libc: [glibc]
'@tailwindcss/oxide-linux-x64-musl@4.1.18':
resolution: {integrity: sha512-bhJ2y2OQNlcRwwgOAGMY0xTFStt4/wyU6pvI6LSuZpRgKQwxTec0/3Scu91O8ir7qCR3AuepQKLU/kX99FouqQ==}
engines: {node: '>= 10'}
cpu: [x64]
os: [linux]
+ libc: [musl]
'@tailwindcss/oxide-wasm32-wasi@4.1.18':
resolution: {integrity: sha512-LffYTvPjODiP6PT16oNeUQJzNVyJl1cjIebq/rWWBF+3eDst5JGEFSc5cWxyRCJ0Mxl+KyIkqRxk1XPEs9x8TA==}
@@ -4361,8 +4413,8 @@ packages:
peerDependencies:
ai: ^6.0.48
- ai@6.0.49:
- resolution: {integrity: sha512-LABniBX/0R6Tv+iUK5keUZhZLaZUe4YjP5M2rZ4wAdZ8iKV3EfTAoJxuL1aaWTSJKIilKa9QUEkCgnp89/32bw==}
+ ai@6.0.50:
+ resolution: {integrity: sha512-JlwqjkRTa6GR2CF+JksCuh1+jeZATJvvja53cj880bJsEgkMpS+rqjwr1E397WeRjkmoicbGGD8QxIDaFbsWHg==}
engines: {node: '>=18'}
peerDependencies:
zod: ^3.25.76 || ^4.1.8
@@ -5474,8 +5526,8 @@ packages:
resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==}
engines: {node: '>= 0.6'}
- framer-motion@12.29.0:
- resolution: {integrity: sha512-1gEFGXHYV2BD42ZPTFmSU9buehppU+bCuOnHU0AD18DKh9j4DuTx47MvqY5ax+NNWRtK32qIcJf1UxKo1WwjWg==}
+ framer-motion@12.29.2:
+ resolution: {integrity: sha512-lSNRzBJk4wuIy0emYQ/nfZ7eWhqud2umPKw2QAQki6uKhZPKm2hRQHeQoHTG9MIvfobb+A/LbEWPJU794ZUKrg==}
peerDependencies:
'@emotion/is-prop-valid': '*'
react: ^18.0.0 || ^19.0.0
@@ -6133,48 +6185,56 @@ packages:
engines: {node: '>= 12.0.0'}
cpu: [arm64]
os: [linux]
+ libc: [glibc]
lightningcss-linux-arm64-gnu@1.31.1:
resolution: {integrity: sha512-WKyLWztD71rTnou4xAD5kQT+982wvca7E6QoLpoawZ1gP9JM0GJj4Tp5jMUh9B3AitHbRZ2/H3W5xQmdEOUlLg==}
engines: {node: '>= 12.0.0'}
cpu: [arm64]
os: [linux]
+ libc: [glibc]
lightningcss-linux-arm64-musl@1.30.2:
resolution: {integrity: sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==}
engines: {node: '>= 12.0.0'}
cpu: [arm64]
os: [linux]
+ libc: [musl]
lightningcss-linux-arm64-musl@1.31.1:
resolution: {integrity: sha512-mVZ7Pg2zIbe3XlNbZJdjs86YViQFoJSpc41CbVmKBPiGmC4YrfeOyz65ms2qpAobVd7WQsbW4PdsSJEMymyIMg==}
engines: {node: '>= 12.0.0'}
cpu: [arm64]
os: [linux]
+ libc: [musl]
lightningcss-linux-x64-gnu@1.30.2:
resolution: {integrity: sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==}
engines: {node: '>= 12.0.0'}
cpu: [x64]
os: [linux]
+ libc: [glibc]
lightningcss-linux-x64-gnu@1.31.1:
resolution: {integrity: sha512-xGlFWRMl+0KvUhgySdIaReQdB4FNudfUTARn7q0hh/V67PVGCs3ADFjw+6++kG1RNd0zdGRlEKa+T13/tQjPMA==}
engines: {node: '>= 12.0.0'}
cpu: [x64]
os: [linux]
+ libc: [glibc]
lightningcss-linux-x64-musl@1.30.2:
resolution: {integrity: sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==}
engines: {node: '>= 12.0.0'}
cpu: [x64]
os: [linux]
+ libc: [musl]
lightningcss-linux-x64-musl@1.31.1:
resolution: {integrity: sha512-eowF8PrKHw9LpoZii5tdZwnBcYDxRw2rRCyvAXLi34iyeYfqCQNA9rmUM0ce62NlPhCvof1+9ivRaTY6pSKDaA==}
engines: {node: '>= 12.0.0'}
cpu: [x64]
os: [linux]
+ libc: [musl]
lightningcss-win32-arm64-msvc@1.30.2:
resolution: {integrity: sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==}
@@ -6424,14 +6484,14 @@ packages:
moo@0.5.2:
resolution: {integrity: sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q==}
- motion-dom@12.29.0:
- resolution: {integrity: sha512-3eiz9bb32yvY8Q6XNM4AwkSOBPgU//EIKTZwsSWgA9uzbPBhZJeScCVcBuwwYVqhfamewpv7ZNmVKTGp5qnzkA==}
+ motion-dom@12.29.2:
+ resolution: {integrity: sha512-/k+NuycVV8pykxyiTCoFzIVLA95Nb1BFIVvfSu9L50/6K6qNeAYtkxXILy/LRutt7AzaYDc2myj0wkCVVYAPPA==}
- motion-utils@12.27.2:
- resolution: {integrity: sha512-B55gcoL85Mcdt2IEStY5EEAsrMSVE2sI14xQ/uAdPL+mfQxhKKFaEag9JmfxedJOR4vZpBGoPeC/Gm13I/4g5Q==}
+ motion-utils@12.29.2:
+ resolution: {integrity: sha512-G3kc34H2cX2gI63RqU+cZq+zWRRPSsNIOjpdl9TN4AQwC4sgwYPl/Q/Obf/d53nOm569T0fYK+tcoSV50BWx8A==}
- motion@12.29.0:
- resolution: {integrity: sha512-rjB5CP2N9S2ESAyEFnAFMgTec6X8yvfxLNcz8n12gPq3M48R7ZbBeVYkDOTj8SPMwfvGIFI801SiPSr1+HCr9g==}
+ motion@12.29.2:
+ resolution: {integrity: sha512-jMpHdAzEDF1QQ055cB+1lOBLdJ6ialVWl6QQzpJI2OvmHequ7zFVHM2mx0HNAy+Tu4omUlApfC+4vnkX0geEOg==}
peerDependencies:
'@emotion/is-prop-valid': '*'
react: ^18.0.0 || ^19.0.0
@@ -8216,7 +8276,7 @@ snapshots:
'@ai-sdk/provider-utils': 4.0.9(zod@4.3.6)
zod: 4.3.6
- '@ai-sdk/gateway@3.0.22(zod@4.3.6)':
+ '@ai-sdk/gateway@3.0.23(zod@4.3.6)':
dependencies:
'@ai-sdk/provider': 3.0.5
'@ai-sdk/provider-utils': 4.0.9(zod@4.3.6)
@@ -10004,39 +10064,39 @@ snapshots:
'@better-fetch/fetch@1.1.21': {}
- '@biomejs/biome@2.3.12':
+ '@biomejs/biome@2.3.13':
optionalDependencies:
- '@biomejs/cli-darwin-arm64': 2.3.12
- '@biomejs/cli-darwin-x64': 2.3.12
- '@biomejs/cli-linux-arm64': 2.3.12
- '@biomejs/cli-linux-arm64-musl': 2.3.12
- '@biomejs/cli-linux-x64': 2.3.12
- '@biomejs/cli-linux-x64-musl': 2.3.12
- '@biomejs/cli-win32-arm64': 2.3.12
- '@biomejs/cli-win32-x64': 2.3.12
+ '@biomejs/cli-darwin-arm64': 2.3.13
+ '@biomejs/cli-darwin-x64': 2.3.13
+ '@biomejs/cli-linux-arm64': 2.3.13
+ '@biomejs/cli-linux-arm64-musl': 2.3.13
+ '@biomejs/cli-linux-x64': 2.3.13
+ '@biomejs/cli-linux-x64-musl': 2.3.13
+ '@biomejs/cli-win32-arm64': 2.3.13
+ '@biomejs/cli-win32-x64': 2.3.13
- '@biomejs/cli-darwin-arm64@2.3.12':
+ '@biomejs/cli-darwin-arm64@2.3.13':
optional: true
- '@biomejs/cli-darwin-x64@2.3.12':
+ '@biomejs/cli-darwin-x64@2.3.13':
optional: true
- '@biomejs/cli-linux-arm64-musl@2.3.12':
+ '@biomejs/cli-linux-arm64-musl@2.3.13':
optional: true
- '@biomejs/cli-linux-arm64@2.3.12':
+ '@biomejs/cli-linux-arm64@2.3.13':
optional: true
- '@biomejs/cli-linux-x64-musl@2.3.12':
+ '@biomejs/cli-linux-x64-musl@2.3.13':
optional: true
- '@biomejs/cli-linux-x64@2.3.12':
+ '@biomejs/cli-linux-x64@2.3.13':
optional: true
- '@biomejs/cli-win32-arm64@2.3.12':
+ '@biomejs/cli-win32-arm64@2.3.13':
optional: true
- '@biomejs/cli-win32-x64@2.3.12':
+ '@biomejs/cli-win32-x64@2.3.13':
optional: true
'@chevrotain/cst-dts-gen@10.5.0':
@@ -13208,18 +13268,18 @@ snapshots:
agent-base@7.1.4: {}
- ai-sdk-ollama@3.3.0(ai@6.0.49(zod@4.3.6))(zod@4.3.6):
+ ai-sdk-ollama@3.3.0(ai@6.0.50(zod@4.3.6))(zod@4.3.6):
dependencies:
'@ai-sdk/provider': 3.0.5
'@ai-sdk/provider-utils': 4.0.9(zod@4.3.6)
- ai: 6.0.49(zod@4.3.6)
+ ai: 6.0.50(zod@4.3.6)
ollama: 0.6.3
transitivePeerDependencies:
- zod
- ai@6.0.49(zod@4.3.6):
+ ai@6.0.50(zod@4.3.6):
dependencies:
- '@ai-sdk/gateway': 3.0.22(zod@4.3.6)
+ '@ai-sdk/gateway': 3.0.23(zod@4.3.6)
'@ai-sdk/provider': 3.0.5
'@ai-sdk/provider-utils': 4.0.9(zod@4.3.6)
'@opentelemetry/api': 1.9.0
@@ -14347,10 +14407,10 @@ snapshots:
forwarded@0.2.0: {}
- framer-motion@12.29.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3):
+ framer-motion@12.29.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3):
dependencies:
- motion-dom: 12.29.0
- motion-utils: 12.27.2
+ motion-dom: 12.29.2
+ motion-utils: 12.29.2
tslib: 2.8.1
optionalDependencies:
react: 19.2.3
@@ -15175,15 +15235,15 @@ snapshots:
moo@0.5.2: {}
- motion-dom@12.29.0:
+ motion-dom@12.29.2:
dependencies:
- motion-utils: 12.27.2
+ motion-utils: 12.29.2
- motion-utils@12.27.2: {}
+ motion-utils@12.29.2: {}
- motion@12.29.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3):
+ motion@12.29.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3):
dependencies:
- framer-motion: 12.29.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
+ framer-motion: 12.29.2(react-dom@19.2.3(react@19.2.3))(react@19.2.3)
tslib: 2.8.1
optionalDependencies:
react: 19.2.3
diff --git a/src/integrations/orpc/services/printer.ts b/src/integrations/orpc/services/printer.ts
index 8b2d237bc..90d072ddc 100644
--- a/src/integrations/orpc/services/printer.ts
+++ b/src/integrations/orpc/services/printer.ts
@@ -8,7 +8,7 @@ import { env } from "@/utils/env";
import { generatePrinterToken } from "@/utils/printer-token";
import { getStorageService, uploadFile } from "./storage";
-const SCREENSHOT_TTL = 1000 * 60 * 60; // 1 hour
+const SCREENSHOT_TTL = 1000 * 60 * 60 * 6; // 6 hours
async function getBrowser(): Promise {
const args = ["--disable-dev-shm-usage", "--disable-features=LocalNetworkAccessChecks,site-per-process,FedCm"];
@@ -39,18 +39,6 @@ export const printerService = {
return data;
},
- chromeDebug: async (): Promise => {
- const browser = await getBrowser();
-
- const page = await browser.newPage();
-
- await page.goto("https://www.google.com");
-
- await page.pdf({ path: `screenshot-${Date.now()}.pdf` });
-
- await browser.disconnect();
- },
-
/**
* Generates a PDF from a resume and uploads it to storage.
*
@@ -208,6 +196,8 @@ export const printerService = {
},
});
+ await page.close();
+
// Step 7: Upload the generated PDF to storage
const result = await uploadFile({
userId,
@@ -221,7 +211,7 @@ export const printerService = {
} catch (error) {
throw new ORPCError("INTERNAL_SERVER_ERROR", error as Error);
} finally {
- if (browser) await browser.close();
+ if (browser?.connected) await browser.disconnect();
}
},
@@ -289,6 +279,8 @@ export const printerService = {
const screenshotBuffer = await page.screenshot({ type: "webp", quality: 80 });
+ await page.close();
+
const result = await uploadFile({
userId,
resumeId: id,
@@ -301,7 +293,7 @@ export const printerService = {
} catch (error) {
throw new ORPCError("INTERNAL_SERVER_ERROR", error as Error);
} finally {
- if (browser) await browser.close();
+ if (browser?.connected) await browser.disconnect();
}
},
};