From a38f2a8bb4c2d4df9338e1b2b3cf8084bb69258e Mon Sep 17 00:00:00 2001 From: SujalTripathi Date: Wed, 29 Apr 2026 21:56:41 +0530 Subject: [PATCH] feat: restyle terms and privacy pages to match site violet/slate theme --- app/privacy/page.tsx | 221 +++++++++++++++++++++++++++++++++++ app/terms/page.tsx | 234 ++++++++++++++++++++----------------- components/ScrollToTop.tsx | 31 +++++ 3 files changed, 379 insertions(+), 107 deletions(-) create mode 100644 app/privacy/page.tsx create mode 100644 components/ScrollToTop.tsx diff --git a/app/privacy/page.tsx b/app/privacy/page.tsx new file mode 100644 index 0000000..6906168 --- /dev/null +++ b/app/privacy/page.tsx @@ -0,0 +1,221 @@ +import type { Metadata } from "next"; +import Link from "next/link"; + +export const metadata: Metadata = { + title: "Privacy Policy", + description: + "Privacy Policy for Parampara โ€” how we collect, use and protect your data.", +}; + +const sections = [ + { + id: "information-collected", + title: "Information We Collect", + icon: "๐Ÿ“‹", + content: + "We collect information you provide directly: name, email address, and profile details when you register. We also collect usage data such as pages visited, session bookings made, and interactions with instructor profiles. Payment information is handled entirely by our third-party payment processors (Razorpay/Stripe) and is never stored on our servers.", + }, + { + id: "how-we-use", + title: "How We Use Your Data", + icon: "โš™๏ธ", + content: + "We use your data to provide and improve the Parampara platform, process session bookings, send booking confirmations and reminders, display your profile to relevant instructors or learners, and improve our recommendation algorithms. We do not use your data for advertising purposes.", + }, + { + id: "data-sharing", + title: "Data Sharing", + icon: "๐Ÿค", + content: + "We do not sell your personal data to third parties. We share data only with: instructors when you book their session (name and contact for coordination), payment processors to complete transactions, and service providers who help us operate the platform under strict confidentiality agreements.", + }, + { + id: "cookies", + title: "Cookies", + icon: "๐Ÿช", + content: + "Parampara uses essential cookies to keep you logged in and remember your preferences. We may use analytics cookies to understand how users navigate the platform and improve the experience. You can disable cookies in your browser settings, though some platform features may not work correctly without them.", + }, + { + id: "your-rights", + title: "Your Rights", + icon: "โœŠ", + content: + "You have the right to access the personal data we hold about you, request correction of inaccurate data, request deletion of your account and associated data, withdraw consent for data processing at any time, and lodge a complaint with a data protection authority. To exercise these rights, contact us via GitHub.", + }, + { + id: "data-security", + title: "Data Security", + icon: "๐Ÿ›ก๏ธ", + content: + "We implement industry-standard security measures to protect your data including HTTPS encryption for all data in transit, secure password hashing, and regular security audits. However, no system is 100% secure and we encourage you to use a strong, unique password for your Parampara account.", + }, + { + id: "childrens-privacy", + title: "Children's Privacy", + icon: "๐Ÿ‘ถ", + content: + "Parampara is not intended for children under the age of 13. We do not knowingly collect personal information from children. If you believe a child has provided us with personal information, please contact us immediately and we will delete it promptly.", + }, + { + id: "policy-changes", + title: "Changes to This Policy", + icon: "๐Ÿ”„", + content: + "We may update this Privacy Policy from time to time. When we do, we will update the 'Last updated' date at the top of this page. We encourage you to review this page periodically. Continued use of Parampara after any changes constitutes acceptance of the updated policy.", + }, + { + id: "contact", + title: "Contact Us", + icon: "๐Ÿ’ฌ", + content: + "If you have questions about this Privacy Policy or how we handle your data, please reach out via our GitHub repository. We are committed to addressing privacy concerns transparently and promptly.", + }, +]; + +export default function PrivacyPage() { + return ( +
+ {/* Hero */} +
+
+ + Home + + / + Privacy Policy +
+ +
+
+

+ Legal +

+

+ Privacy Policy +

+

+ Last updated: April 2026 ยท Effective immediately +

+
+ + View Terms of Service โ†’ + +
+
+ + {/* Intro Banner */} +
+
+
+ ๐Ÿ”’ +
+

+ Your Privacy Matters +

+

+ At Parampara, your privacy is deeply important to us. This + policy explains what data we collect, how we use it, and your + rights as a user of our cultural learning platform. +

+
+
+
+
+ + {/* Main Layout โ€” Sidebar + Content */} +
+ {/* Sticky Sidebar */} + + + {/* Sections */} +
+ {sections.map((section, index) => ( +
+
+ + {index + 1} + + {section.icon} +

+ {section.title} +

+
+

+ {section.content} +

+
+ ))} + + {/* Bottom Note */} +
+

+ This Privacy Policy was last reviewed in{" "} + April 2026. Parampara + is open-source under the{" "} + Apache 2.0 License. + Questions? Reach us on{" "} + + GitHub โ†— + +

+
+
+
+ + {/* Bottom CTA */} +
+
+
+

+ Ready to begin? +

+

+ Browse instructors and start your cultural learning journey rooted + in authentic Indian heritage. +

+
+ + Browse classes + +
+
+
+ ); +} diff --git a/app/terms/page.tsx b/app/terms/page.tsx index 8b0fb8d..fce05ab 100644 --- a/app/terms/page.tsx +++ b/app/terms/page.tsx @@ -76,134 +76,154 @@ const sections = [ title: "Contact Us", icon: "๐Ÿ’ฌ", content: - "If you have any questions about these Terms of Service, please reach out to us through the platform. We are committed to resolving any concerns in a fair and timely manner.", + "If you have any questions about these Terms of Service, please reach out to us through our GitHub repository. We are committed to resolving any concerns in a fair and timely manner.", }, ]; export default function TermsPage() { return ( -
+
{/* Hero */} -
-
-
- - Home - - / - +
+
+ + Home + + / + Terms of Service +
+ +
+
+

+ Legal +

+

Terms of Service - +

+

+ Last updated: April 2026 ยท Effective immediately + upon use of the platform +

-
+ + View Privacy Policy โ†’ + +
+
+ + {/* Intro Banner */} +
+
+
+ ๐ŸŒ
- - ๐Ÿ“œ Legal Document - -

- Terms of Service -

-

- Last updated: April 2026 ยท Effective - immediately upon use +

+ Welcome to Parampara +

+

+ Please read these terms carefully before using the platform. By + using Parampara, you agree to these terms in full. These terms + govern your relationship with Parampara as a learner, + instructor, or visitor.

- - ๐Ÿ”’ View Privacy Policy โ†’ -
- {/* Main Layout */} -
-
- {/* Sticky Sidebar โ€” Table of Contents */} - - - {/* Content */} -
- {/* Intro Banner */} -
-
- ๐ŸŒ -
-

- Welcome to Parampara -

-

- Please read these terms carefully before using the platform. - By using Parampara, you agree to these terms in full. These - terms govern your relationship with Parampara as a learner, - instructor, or visitor. -

-
-
-
- - {/* Sections */} -
+ {/* Main Layout โ€” Sidebar + Content */} +
+ {/* Sticky Sidebar */} + + + {/* Sections */} +
+ {sections.map((section, index) => ( +
+
+ + {index + 1} + + {section.icon} +

+ {section.title} +

+
+

+ {section.content} +

+
+ ))} - {/* Section Content */} -
-

- {section.content} -

-
+ {/* Bottom Note */} +
+

+ These Terms were last reviewed in{" "} + April 2026. Parampara + is open-source under the{" "} + Apache 2.0 License. + Questions? Reach us on{" "} + + GitHub โ†— + +

+
+
+
- {/* Divider (not on last) */} - {index < sections.length - 1 && ( -
- )} -
- ))} -
+ {/* Bottom CTA */} +
+
+
+

+ Ready to get started? +

+

+ Browse instructors and begin your cultural learning journey today. +

+ + Browse classes +
-
+
); } diff --git a/components/ScrollToTop.tsx b/components/ScrollToTop.tsx new file mode 100644 index 0000000..ca8be46 --- /dev/null +++ b/components/ScrollToTop.tsx @@ -0,0 +1,31 @@ +"use client"; + +import { useEffect, useState } from "react"; + +export function ScrollToTop() { + const [visible, setVisible] = useState(false); + + useEffect(() => { + const handleScroll = () => { + setVisible(window.scrollY > 300); + }; + window.addEventListener("scroll", handleScroll); + return () => window.removeEventListener("scroll", handleScroll); + }, []); + + const scrollToTop = () => { + window.scrollTo({ top: 0, behavior: "smooth" }); + }; + + if (!visible) return null; + + return ( + + ); +}