-
+ {/* Badge */}
+
+
+
+ {t('home.heroBadge', 'Free Online PDF Tools')}
+
+
+
+
{t('home.hero')}
-
+
{t('home.heroSub')}
diff --git a/frontend/src/styles/global.css b/frontend/src/styles/global.css
index 6b06ffe..c9fd3cc 100644
--- a/frontend/src/styles/global.css
+++ b/frontend/src/styles/global.css
@@ -116,15 +116,15 @@
/* Hero upload zone — larger variant for the homepage */
.hero-upload-zone {
- @apply flex flex-col items-center justify-center rounded-2xl border-2 border-dashed border-slate-300 bg-gradient-to-b from-slate-50 to-white p-10 text-center transition-all duration-200 cursor-pointer sm:p-12 dark:border-slate-600 dark:from-slate-800/60 dark:to-slate-800/30;
+ @apply flex flex-col items-center justify-center rounded-3xl border-2 border-dashed border-slate-300 bg-gradient-to-b from-slate-50 to-white p-10 text-center transition-all duration-300 ease-in-out cursor-pointer sm:p-14 dark:border-slate-600 dark:from-slate-800/60 dark:to-slate-800/30;
}
.hero-upload-zone:hover {
- @apply border-primary-400 bg-gradient-to-b from-primary-50 to-white shadow-lg dark:border-primary-500 dark:from-primary-900/20 dark:to-slate-800/30;
+ @apply border-primary-400 bg-gradient-to-b from-primary-50 to-white shadow-xl -translate-y-0.5 dark:border-primary-500 dark:from-primary-900/20 dark:to-slate-800/30;
}
.hero-upload-zone.drag-active {
- @apply border-primary-500 bg-gradient-to-b from-primary-100 to-primary-50 ring-2 ring-primary-300 shadow-xl dark:border-primary-400 dark:from-primary-900/30 dark:to-primary-900/10 dark:ring-primary-600;
+ @apply border-primary-500 bg-gradient-to-b from-primary-100 to-primary-50/80 ring-2 ring-primary-300 shadow-2xl scale-[1.02] dark:border-primary-400 dark:from-primary-900/30 dark:to-primary-900/10 dark:ring-primary-600;
}
/* Modal animations */
diff --git a/frontend/tailwind.config.js b/frontend/tailwind.config.js
index 5f12e73..d7214f7 100644
--- a/frontend/tailwind.config.js
+++ b/frontend/tailwind.config.js
@@ -38,6 +38,17 @@ export default {
sans: ['Inter', 'Tajawal', 'system-ui', 'sans-serif'],
arabic: ['Tajawal', 'Inter', 'sans-serif'],
},
+ borderRadius: {
+ '3xl': '1.5rem',
+ '4xl': '2rem',
+ },
+ boxShadow: {
+ 'glow': '0 0 20px -4px rgba(59, 130, 246, 0.4)',
+ 'glow-lg': '0 0 40px -8px rgba(59, 130, 246, 0.5)',
+ },
+ transitionTimingFunction: {
+ 'smooth': 'cubic-bezier(0.4, 0, 0.2, 1)',
+ },
},
},
plugins: [],
From cf03d963fc18b8fc5d03ca010bc30753cdff77f9 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Thu, 2 Apr 2026 23:06:47 +0000
Subject: [PATCH 3/5] chore: restore build artifacts not meant for commit
Agent-Logs-Url: https://github.com/aborayan2022/SaaS-PDF/sessions/a233a493-2fcf-4025-bd7f-68446c105e28
Co-authored-by: aborayan2022 <119736744+aborayan2022@users.noreply.github.com>
---
frontend/package-lock.json | 428 ++++++++++++++++++++++++++++
frontend/public/sitemap.xml | 8 +-
frontend/public/sitemaps/blog.xml | 10 +-
frontend/public/sitemaps/seo.xml | 376 ++++++++++++------------
frontend/public/sitemaps/static.xml | 24 +-
frontend/public/sitemaps/tools.xml | 265 ++++++++++++++++-
6 files changed, 898 insertions(+), 213 deletions(-)
diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index 56b6cbe..f1800a6 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -2240,6 +2240,29 @@
"license": "MIT",
"optional": true
},
+ "node_modules/base64-js": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
+ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT",
+ "optional": true,
+ "peer": true
+ },
"node_modules/baseline-browser-mapping": {
"version": "2.10.0",
"resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.0.tgz",
@@ -2276,6 +2299,20 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/bl": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
+ "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "peer": true,
+ "dependencies": {
+ "buffer": "^5.5.0",
+ "inherits": "^2.0.4",
+ "readable-stream": "^3.4.0"
+ }
+ },
"node_modules/brace-expansion": {
"version": "1.1.12",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
@@ -2334,6 +2371,33 @@
"node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
}
},
+ "node_modules/buffer": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
+ "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT",
+ "optional": true,
+ "peer": true,
+ "dependencies": {
+ "base64-js": "^1.3.1",
+ "ieee754": "^1.1.13"
+ }
+ },
"node_modules/call-bind-apply-helpers": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
@@ -2378,6 +2442,23 @@
],
"license": "CC-BY-4.0"
},
+ "node_modules/canvas": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/canvas/-/canvas-3.2.1.tgz",
+ "integrity": "sha512-ej1sPFR5+0YWtaVp6S1N1FVz69TQCqmrkGeRvQxZeAB1nAIcjNTHVwrZtYtWFFBmQsF40/uDLehsW5KuYC99mg==",
+ "dev": true,
+ "hasInstallScript": true,
+ "license": "MIT",
+ "optional": true,
+ "peer": true,
+ "dependencies": {
+ "node-addon-api": "^7.0.0",
+ "prebuild-install": "^7.1.3"
+ },
+ "engines": {
+ "node": "^18.12.0 || >= 20.9.0"
+ }
+ },
"node_modules/chai": {
"version": "6.2.2",
"resolved": "https://registry.npmjs.org/chai/-/chai-6.2.2.tgz",
@@ -2426,6 +2507,15 @@
"node": ">= 6"
}
},
+ "node_modules/chownr": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
+ "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==",
+ "dev": true,
+ "license": "ISC",
+ "optional": true,
+ "peer": true
+ },
"node_modules/cli-width": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz",
@@ -2685,6 +2775,36 @@
"devOptional": true,
"license": "MIT"
},
+ "node_modules/decompress-response": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz",
+ "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "peer": true,
+ "dependencies": {
+ "mimic-response": "^3.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/deep-extend": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
+ "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "peer": true,
+ "engines": {
+ "node": ">=4.0.0"
+ }
+ },
"node_modules/delayed-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
@@ -2795,6 +2915,18 @@
"devOptional": true,
"license": "MIT"
},
+ "node_modules/end-of-stream": {
+ "version": "1.4.5",
+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz",
+ "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "peer": true,
+ "dependencies": {
+ "once": "^1.4.0"
+ }
+ },
"node_modules/entities": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz",
@@ -2975,6 +3107,18 @@
"node": ">=0.10.0"
}
},
+ "node_modules/expand-template": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz",
+ "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==",
+ "dev": true,
+ "license": "(MIT OR WTFPL)",
+ "optional": true,
+ "peer": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/expect-type": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.3.0.tgz",
@@ -3402,6 +3546,15 @@
"url": "https://github.com/sponsors/rawify"
}
},
+ "node_modules/fs-constants": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
+ "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "peer": true
+ },
"node_modules/fs-minipass": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz",
@@ -3552,6 +3705,15 @@
"node": ">= 0.4"
}
},
+ "node_modules/github-from-package": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz",
+ "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "peer": true
+ },
"node_modules/glob": {
"version": "7.2.3",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
@@ -3757,6 +3919,29 @@
"node": ">=0.10.0"
}
},
+ "node_modules/ieee754": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
+ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "BSD-3-Clause",
+ "optional": true,
+ "peer": true
+ },
"node_modules/indent-string": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
@@ -3786,6 +3971,15 @@
"license": "ISC",
"optional": true
},
+ "node_modules/ini": {
+ "version": "1.3.8",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
+ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
+ "dev": true,
+ "license": "ISC",
+ "optional": true,
+ "peer": true
+ },
"node_modules/invariant": {
"version": "2.2.4",
"resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
@@ -4113,6 +4307,21 @@
"node": ">= 0.6"
}
},
+ "node_modules/mimic-response": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz",
+ "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "peer": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/min-indent": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz",
@@ -4136,6 +4345,18 @@
"node": "*"
}
},
+ "node_modules/minimist": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "peer": true,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/minipass": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz",
@@ -4193,6 +4414,15 @@
"node": ">=10"
}
},
+ "node_modules/mkdirp-classic": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz",
+ "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "peer": true
+ },
"node_modules/ms": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
@@ -4293,6 +4523,54 @@
"node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
}
},
+ "node_modules/napi-build-utils": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-2.0.0.tgz",
+ "integrity": "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "peer": true
+ },
+ "node_modules/node-abi": {
+ "version": "3.87.0",
+ "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.87.0.tgz",
+ "integrity": "sha512-+CGM1L1CgmtheLcBuleyYOn7NWPVu0s0EJH2C4puxgEZb9h8QpR9G2dBfZJOAUhi7VQxuBPMd0hiISWcTyiYyQ==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "peer": true,
+ "dependencies": {
+ "semver": "^7.3.5"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/node-abi/node_modules/semver": {
+ "version": "7.7.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
+ "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==",
+ "dev": true,
+ "license": "ISC",
+ "optional": true,
+ "peer": true,
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/node-addon-api": {
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz",
+ "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "peer": true
+ },
"node_modules/node-fetch": {
"version": "2.7.0",
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
@@ -4711,6 +4989,36 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/prebuild-install": {
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.3.tgz",
+ "integrity": "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==",
+ "deprecated": "No longer maintained. Please contact the author of the relevant native addon; alternatives are available.",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "peer": true,
+ "dependencies": {
+ "detect-libc": "^2.0.0",
+ "expand-template": "^2.0.3",
+ "github-from-package": "0.0.0",
+ "minimist": "^1.2.3",
+ "mkdirp-classic": "^0.5.3",
+ "napi-build-utils": "^2.0.0",
+ "node-abi": "^3.3.0",
+ "pump": "^3.0.0",
+ "rc": "^1.2.7",
+ "simple-get": "^4.0.0",
+ "tar-fs": "^2.0.0",
+ "tunnel-agent": "^0.6.0"
+ },
+ "bin": {
+ "prebuild-install": "bin.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/pretty-format": {
"version": "27.5.1",
"resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz",
@@ -4765,6 +5073,19 @@
"url": "https://github.com/sponsors/lupomontero"
}
},
+ "node_modules/pump": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz",
+ "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "peer": true,
+ "dependencies": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ },
"node_modules/punycode": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
@@ -4803,6 +5124,24 @@
],
"license": "MIT"
},
+ "node_modules/rc": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
+ "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
+ "dev": true,
+ "license": "(BSD-2-Clause OR MIT OR Apache-2.0)",
+ "optional": true,
+ "peer": true,
+ "dependencies": {
+ "deep-extend": "^0.6.0",
+ "ini": "~1.3.0",
+ "minimist": "^1.2.0",
+ "strip-json-comments": "~2.0.1"
+ },
+ "bin": {
+ "rc": "cli.js"
+ }
+ },
"node_modules/react": {
"version": "18.3.1",
"resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz",
@@ -5259,6 +5598,34 @@
"license": "MIT",
"optional": true
},
+ "node_modules/simple-get": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz",
+ "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "license": "MIT",
+ "optional": true,
+ "peer": true,
+ "dependencies": {
+ "decompress-response": "^6.0.0",
+ "once": "^1.3.1",
+ "simple-concat": "^1.0.0"
+ }
+ },
"node_modules/sonner": {
"version": "1.7.4",
"resolved": "https://registry.npmjs.org/sonner/-/sonner-1.7.4.tgz",
@@ -5371,6 +5738,18 @@
"node": ">=8"
}
},
+ "node_modules/strip-json-comments": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+ "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "peer": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/sucrase": {
"version": "3.35.1",
"resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.1.tgz",
@@ -5484,6 +5863,40 @@
"node": ">=10"
}
},
+ "node_modules/tar-fs": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.4.tgz",
+ "integrity": "sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "peer": true,
+ "dependencies": {
+ "chownr": "^1.1.1",
+ "mkdirp-classic": "^0.5.2",
+ "pump": "^3.0.0",
+ "tar-stream": "^2.1.4"
+ }
+ },
+ "node_modules/tar-stream": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz",
+ "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==",
+ "dev": true,
+ "license": "MIT",
+ "optional": true,
+ "peer": true,
+ "dependencies": {
+ "bl": "^4.0.3",
+ "end-of-stream": "^1.4.1",
+ "fs-constants": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^3.1.1"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/tar/node_modules/chownr": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
@@ -5671,6 +6084,21 @@
"integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
"license": "0BSD"
},
+ "node_modules/tunnel-agent": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+ "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "optional": true,
+ "peer": true,
+ "dependencies": {
+ "safe-buffer": "^5.0.1"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
"node_modules/type-fest": {
"version": "5.4.4",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-5.4.4.tgz",
diff --git a/frontend/public/sitemap.xml b/frontend/public/sitemap.xml
index 7c148c1..2a6a2b4 100644
--- a/frontend/public/sitemap.xml
+++ b/frontend/public/sitemap.xml
@@ -2,18 +2,18 @@
https://dociva.io/sitemaps/static.xml
- 2026-04-02
+ 2026-04-01
https://dociva.io/sitemaps/blog.xml
- 2026-04-02
+ 2026-04-01
https://dociva.io/sitemaps/tools.xml
- 2026-04-02
+ 2026-04-01
https://dociva.io/sitemaps/seo.xml
- 2026-04-02
+ 2026-04-01
diff --git a/frontend/public/sitemaps/blog.xml b/frontend/public/sitemaps/blog.xml
index b02b1e6..1f71b5a 100644
--- a/frontend/public/sitemaps/blog.xml
+++ b/frontend/public/sitemaps/blog.xml
@@ -2,31 +2,31 @@
https://dociva.io/blog/how-to-compress-pdf-online
- 2026-04-02
+ 2026-04-01
monthly
0.6
https://dociva.io/blog/convert-images-without-losing-quality
- 2026-04-02
+ 2026-04-01
monthly
0.6
https://dociva.io/blog/ocr-extract-text-from-images
- 2026-04-02
+ 2026-04-01
monthly
0.6
https://dociva.io/blog/merge-split-pdf-files
- 2026-04-02
+ 2026-04-01
monthly
0.6
https://dociva.io/blog/ai-chat-with-pdf-documents
- 2026-04-02
+ 2026-04-01
monthly
0.6
diff --git a/frontend/public/sitemaps/seo.xml b/frontend/public/sitemaps/seo.xml
index 7cdc976..cb8f496 100644
--- a/frontend/public/sitemaps/seo.xml
+++ b/frontend/public/sitemaps/seo.xml
@@ -2,1129 +2,1129 @@
https://dociva.io/pdf-to-word
- 2026-04-02
+ 2026-04-01
weekly
0.88
https://dociva.io/ar/pdf-to-word
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/word-to-pdf
- 2026-04-02
+ 2026-04-01
weekly
0.88
https://dociva.io/ar/word-to-pdf
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/compress-pdf-online
- 2026-04-02
+ 2026-04-01
weekly
0.88
https://dociva.io/ar/compress-pdf-online
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/convert-jpg-to-pdf
- 2026-04-02
+ 2026-04-01
weekly
0.88
https://dociva.io/ar/convert-jpg-to-pdf
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/merge-pdf-files
- 2026-04-02
+ 2026-04-01
weekly
0.88
https://dociva.io/ar/merge-pdf-files
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/remove-pdf-password
- 2026-04-02
+ 2026-04-01
weekly
0.88
https://dociva.io/ar/remove-pdf-password
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/pdf-to-word-editable
- 2026-04-02
+ 2026-04-01
weekly
0.88
https://dociva.io/ar/pdf-to-word-editable
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/convert-pdf-to-text
- 2026-04-02
+ 2026-04-01
weekly
0.88
https://dociva.io/ar/convert-pdf-to-text
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/split-pdf-online
- 2026-04-02
+ 2026-04-01
weekly
0.88
https://dociva.io/ar/split-pdf-online
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/jpg-to-pdf
- 2026-04-02
+ 2026-04-01
weekly
0.88
https://dociva.io/ar/jpg-to-pdf
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/png-to-pdf
- 2026-04-02
+ 2026-04-01
weekly
0.88
https://dociva.io/ar/png-to-pdf
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/images-to-pdf-online
- 2026-04-02
+ 2026-04-01
weekly
0.88
https://dociva.io/ar/images-to-pdf-online
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/pdf-to-jpg
- 2026-04-02
+ 2026-04-01
weekly
0.88
https://dociva.io/ar/pdf-to-jpg
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/pdf-to-png
- 2026-04-02
+ 2026-04-01
weekly
0.88
https://dociva.io/ar/pdf-to-png
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/compress-pdf-for-email
- 2026-04-02
+ 2026-04-01
weekly
0.88
https://dociva.io/ar/compress-pdf-for-email
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/compress-scanned-pdf
- 2026-04-02
+ 2026-04-01
weekly
0.88
https://dociva.io/ar/compress-scanned-pdf
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/merge-pdf-online-free
- 2026-04-02
+ 2026-04-01
weekly
0.88
https://dociva.io/ar/merge-pdf-online-free
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/combine-pdf-files
- 2026-04-02
+ 2026-04-01
weekly
0.88
https://dociva.io/ar/combine-pdf-files
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/extract-pages-from-pdf
- 2026-04-02
+ 2026-04-01
weekly
0.88
https://dociva.io/ar/extract-pages-from-pdf
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/reorder-pdf-pages
- 2026-04-02
+ 2026-04-01
weekly
0.88
https://dociva.io/ar/reorder-pdf-pages
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/rotate-pdf-pages
- 2026-04-02
+ 2026-04-01
weekly
0.88
https://dociva.io/ar/rotate-pdf-pages
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/add-page-numbers-to-pdf
- 2026-04-02
+ 2026-04-01
weekly
0.88
https://dociva.io/ar/add-page-numbers-to-pdf
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/protect-pdf-with-password
- 2026-04-02
+ 2026-04-01
weekly
0.88
https://dociva.io/ar/protect-pdf-with-password
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/unlock-pdf-online
- 2026-04-02
+ 2026-04-01
weekly
0.88
https://dociva.io/ar/unlock-pdf-online
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/watermark-pdf-online
- 2026-04-02
+ 2026-04-01
weekly
0.88
https://dociva.io/ar/watermark-pdf-online
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/remove-watermark-from-pdf
- 2026-04-02
+ 2026-04-01
weekly
0.88
https://dociva.io/ar/remove-watermark-from-pdf
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/edit-pdf-online-free
- 2026-04-02
+ 2026-04-01
weekly
0.88
https://dociva.io/ar/edit-pdf-online-free
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/pdf-to-excel-online
- 2026-04-02
+ 2026-04-01
weekly
0.88
https://dociva.io/ar/pdf-to-excel-online
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/extract-tables-from-pdf
- 2026-04-02
+ 2026-04-01
weekly
0.88
https://dociva.io/ar/extract-tables-from-pdf
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/html-to-pdf-online
- 2026-04-02
+ 2026-04-01
weekly
0.88
https://dociva.io/ar/html-to-pdf-online
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/scan-pdf-to-text
- 2026-04-02
+ 2026-04-01
weekly
0.88
https://dociva.io/ar/scan-pdf-to-text
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/chat-with-pdf
- 2026-04-02
+ 2026-04-01
weekly
0.88
https://dociva.io/ar/chat-with-pdf
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/summarize-pdf-online
- 2026-04-02
+ 2026-04-01
weekly
0.88
https://dociva.io/ar/summarize-pdf-online
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/translate-pdf-online
- 2026-04-02
+ 2026-04-01
weekly
0.88
https://dociva.io/ar/translate-pdf-online
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/convert-image-to-pdf
- 2026-04-02
+ 2026-04-01
weekly
0.88
https://dociva.io/ar/convert-image-to-pdf
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/convert-webp-to-jpg
- 2026-04-02
+ 2026-04-01
weekly
0.88
https://dociva.io/ar/convert-webp-to-jpg
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/resize-image-online
- 2026-04-02
+ 2026-04-01
weekly
0.88
https://dociva.io/ar/resize-image-online
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/compress-image-online
- 2026-04-02
+ 2026-04-01
weekly
0.88
https://dociva.io/ar/compress-image-online
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/remove-image-background
- 2026-04-02
+ 2026-04-01
weekly
0.88
https://dociva.io/ar/remove-image-background
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/pdf-to-word-editable-free
- 2026-04-02
+ 2026-04-01
weekly
0.88
https://dociva.io/ar/pdf-to-word-editable-free
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/compress-pdf-to-100kb
- 2026-04-02
+ 2026-04-01
weekly
0.88
https://dociva.io/ar/compress-pdf-to-100kb
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/ai-extract-text-from-pdf
- 2026-04-02
+ 2026-04-01
weekly
0.88
https://dociva.io/ar/ai-extract-text-from-pdf
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/pdf-to-excel-accurate-free
- 2026-04-02
+ 2026-04-01
weekly
0.88
https://dociva.io/ar/pdf-to-excel-accurate-free
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/split-pdf-online-free
- 2026-04-02
+ 2026-04-01
weekly
0.88
https://dociva.io/ar/split-pdf-online-free
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/compress-pdf-online-free
- 2026-04-02
+ 2026-04-01
weekly
0.88
https://dociva.io/ar/compress-pdf-online-free
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/unlock-pdf-online-free
- 2026-04-02
+ 2026-04-01
weekly
0.88
https://dociva.io/ar/unlock-pdf-online-free
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/summarize-pdf-ai
- 2026-04-02
+ 2026-04-01
weekly
0.88
https://dociva.io/ar/summarize-pdf-ai
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/convert-pdf-to-text-ai
- 2026-04-02
+ 2026-04-01
weekly
0.88
https://dociva.io/ar/convert-pdf-to-text-ai
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/pdf-to-jpg-high-quality
- 2026-04-02
+ 2026-04-01
weekly
0.88
https://dociva.io/ar/pdf-to-jpg-high-quality
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/jpg-to-pdf-online-free
- 2026-04-02
+ 2026-04-01
weekly
0.88
https://dociva.io/ar/jpg-to-pdf-online-free
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/reduce-pdf-size-for-email
- 2026-04-02
+ 2026-04-01
weekly
0.88
https://dociva.io/ar/reduce-pdf-size-for-email
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/ocr-for-scanned-pdfs
- 2026-04-02
+ 2026-04-01
weekly
0.88
https://dociva.io/ar/ocr-for-scanned-pdfs
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/remove-watermark-from-pdf-online
- 2026-04-02
+ 2026-04-01
weekly
0.88
https://dociva.io/ar/remove-watermark-from-pdf-online
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/add-watermark-to-pdf-online
- 2026-04-02
+ 2026-04-01
weekly
0.88
https://dociva.io/ar/add-watermark-to-pdf-online
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/repair-corrupted-pdf-online
- 2026-04-02
+ 2026-04-01
weekly
0.88
https://dociva.io/ar/repair-corrupted-pdf-online
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/rotate-pdf-pages-online
- 2026-04-02
+ 2026-04-01
weekly
0.88
https://dociva.io/ar/rotate-pdf-pages-online
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/reorder-pdf-pages-online
- 2026-04-02
+ 2026-04-01
weekly
0.88
https://dociva.io/ar/reorder-pdf-pages-online
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/pdf-to-png-online
- 2026-04-02
+ 2026-04-01
weekly
0.88
https://dociva.io/ar/pdf-to-png-online
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/images-to-pdf-multiple
- 2026-04-02
+ 2026-04-01
weekly
0.88
https://dociva.io/ar/images-to-pdf-multiple
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/split-pdf-by-range-online
- 2026-04-02
+ 2026-04-01
weekly
0.88
https://dociva.io/ar/split-pdf-by-range-online
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/compress-scanned-pdf-online
- 2026-04-02
+ 2026-04-01
weekly
0.88
https://dociva.io/ar/compress-scanned-pdf-online
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/pdf-metadata-editor-online
- 2026-04-02
+ 2026-04-01
weekly
0.88
https://dociva.io/ar/pdf-metadata-editor-online
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/add-page-numbers-to-pdf-online
- 2026-04-02
+ 2026-04-01
weekly
0.88
https://dociva.io/ar/add-page-numbers-to-pdf-online
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/protect-pdf-with-password-online
- 2026-04-02
+ 2026-04-01
weekly
0.88
https://dociva.io/ar/protect-pdf-with-password-online
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/unlock-encrypted-pdf-online
- 2026-04-02
+ 2026-04-01
weekly
0.88
https://dociva.io/ar/unlock-encrypted-pdf-online
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/ocr-table-extraction-from-pdf
- 2026-04-02
+ 2026-04-01
weekly
0.88
https://dociva.io/ar/ocr-table-extraction-from-pdf
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/pdf-to-excel-converter-online
- 2026-04-02
+ 2026-04-01
weekly
0.88
https://dociva.io/ar/pdf-to-excel-converter-online
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/extract-text-from-protected-pdf
- 2026-04-02
+ 2026-04-01
weekly
0.88
https://dociva.io/ar/extract-text-from-protected-pdf
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/bulk-convert-pdf-to-word
- 2026-04-02
+ 2026-04-01
weekly
0.88
https://dociva.io/ar/bulk-convert-pdf-to-word
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/compress-pdf-for-web-upload
- 2026-04-02
+ 2026-04-01
weekly
0.88
https://dociva.io/ar/compress-pdf-for-web-upload
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/ocr-multi-language-pdf
- 2026-04-02
+ 2026-04-01
weekly
0.88
https://dociva.io/ar/ocr-multi-language-pdf
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/summarize-long-pdf-ai
- 2026-04-02
+ 2026-04-01
weekly
0.88
https://dociva.io/ar/summarize-long-pdf-ai
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/convert-pdf-to-ppt-online
- 2026-04-02
+ 2026-04-01
weekly
0.88
https://dociva.io/ar/convert-pdf-to-ppt-online
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/pdf-to-pptx-free-online
- 2026-04-02
+ 2026-04-01
weekly
0.88
https://dociva.io/ar/pdf-to-pptx-free-online
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/دمج-ملفات-pdf-مجاناً
- 2026-04-02
+ 2026-04-01
weekly
0.88
https://dociva.io/ar/دمج-ملفات-pdf-مجاناً
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/ضغط-بي-دي-اف-اونلاين
- 2026-04-02
+ 2026-04-01
weekly
0.88
https://dociva.io/ar/ضغط-بي-دي-اف-اونلاين
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/تحويل-pdf-الى-word-قابل-للتعديل
- 2026-04-02
+ 2026-04-01
weekly
0.88
https://dociva.io/ar/تحويل-pdf-الى-word-قابل-للتعديل
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/تحويل-jpg-الى-pdf-اونلاين
- 2026-04-02
+ 2026-04-01
weekly
0.88
https://dociva.io/ar/تحويل-jpg-الى-pdf-اونلاين
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/فصل-صفحات-pdf-اونلاين
- 2026-04-02
+ 2026-04-01
weekly
0.88
https://dociva.io/ar/فصل-صفحات-pdf-اونلاين
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/ازالة-كلمة-مرور-من-pdf
- 2026-04-02
+ 2026-04-01
weekly
0.88
https://dociva.io/ar/ازالة-كلمة-مرور-من-pdf
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/تحويل-pdf-الى-نص-باستخدام-ocr
- 2026-04-02
+ 2026-04-01
weekly
0.88
https://dociva.io/ar/تحويل-pdf-الى-نص-باستخدام-ocr
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/تحويل-pdf-الى-excel-اونلاين
- 2026-04-02
+ 2026-04-01
weekly
0.88
https://dociva.io/ar/تحويل-pdf-الى-excel-اونلاين
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/تحويل-pdf-الى-صور
- 2026-04-02
+ 2026-04-01
weekly
0.88
https://dociva.io/ar/تحويل-pdf-الى-صور
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/best-pdf-tools
- 2026-04-02
+ 2026-04-01
weekly
0.82
https://dociva.io/ar/best-pdf-tools
- 2026-04-02
+ 2026-04-01
weekly
0.74
https://dociva.io/free-pdf-tools-online
- 2026-04-02
+ 2026-04-01
weekly
0.82
https://dociva.io/ar/free-pdf-tools-online
- 2026-04-02
+ 2026-04-01
weekly
0.74
https://dociva.io/convert-files-online
- 2026-04-02
+ 2026-04-01
weekly
0.82
https://dociva.io/ar/convert-files-online
- 2026-04-02
+ 2026-04-01
weekly
0.74
https://dociva.io/pdf-converter-tools
- 2026-04-02
+ 2026-04-01
weekly
0.82
https://dociva.io/ar/pdf-converter-tools
- 2026-04-02
+ 2026-04-01
weekly
0.74
https://dociva.io/secure-pdf-tools
- 2026-04-02
+ 2026-04-01
weekly
0.82
https://dociva.io/ar/secure-pdf-tools
- 2026-04-02
+ 2026-04-01
weekly
0.74
https://dociva.io/ai-document-tools
- 2026-04-02
+ 2026-04-01
weekly
0.82
https://dociva.io/ar/ai-document-tools
- 2026-04-02
+ 2026-04-01
weekly
0.74
https://dociva.io/image-to-pdf-tools
- 2026-04-02
+ 2026-04-01
weekly
0.82
https://dociva.io/ar/image-to-pdf-tools
- 2026-04-02
+ 2026-04-01
weekly
0.74
https://dociva.io/online-image-tools
- 2026-04-02
+ 2026-04-01
weekly
0.82
https://dociva.io/ar/online-image-tools
- 2026-04-02
+ 2026-04-01
weekly
0.74
https://dociva.io/office-to-pdf-tools
- 2026-04-02
+ 2026-04-01
weekly
0.82
https://dociva.io/ar/office-to-pdf-tools
- 2026-04-02
+ 2026-04-01
weekly
0.74
https://dociva.io/scanned-document-tools
- 2026-04-02
+ 2026-04-01
weekly
0.82
https://dociva.io/ar/scanned-document-tools
- 2026-04-02
+ 2026-04-01
weekly
0.74
https://dociva.io/arabic-pdf-tools
- 2026-04-02
+ 2026-04-01
weekly
0.82
https://dociva.io/ar/arabic-pdf-tools
- 2026-04-02
+ 2026-04-01
weekly
0.74
diff --git a/frontend/public/sitemaps/static.xml b/frontend/public/sitemaps/static.xml
index c9f53b2..a168dd8 100644
--- a/frontend/public/sitemaps/static.xml
+++ b/frontend/public/sitemaps/static.xml
@@ -2,61 +2,55 @@
https://dociva.io/
- 2026-04-02
+ 2026-04-01
daily
1.0
https://dociva.io/tools
- 2026-04-02
+ 2026-04-01
weekly
0.8
https://dociva.io/about
- 2026-04-02
+ 2026-04-01
monthly
0.4
https://dociva.io/contact
- 2026-04-02
+ 2026-04-01
monthly
0.4
https://dociva.io/privacy
- 2026-04-02
+ 2026-04-01
yearly
0.3
https://dociva.io/terms
- 2026-04-02
+ 2026-04-01
yearly
0.3
https://dociva.io/pricing
- 2026-04-02
- monthly
- 0.7
-
-
- https://dociva.io/pricing-transparency
- 2026-04-02
+ 2026-04-01
monthly
0.7
https://dociva.io/blog
- 2026-04-02
+ 2026-04-01
weekly
0.6
https://dociva.io/developers
- 2026-04-02
+ 2026-04-01
monthly
0.5
diff --git a/frontend/public/sitemaps/tools.xml b/frontend/public/sitemaps/tools.xml
index 97fd210..cd41531 100644
--- a/frontend/public/sitemaps/tools.xml
+++ b/frontend/public/sitemaps/tools.xml
@@ -1,4 +1,267 @@
-
+
+ https://dociva.io/tools/pdf-to-word
+ 2026-04-01
+ weekly
+ 0.9
+
+
+ https://dociva.io/tools/word-to-pdf
+ 2026-04-01
+ weekly
+ 0.9
+
+
+ https://dociva.io/tools/compress-pdf
+ 2026-04-01
+ weekly
+ 0.9
+
+
+ https://dociva.io/tools/merge-pdf
+ 2026-04-01
+ weekly
+ 0.9
+
+
+ https://dociva.io/tools/split-pdf
+ 2026-04-01
+ weekly
+ 0.8
+
+
+ https://dociva.io/tools/rotate-pdf
+ 2026-04-01
+ weekly
+ 0.7
+
+
+ https://dociva.io/tools/pdf-to-images
+ 2026-04-01
+ weekly
+ 0.8
+
+
+ https://dociva.io/tools/images-to-pdf
+ 2026-04-01
+ weekly
+ 0.8
+
+
+ https://dociva.io/tools/watermark-pdf
+ 2026-04-01
+ weekly
+ 0.7
+
+
+ https://dociva.io/tools/protect-pdf
+ 2026-04-01
+ weekly
+ 0.8
+
+
+ https://dociva.io/tools/unlock-pdf
+ 2026-04-01
+ weekly
+ 0.8
+
+
+ https://dociva.io/tools/page-numbers
+ 2026-04-01
+ weekly
+ 0.7
+
+
+ https://dociva.io/tools/pdf-editor
+ 2026-04-01
+ weekly
+ 0.8
+
+
+ https://dociva.io/tools/pdf-flowchart
+ 2026-04-01
+ weekly
+ 0.7
+
+
+ https://dociva.io/tools/pdf-to-excel
+ 2026-04-01
+ weekly
+ 0.8
+
+
+ https://dociva.io/tools/remove-watermark-pdf
+ 2026-04-01
+ weekly
+ 0.7
+
+
+ https://dociva.io/tools/reorder-pdf
+ 2026-04-01
+ weekly
+ 0.7
+
+
+ https://dociva.io/tools/extract-pages
+ 2026-04-01
+ weekly
+ 0.7
+
+
+ https://dociva.io/tools/image-converter
+ 2026-04-01
+ weekly
+ 0.8
+
+
+ https://dociva.io/tools/image-resize
+ 2026-04-01
+ weekly
+ 0.8
+
+
+ https://dociva.io/tools/compress-image
+ 2026-04-01
+ weekly
+ 0.8
+
+
+ https://dociva.io/tools/ocr
+ 2026-04-01
+ weekly
+ 0.8
+
+
+ https://dociva.io/tools/remove-background
+ 2026-04-01
+ weekly
+ 0.8
+
+
+ https://dociva.io/tools/image-to-svg
+ 2026-04-01
+ weekly
+ 0.8
+
+
+ https://dociva.io/tools/html-to-pdf
+ 2026-04-01
+ weekly
+ 0.7
+
+
+ https://dociva.io/tools/chat-pdf
+ 2026-04-01
+ weekly
+ 0.8
+
+
+ https://dociva.io/tools/summarize-pdf
+ 2026-04-01
+ weekly
+ 0.8
+
+
+ https://dociva.io/tools/translate-pdf
+ 2026-04-01
+ weekly
+ 0.8
+
+
+ https://dociva.io/tools/extract-tables
+ 2026-04-01
+ weekly
+ 0.8
+
+
+ https://dociva.io/tools/qr-code
+ 2026-04-01
+ weekly
+ 0.7
+
+
+ https://dociva.io/tools/video-to-gif
+ 2026-04-01
+ weekly
+ 0.7
+
+
+ https://dociva.io/tools/word-counter
+ 2026-04-01
+ weekly
+ 0.6
+
+
+ https://dociva.io/tools/text-cleaner
+ 2026-04-01
+ weekly
+ 0.6
+
+
+ https://dociva.io/tools/pdf-to-pptx
+ 2026-04-01
+ weekly
+ 0.8
+
+
+ https://dociva.io/tools/excel-to-pdf
+ 2026-04-01
+ weekly
+ 0.8
+
+
+ https://dociva.io/tools/pptx-to-pdf
+ 2026-04-01
+ weekly
+ 0.8
+
+
+ https://dociva.io/tools/sign-pdf
+ 2026-04-01
+ weekly
+ 0.8
+
+
+ https://dociva.io/tools/crop-pdf
+ 2026-04-01
+ weekly
+ 0.7
+
+
+ https://dociva.io/tools/flatten-pdf
+ 2026-04-01
+ weekly
+ 0.7
+
+
+ https://dociva.io/tools/repair-pdf
+ 2026-04-01
+ weekly
+ 0.7
+
+
+ https://dociva.io/tools/pdf-metadata
+ 2026-04-01
+ weekly
+ 0.6
+
+
+ https://dociva.io/tools/image-crop
+ 2026-04-01
+ weekly
+ 0.7
+
+
+ https://dociva.io/tools/image-rotate-flip
+ 2026-04-01
+ weekly
+ 0.7
+
+
+ https://dociva.io/tools/barcode-generator
+ 2026-04-01
+ weekly
+ 0.7
+
From f55d726df259c5a3c7781a917f464684438bed25 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Fri, 3 Apr 2026 00:32:09 +0000
Subject: [PATCH 4/5] =?UTF-8?q?feat:=20comprehensive=20SaaS=20UI=20redesig?=
=?UTF-8?q?n=20=E2=80=94=20Hero=20mesh,=20ToolCard=20accent,=20How-it-Work?=
=?UTF-8?q?s,=20bottom=20CTA=20banner,=20Header=20CTA?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Agent-Logs-Url: https://github.com/aborayan2022/SaaS-PDF/sessions/b8e294e5-c1b0-4395-a003-cfa8f003bf27
Co-authored-by: aborayan2022 <119736744+aborayan2022@users.noreply.github.com>
---
frontend/package-lock.json | 428 ------------------
frontend/src/components/layout/Header.tsx | 71 ++-
.../src/components/shared/HeroUploadZone.tsx | 108 +++--
frontend/src/components/shared/ToolCard.tsx | 31 +-
frontend/src/pages/HomePage.tsx | 345 ++++++++++----
frontend/src/styles/global.css | 75 ++-
frontend/tailwind.config.js | 34 ++
7 files changed, 506 insertions(+), 586 deletions(-)
diff --git a/frontend/package-lock.json b/frontend/package-lock.json
index f1800a6..56b6cbe 100644
--- a/frontend/package-lock.json
+++ b/frontend/package-lock.json
@@ -2240,29 +2240,6 @@
"license": "MIT",
"optional": true
},
- "node_modules/base64-js": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
- "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "MIT",
- "optional": true,
- "peer": true
- },
"node_modules/baseline-browser-mapping": {
"version": "2.10.0",
"resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.0.tgz",
@@ -2299,20 +2276,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/bl": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
- "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "peer": true,
- "dependencies": {
- "buffer": "^5.5.0",
- "inherits": "^2.0.4",
- "readable-stream": "^3.4.0"
- }
- },
"node_modules/brace-expansion": {
"version": "1.1.12",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
@@ -2371,33 +2334,6 @@
"node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
}
},
- "node_modules/buffer": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
- "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "MIT",
- "optional": true,
- "peer": true,
- "dependencies": {
- "base64-js": "^1.3.1",
- "ieee754": "^1.1.13"
- }
- },
"node_modules/call-bind-apply-helpers": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
@@ -2442,23 +2378,6 @@
],
"license": "CC-BY-4.0"
},
- "node_modules/canvas": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/canvas/-/canvas-3.2.1.tgz",
- "integrity": "sha512-ej1sPFR5+0YWtaVp6S1N1FVz69TQCqmrkGeRvQxZeAB1nAIcjNTHVwrZtYtWFFBmQsF40/uDLehsW5KuYC99mg==",
- "dev": true,
- "hasInstallScript": true,
- "license": "MIT",
- "optional": true,
- "peer": true,
- "dependencies": {
- "node-addon-api": "^7.0.0",
- "prebuild-install": "^7.1.3"
- },
- "engines": {
- "node": "^18.12.0 || >= 20.9.0"
- }
- },
"node_modules/chai": {
"version": "6.2.2",
"resolved": "https://registry.npmjs.org/chai/-/chai-6.2.2.tgz",
@@ -2507,15 +2426,6 @@
"node": ">= 6"
}
},
- "node_modules/chownr": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
- "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==",
- "dev": true,
- "license": "ISC",
- "optional": true,
- "peer": true
- },
"node_modules/cli-width": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz",
@@ -2775,36 +2685,6 @@
"devOptional": true,
"license": "MIT"
},
- "node_modules/decompress-response": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz",
- "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "peer": true,
- "dependencies": {
- "mimic-response": "^3.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/deep-extend": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
- "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "peer": true,
- "engines": {
- "node": ">=4.0.0"
- }
- },
"node_modules/delayed-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
@@ -2915,18 +2795,6 @@
"devOptional": true,
"license": "MIT"
},
- "node_modules/end-of-stream": {
- "version": "1.4.5",
- "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz",
- "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "peer": true,
- "dependencies": {
- "once": "^1.4.0"
- }
- },
"node_modules/entities": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz",
@@ -3107,18 +2975,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/expand-template": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz",
- "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==",
- "dev": true,
- "license": "(MIT OR WTFPL)",
- "optional": true,
- "peer": true,
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/expect-type": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.3.0.tgz",
@@ -3546,15 +3402,6 @@
"url": "https://github.com/sponsors/rawify"
}
},
- "node_modules/fs-constants": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
- "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "peer": true
- },
"node_modules/fs-minipass": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz",
@@ -3705,15 +3552,6 @@
"node": ">= 0.4"
}
},
- "node_modules/github-from-package": {
- "version": "0.0.0",
- "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz",
- "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "peer": true
- },
"node_modules/glob": {
"version": "7.2.3",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
@@ -3919,29 +3757,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/ieee754": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
- "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "BSD-3-Clause",
- "optional": true,
- "peer": true
- },
"node_modules/indent-string": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
@@ -3971,15 +3786,6 @@
"license": "ISC",
"optional": true
},
- "node_modules/ini": {
- "version": "1.3.8",
- "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
- "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
- "dev": true,
- "license": "ISC",
- "optional": true,
- "peer": true
- },
"node_modules/invariant": {
"version": "2.2.4",
"resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
@@ -4307,21 +4113,6 @@
"node": ">= 0.6"
}
},
- "node_modules/mimic-response": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz",
- "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "peer": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/min-indent": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz",
@@ -4345,18 +4136,6 @@
"node": "*"
}
},
- "node_modules/minimist": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
- "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "peer": true,
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
"node_modules/minipass": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz",
@@ -4414,15 +4193,6 @@
"node": ">=10"
}
},
- "node_modules/mkdirp-classic": {
- "version": "0.5.3",
- "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz",
- "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "peer": true
- },
"node_modules/ms": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
@@ -4523,54 +4293,6 @@
"node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
}
},
- "node_modules/napi-build-utils": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-2.0.0.tgz",
- "integrity": "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "peer": true
- },
- "node_modules/node-abi": {
- "version": "3.87.0",
- "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.87.0.tgz",
- "integrity": "sha512-+CGM1L1CgmtheLcBuleyYOn7NWPVu0s0EJH2C4puxgEZb9h8QpR9G2dBfZJOAUhi7VQxuBPMd0hiISWcTyiYyQ==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "peer": true,
- "dependencies": {
- "semver": "^7.3.5"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/node-abi/node_modules/semver": {
- "version": "7.7.4",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
- "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==",
- "dev": true,
- "license": "ISC",
- "optional": true,
- "peer": true,
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/node-addon-api": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz",
- "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "peer": true
- },
"node_modules/node-fetch": {
"version": "2.7.0",
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
@@ -4989,36 +4711,6 @@
"dev": true,
"license": "MIT"
},
- "node_modules/prebuild-install": {
- "version": "7.1.3",
- "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.3.tgz",
- "integrity": "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==",
- "deprecated": "No longer maintained. Please contact the author of the relevant native addon; alternatives are available.",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "peer": true,
- "dependencies": {
- "detect-libc": "^2.0.0",
- "expand-template": "^2.0.3",
- "github-from-package": "0.0.0",
- "minimist": "^1.2.3",
- "mkdirp-classic": "^0.5.3",
- "napi-build-utils": "^2.0.0",
- "node-abi": "^3.3.0",
- "pump": "^3.0.0",
- "rc": "^1.2.7",
- "simple-get": "^4.0.0",
- "tar-fs": "^2.0.0",
- "tunnel-agent": "^0.6.0"
- },
- "bin": {
- "prebuild-install": "bin.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/pretty-format": {
"version": "27.5.1",
"resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz",
@@ -5073,19 +4765,6 @@
"url": "https://github.com/sponsors/lupomontero"
}
},
- "node_modules/pump": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz",
- "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "peer": true,
- "dependencies": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- },
"node_modules/punycode": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
@@ -5124,24 +4803,6 @@
],
"license": "MIT"
},
- "node_modules/rc": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
- "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
- "dev": true,
- "license": "(BSD-2-Clause OR MIT OR Apache-2.0)",
- "optional": true,
- "peer": true,
- "dependencies": {
- "deep-extend": "^0.6.0",
- "ini": "~1.3.0",
- "minimist": "^1.2.0",
- "strip-json-comments": "~2.0.1"
- },
- "bin": {
- "rc": "cli.js"
- }
- },
"node_modules/react": {
"version": "18.3.1",
"resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz",
@@ -5598,34 +5259,6 @@
"license": "MIT",
"optional": true
},
- "node_modules/simple-get": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz",
- "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "MIT",
- "optional": true,
- "peer": true,
- "dependencies": {
- "decompress-response": "^6.0.0",
- "once": "^1.3.1",
- "simple-concat": "^1.0.0"
- }
- },
"node_modules/sonner": {
"version": "1.7.4",
"resolved": "https://registry.npmjs.org/sonner/-/sonner-1.7.4.tgz",
@@ -5738,18 +5371,6 @@
"node": ">=8"
}
},
- "node_modules/strip-json-comments": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
- "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "peer": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/sucrase": {
"version": "3.35.1",
"resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.1.tgz",
@@ -5863,40 +5484,6 @@
"node": ">=10"
}
},
- "node_modules/tar-fs": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.4.tgz",
- "integrity": "sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "peer": true,
- "dependencies": {
- "chownr": "^1.1.1",
- "mkdirp-classic": "^0.5.2",
- "pump": "^3.0.0",
- "tar-stream": "^2.1.4"
- }
- },
- "node_modules/tar-stream": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz",
- "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "peer": true,
- "dependencies": {
- "bl": "^4.0.3",
- "end-of-stream": "^1.4.1",
- "fs-constants": "^1.0.0",
- "inherits": "^2.0.3",
- "readable-stream": "^3.1.1"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/tar/node_modules/chownr": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
@@ -6084,21 +5671,6 @@
"integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
"license": "0BSD"
},
- "node_modules/tunnel-agent": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
- "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==",
- "dev": true,
- "license": "Apache-2.0",
- "optional": true,
- "peer": true,
- "dependencies": {
- "safe-buffer": "^5.0.1"
- },
- "engines": {
- "node": "*"
- }
- },
"node_modules/type-fest": {
"version": "5.4.4",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-5.4.4.tgz",
diff --git a/frontend/src/components/layout/Header.tsx b/frontend/src/components/layout/Header.tsx
index a61c5b3..e9421cb 100644
--- a/frontend/src/components/layout/Header.tsx
+++ b/frontend/src/components/layout/Header.tsx
@@ -1,7 +1,7 @@
import { useState, useEffect, useRef } from 'react';
import { Link } from 'react-router-dom';
import { useTranslation } from 'react-i18next';
-import { FileText, Moon, Sun, Menu, X, ChevronDown, UserRound, Coins } from 'lucide-react';
+import { FileText, Moon, Sun, Menu, X, ChevronDown, UserRound, Coins, ArrowRight } from 'lucide-react';
import { useAuthStore } from '@/stores/authStore';
import { ensureLanguageResources } from '@/i18n';
interface LangOption {
@@ -67,49 +67,54 @@ export default function Header() {
};
return (
-