diff --git a/frontend/src/LandingPage.jsx b/frontend/src/LandingPage.jsx index 3f90794..49e94bb 100644 --- a/frontend/src/LandingPage.jsx +++ b/frontend/src/LandingPage.jsx @@ -2,6 +2,7 @@ import ProfileInfoCard from "./components/Cards/ProfileinfoCard"; import React, { useContext, useState, useEffect } from "react"; import { APP_FEATURES, STATS, HOW_IT_WORKS_STEPS } from "./utils/data"; import { useNavigate } from "react-router-dom"; +import { Link } from "react-router-dom"; import { LuSparkles, @@ -1050,7 +1051,7 @@ const LandingPage = () => {

© {new Date().getFullYear()} PrepPilot AI. All rights reserved.

- Privacy Policy + Privacy Policy Terms of Service
diff --git a/frontend/src/pages/Privacy/PrivacyPolicy.jsx b/frontend/src/pages/Privacy/PrivacyPolicy.jsx new file mode 100644 index 0000000..ee6234b --- /dev/null +++ b/frontend/src/pages/Privacy/PrivacyPolicy.jsx @@ -0,0 +1,325 @@ +import React, { useState, useEffect } from "react"; +import { motion } from "framer-motion"; +import { + LuChevronDown, + LuShield, + LuEye, + LuLock, + LuUsers, + LuGlobe, + LuArrowLeft, +} from "react-icons/lu"; +import { useNavigate } from "react-router-dom"; + +const PrivacyPolicy = () => { + const navigate = useNavigate(); + const [openSections, setOpenSections] = useState(new Set(["intro"])); + const [activeSection, setActiveSection] = useState("intro"); + + const toggleSection = (id) => { + const newSet = new Set(openSections); + if (newSet.has(id)) { + newSet.delete(id); + } else { + newSet.add(id); + } + setOpenSections(newSet); + }; + + const scrollToSection = (id) => { + const element = document.getElementById(id); + if (element) { + const offset = 100; + const bodyRect = document.body.getBoundingClientRect().top; + const elementPosition = element.getBoundingClientRect().top; + const offsetPosition = elementPosition - bodyRect - offset; + + window.scrollTo({ + top: offsetPosition, + behavior: "smooth", + }); + + setActiveSection(id); + } + }; + + // Scroll Spy (Active Section Highlight) + useEffect(() => { + const observer = new IntersectionObserver( + (entries) => { + entries.forEach((entry) => { + if (entry.isIntersecting) { + setActiveSection(entry.target.id); + } + }); + }, + { threshold: 0.4, rootMargin: "-80px 0px -20% 0px" }, + ); + + const sections = document.querySelectorAll(".policy-section"); + sections.forEach((section) => observer.observe(section)); + + return () => observer.disconnect(); + }, []); + + const sectionsData = [ + { + id: "intro", + title: "Introduction", + icon: , + }, + { + id: "information-collected", + title: "Information We Collect", + icon: , + }, + { + id: "how-we-use", + title: "How We Use Your Information", + icon: , + }, + { + id: "sharing", + title: "Sharing of Information", + icon: , + }, + { + id: "security", + title: "Data Security", + icon: , + }, + { + id: "your-rights", + title: "Your Rights and Choices", + icon: , + }, + { + id: "cookies", + title: "Cookies and Tracking", + icon: , + }, + { + id: "children", + title: "Children's Privacy", + icon: , + }, + { + id: "international", + title: "International Data Transfers", + icon: , + }, + { + id: "changes", + title: "Changes to This Policy", + icon: , + }, + ]; + + return ( +
+ {/* Navbar */} +
+
+
navigate("/")} + > + Logo + + PrepPilot AI + +
+ + navigate("/")} + className="flex items-center gap-2 text-sm px-6 py-2.5 rounded-full border border-white/20 hover:bg-white/10 transition-all" + > + + Back to Home + +
+
+ +
+ {/* LEFT SIDEBAR - Table of Contents */} +
+
+
+

+ + Table of Contents +

+
+ + + +
+ Last Updated: June 20, 2026 +
+
+
+ + {/* RIGHT MAIN CONTENT */} +
+
+
+ + + Legal + +
+

+ Privacy Policy +

+

+ We take your privacy seriously. This policy explains how we + protect and handle your data. +

+
+ + {/* Sections */} +
+ {sectionsData.map((sec, index) => { + const fullSection = { + id: sec.id, + title: sec.title, + icon: sec.icon, + content: getSectionContent(sec.id), + }; + + return ( +
+ + + {openSections.has(fullSection.id) && ( +
+ {fullSection.content} +
+ )} +
+ ); + })} +
+ + {/* Final Contact Box */} +
+

+ Questions About Your Privacy? +

+

+ Our team is here to help. Reach out to us anytime. +

+ + Contact Privacy Team + +
+
+
+ + {/* Footer */} +
+

© {new Date().getFullYear()} PrepPilot AI. All rights reserved.

+
+
+ ); +}; + +// Helper function to keep content clean +const getSectionContent = (id) => { + switch (id) { + case "intro": + return ( +
+

+ At PrepPilot AI, we are committed to protecting your privacy and + ensuring the security of your personal information. This Privacy + Policy explains how we collect, use, disclose, and safeguard your + data when you use our platform. +

+

Last Updated: June 20, 2026

+
+ ); + case "information-collected": + return ( +
+
+

+ Personal Information +

+
    +
  • Name, email address, and profile information
  • +
  • Resume/CV data and interview preparation notes
  • +
  • Authentication details (via Google, GitHub, or email)
  • +
+
+
+

+ Usage & Technical Data +

+
    +
  • IP address, browser type, and device information
  • +
  • Pages visited, time spent, and interaction data
  • +
  • Coding session logs and AI conversation history
  • +
  • Performance analytics on practice sessions
  • +
+
+
+ ); + // ... (Add other sections similarly - I kept it short for brevity. You can expand from previous version) + default: + return

Content for {id} goes here.

; + } +}; + +export default PrivacyPolicy;