From d7c752b45986232cc386a5ffe8e351e97f936594 Mon Sep 17 00:00:00 2001 From: Zaiba Machhaliya Date: Wed, 17 Jun 2026 12:43:36 +0530 Subject: [PATCH 1/3] feat: add back to top scroll button --- app/layout.tsx | 6 ++-- components/BackToTop.jsx | 49 ++++++++++++++++++++++++++++++ package-lock.json | 64 ++++++---------------------------------- package.json | 2 +- 4 files changed, 63 insertions(+), 58 deletions(-) create mode 100644 components/BackToTop.jsx diff --git a/app/layout.tsx b/app/layout.tsx index 8abdb9f..8c37c80 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -6,6 +6,8 @@ import LightRays from "../components/LightRays"; import Navbar from "../components/Navbar"; import { PostHogProvider } from "./providers"; import { Toaster } from "sonner"; +import BackToTop from '../components/BackToTop'; + const SchibstedGrotesk = Schibsted_Grotesk({ variable: "--font-schibsted-grotesk", @@ -56,10 +58,10 @@ export default function RootLayout({
{children}
+ ); -} - +} \ No newline at end of file diff --git a/components/BackToTop.jsx b/components/BackToTop.jsx new file mode 100644 index 0000000..cfb9b1c --- /dev/null +++ b/components/BackToTop.jsx @@ -0,0 +1,49 @@ +"use client"; + +import { useEffect, useState } from "react"; +import { ArrowUp } from "lucide-react"; + +export default function BackToTop() { + const [visible, setVisible] = useState(false); + + useEffect(() => { + const handleScroll = () => { + setVisible(window.scrollY > 200); + }; + + window.addEventListener("scroll", handleScroll); + + return () => { + window.removeEventListener("scroll", handleScroll); + }; + }, []); + + const scrollToTop = () => { + window.scrollTo({ + top: 0, + behavior: "smooth", + }); + }; + + if (!visible) return null; + + return ( + + ); +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 01861c7..9f8b4cc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,7 +15,7 @@ "clsx": "^2.1.1", "lucide-react": "^0.562.0", "mongodb": "^7.2.0", - "mongoose": "^9.1.4", + "mongoose": "^9.7.0", "next": "16.1.3", "ogl": "^1.0.11", "posthog-js": "^1.331.0", @@ -6497,9 +6497,9 @@ } }, "node_modules/kareem": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/kareem/-/kareem-3.0.0.tgz", - "integrity": "sha512-RKhaOBSPN8L7y4yAgNhDT2602G5FD6QbOIISbjN9D6mjHPeqeg7K+EB5IGSU5o81/X2Gzm3ICnAvQW3x3OP8HA==", + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/kareem/-/kareem-3.3.0.tgz", + "integrity": "sha512-kpSuLD3/7RenBnjnJdOHXCKC8dTd1JzeOiJhN0necWWci6cC+qX+VuwPnMVgb+a4+KNJSfgqahpnfWaeDXCimw==", "license": "Apache-2.0", "engines": { "node": ">=18.0.0" @@ -7074,13 +7074,13 @@ } }, "node_modules/mongoose": { - "version": "9.1.4", - "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-9.1.4.tgz", - "integrity": "sha512-V8JIyoWKWW+R2COlOsh6gaYw9TvczSiP/cN3Yuk1pv7ws5VNFAy5GPrK8jfz9tVYovmqdWOJRurMjL4ilYn9wA==", + "version": "9.7.0", + "resolved": "https://registry.npmmirror.com/mongoose/-/mongoose-9.7.0.tgz", + "integrity": "sha512-pkrLZ6U41pD4Ai0ju/FYL7o5I5k+rV3RZINQTG937hbhnLGKRuqqYm1Dlt/kTQ+M4FHijzV6JawzsdHKRGt7QA==", "license": "MIT", "dependencies": { - "kareem": "3.0.0", - "mongodb": "~7.0", + "kareem": "3.3.0", + "mongodb": "~7.2", "mpath": "0.9.0", "mquery": "6.0.0", "ms": "2.1.3", @@ -7094,52 +7094,6 @@ "url": "https://opencollective.com/mongoose" } }, - "node_modules/mongoose/node_modules/mongodb": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-7.0.0.tgz", - "integrity": "sha512-vG/A5cQrvGGvZm2mTnCSz1LUcbOPl83hfB6bxULKQ8oFZauyox/2xbZOoGNl+64m8VBrETkdGCDBdOsCr3F3jg==", - "license": "Apache-2.0", - "dependencies": { - "@mongodb-js/saslprep": "^1.3.0", - "bson": "^7.0.0", - "mongodb-connection-string-url": "^7.0.0" - }, - "engines": { - "node": ">=20.19.0" - }, - "peerDependencies": { - "@aws-sdk/credential-providers": "^3.806.0", - "@mongodb-js/zstd": "^7.0.0", - "gcp-metadata": "^7.0.1", - "kerberos": "^7.0.0", - "mongodb-client-encryption": ">=7.0.0 <7.1.0", - "snappy": "^7.3.2", - "socks": "^2.8.6" - }, - "peerDependenciesMeta": { - "@aws-sdk/credential-providers": { - "optional": true - }, - "@mongodb-js/zstd": { - "optional": true - }, - "gcp-metadata": { - "optional": true - }, - "kerberos": { - "optional": true - }, - "mongodb-client-encryption": { - "optional": true - }, - "snappy": { - "optional": true - }, - "socks": { - "optional": true - } - } - }, "node_modules/mpath": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz", diff --git a/package.json b/package.json index a2fc561..b384b07 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "clsx": "^2.1.1", "lucide-react": "^0.562.0", "mongodb": "^7.2.0", - "mongoose": "^9.1.4", + "mongoose": "^9.7.0", "next": "16.1.3", "ogl": "^1.0.11", "posthog-js": "^1.331.0", From 460afe4525f4fa31974e1be534c42091b8779f8c Mon Sep 17 00:00:00 2001 From: Zaiba Machhaliya Date: Wed, 17 Jun 2026 14:48:09 +0530 Subject: [PATCH 2/3] feat: add back-to-top button with accessibility support --- components/BackToTop.jsx | 49 ------------------------------ components/BackToTop.tsx | 49 ++++++++++++++++++++++++++++++ package-lock.json | 64 ++++++++++++++++++++++++++++++++++------ package.json | 2 +- 4 files changed, 105 insertions(+), 59 deletions(-) delete mode 100644 components/BackToTop.jsx create mode 100644 components/BackToTop.tsx diff --git a/components/BackToTop.jsx b/components/BackToTop.jsx deleted file mode 100644 index cfb9b1c..0000000 --- a/components/BackToTop.jsx +++ /dev/null @@ -1,49 +0,0 @@ -"use client"; - -import { useEffect, useState } from "react"; -import { ArrowUp } from "lucide-react"; - -export default function BackToTop() { - const [visible, setVisible] = useState(false); - - useEffect(() => { - const handleScroll = () => { - setVisible(window.scrollY > 200); - }; - - window.addEventListener("scroll", handleScroll); - - return () => { - window.removeEventListener("scroll", handleScroll); - }; - }, []); - - const scrollToTop = () => { - window.scrollTo({ - top: 0, - behavior: "smooth", - }); - }; - - if (!visible) return null; - - return ( - - ); -} \ No newline at end of file diff --git a/components/BackToTop.tsx b/components/BackToTop.tsx new file mode 100644 index 0000000..5b7043c --- /dev/null +++ b/components/BackToTop.tsx @@ -0,0 +1,49 @@ +"use client"; + +import { useEffect, useState } from "react"; +import { ArrowUp } from "lucide-react"; + +export default function BackToTop() { + const [visible, setVisible] = useState(false); + + useEffect(() => { + const handleScroll = () => { + setVisible(window.scrollY > 200); + }; + + window.addEventListener("scroll", handleScroll); + handleScroll(); // ✅ Fix for mount visibility + + return () => { + window.removeEventListener("scroll", handleScroll); + }; + }, []); + + const scrollToTop = () => { + window.scrollTo({ + top: 0, + behavior: "smooth", + }); + }; + + if (!visible) return null; + + return ( + + ); +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 9f8b4cc..01861c7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,7 +15,7 @@ "clsx": "^2.1.1", "lucide-react": "^0.562.0", "mongodb": "^7.2.0", - "mongoose": "^9.7.0", + "mongoose": "^9.1.4", "next": "16.1.3", "ogl": "^1.0.11", "posthog-js": "^1.331.0", @@ -6497,9 +6497,9 @@ } }, "node_modules/kareem": { - "version": "3.3.0", - "resolved": "https://registry.npmmirror.com/kareem/-/kareem-3.3.0.tgz", - "integrity": "sha512-kpSuLD3/7RenBnjnJdOHXCKC8dTd1JzeOiJhN0necWWci6cC+qX+VuwPnMVgb+a4+KNJSfgqahpnfWaeDXCimw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/kareem/-/kareem-3.0.0.tgz", + "integrity": "sha512-RKhaOBSPN8L7y4yAgNhDT2602G5FD6QbOIISbjN9D6mjHPeqeg7K+EB5IGSU5o81/X2Gzm3ICnAvQW3x3OP8HA==", "license": "Apache-2.0", "engines": { "node": ">=18.0.0" @@ -7074,13 +7074,13 @@ } }, "node_modules/mongoose": { - "version": "9.7.0", - "resolved": "https://registry.npmmirror.com/mongoose/-/mongoose-9.7.0.tgz", - "integrity": "sha512-pkrLZ6U41pD4Ai0ju/FYL7o5I5k+rV3RZINQTG937hbhnLGKRuqqYm1Dlt/kTQ+M4FHijzV6JawzsdHKRGt7QA==", + "version": "9.1.4", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-9.1.4.tgz", + "integrity": "sha512-V8JIyoWKWW+R2COlOsh6gaYw9TvczSiP/cN3Yuk1pv7ws5VNFAy5GPrK8jfz9tVYovmqdWOJRurMjL4ilYn9wA==", "license": "MIT", "dependencies": { - "kareem": "3.3.0", - "mongodb": "~7.2", + "kareem": "3.0.0", + "mongodb": "~7.0", "mpath": "0.9.0", "mquery": "6.0.0", "ms": "2.1.3", @@ -7094,6 +7094,52 @@ "url": "https://opencollective.com/mongoose" } }, + "node_modules/mongoose/node_modules/mongodb": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-7.0.0.tgz", + "integrity": "sha512-vG/A5cQrvGGvZm2mTnCSz1LUcbOPl83hfB6bxULKQ8oFZauyox/2xbZOoGNl+64m8VBrETkdGCDBdOsCr3F3jg==", + "license": "Apache-2.0", + "dependencies": { + "@mongodb-js/saslprep": "^1.3.0", + "bson": "^7.0.0", + "mongodb-connection-string-url": "^7.0.0" + }, + "engines": { + "node": ">=20.19.0" + }, + "peerDependencies": { + "@aws-sdk/credential-providers": "^3.806.0", + "@mongodb-js/zstd": "^7.0.0", + "gcp-metadata": "^7.0.1", + "kerberos": "^7.0.0", + "mongodb-client-encryption": ">=7.0.0 <7.1.0", + "snappy": "^7.3.2", + "socks": "^2.8.6" + }, + "peerDependenciesMeta": { + "@aws-sdk/credential-providers": { + "optional": true + }, + "@mongodb-js/zstd": { + "optional": true + }, + "gcp-metadata": { + "optional": true + }, + "kerberos": { + "optional": true + }, + "mongodb-client-encryption": { + "optional": true + }, + "snappy": { + "optional": true + }, + "socks": { + "optional": true + } + } + }, "node_modules/mpath": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz", diff --git a/package.json b/package.json index b384b07..a2fc561 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,7 @@ "clsx": "^2.1.1", "lucide-react": "^0.562.0", "mongodb": "^7.2.0", - "mongoose": "^9.7.0", + "mongoose": "^9.1.4", "next": "16.1.3", "ogl": "^1.0.11", "posthog-js": "^1.331.0", From cdd473d065e5269349a4aa53556c285d0f5b0941 Mon Sep 17 00:00:00 2001 From: Zaiba Machhaliya Date: Thu, 18 Jun 2026 10:51:55 +0530 Subject: [PATCH 3/3] fix: improve back to top button styling and accessibility --- components/BackToTop.tsx | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/components/BackToTop.tsx b/components/BackToTop.tsx index 5b7043c..533f944 100644 --- a/components/BackToTop.tsx +++ b/components/BackToTop.tsx @@ -13,7 +13,7 @@ export default function BackToTop() { window.addEventListener("scroll", handleScroll); handleScroll(); // ✅ Fix for mount visibility - + return () => { window.removeEventListener("scroll", handleScroll); }; @@ -32,18 +32,20 @@ export default function BackToTop() { ); -} \ No newline at end of file +}