diff --git a/src/Routes/Router.tsx b/src/Routes/Router.tsx index 874ef7e7..d742d5cc 100644 --- a/src/Routes/Router.tsx +++ b/src/Routes/Router.tsx @@ -1,4 +1,6 @@ import { Routes, Route } from "react-router-dom"; +import PrivacyPolicy from "../pages/PrivacyPolicy/PrivacyPolicy"; +import TermsAndConditions from "../pages/TermsAndConditions/TermsAndConditions"; import Tracker from "../pages/Tracker/Tracker.tsx"; import About from "../pages/About/About"; import Contact from "../pages/Contact/Contact"; @@ -14,6 +16,8 @@ const Router = () => { return ( } /> + } /> + } /> } /> } /> } /> diff --git a/src/components/Footer.tsx b/src/components/Footer.tsx index 948eafc5..b51037cf 100644 --- a/src/components/Footer.tsx +++ b/src/components/Footer.tsx @@ -7,7 +7,8 @@ import { FaArrowRight, FaEnvelope, FaInfoCircle, - FaShieldAlt, // ✅ Added Privacy Icon + FaShieldAlt, + FaFileContract, } from 'react-icons/fa'; function Footer() { @@ -82,14 +83,21 @@ function Footer() { About - {/* ✅ New Privacy Policy link integration */} - - Privacy Policy - + to="/privacy-policy" + className="inline-flex items-center gap-2 text-sm text-gray-600 dark:text-gray-400 hover:text-indigo-600 dark:hover:text-indigo-400 transition-colors" +> + + Privacy Policy + + + + + Terms & Conditions + diff --git a/src/components/legal/LegalPageLayout.tsx b/src/components/legal/LegalPageLayout.tsx new file mode 100644 index 00000000..0fdf82c4 --- /dev/null +++ b/src/components/legal/LegalPageLayout.tsx @@ -0,0 +1,75 @@ +import { motion } from "framer-motion"; + +interface Section { + title: string; + content: string; +} + +interface LegalPageLayoutProps { + title: string; + intro: string; + sections: Section[]; +} + +const LegalPageLayout = ({ title, intro, sections }: LegalPageLayoutProps) => { + return ( +
+ + {/* Hero */} +
+ + {title} + + + Last updated:{" "} + {new Date().toLocaleDateString("en-US", { + year: "numeric", + month: "long", + day: "numeric", + })} + +
+ + {/* Content */} +
+ + {intro} + + + {sections.map((section, idx) => ( + +

+ {section.title} +

+

+ {section.content} +

+
+ ))} +
+
+ ); +}; + +export default LegalPageLayout; \ No newline at end of file diff --git a/src/pages/PrivacyPolicy/PrivacyPolicy.tsx b/src/pages/PrivacyPolicy/PrivacyPolicy.tsx new file mode 100644 index 00000000..9841fcb4 --- /dev/null +++ b/src/pages/PrivacyPolicy/PrivacyPolicy.tsx @@ -0,0 +1,49 @@ +import LegalPageLayout from "../../components/legal/LegalPageLayout"; + +const sections = [ + { + title: "Information We Collect", + content: + "We collect information you provide directly, such as your GitHub username when using our tracker. We also collect usage data including pages visited and features used to improve our service.", + }, + { + title: "How We Use Your Information", + content: + "We use collected information to provide and improve our services, respond to your requests, and send relevant updates. We do not sell your personal information to third parties.", + }, + { + title: "Data Storage & Security", + content: + "Your data is stored securely using industry-standard encryption. We retain your information only as long as necessary to provide our services or as required by law.", + }, + { + title: "Third-Party Services", + content: + "GitHub Tracker uses the public GitHub API to fetch repository and contribution data. We are not responsible for GitHub's privacy practices. Please review GitHub's Privacy Policy for more information.", + }, + { + title: "Cookies", + content: + "We use session cookies to manage authentication. These cookies are essential for the service to function and are deleted when you close your browser or log out.", + }, + { + title: "Your Rights", + content: + "You have the right to access, correct, or delete your personal data at any time. To exercise these rights, please contact us through the Contact page.", + }, + { + title: "Changes to This Policy", + content: + "We may update this Privacy Policy from time to time. We will notify you of significant changes by posting the new policy on this page with an updated date.", + }, +]; + +const PrivacyPolicy = () => ( + +); + +export default PrivacyPolicy; \ No newline at end of file diff --git a/src/pages/TermsAndConditions/TermsAndConditions.tsx b/src/pages/TermsAndConditions/TermsAndConditions.tsx new file mode 100644 index 00000000..d0dbd73f --- /dev/null +++ b/src/pages/TermsAndConditions/TermsAndConditions.tsx @@ -0,0 +1,49 @@ +import LegalPageLayout from "../../components/legal/LegalPageLayout"; + +const sections = [ + { + title: "Acceptance of Terms", + content: + "By accessing or using GitHub Tracker, you agree to be bound by these Terms and Conditions. If you do not agree to these terms, please do not use our service.", + }, + { + title: "Use of Service", + content: + "GitHub Tracker is provided for personal and professional use to track GitHub activity. You agree not to misuse the service, attempt unauthorized access, or use it for any unlawful purpose.", + }, + { + title: "GitHub API Usage", + content: + "Our service relies on the public GitHub API. Usage is subject to GitHub's Terms of Service and API rate limits. We are not affiliated with or endorsed by GitHub, Inc.", + }, + { + title: "User Accounts", + content: + "You are responsible for maintaining the confidentiality of your account credentials. You agree to notify us immediately of any unauthorized use of your account.", + }, + { + title: "Intellectual Property", + content: + "All content, design, and code within GitHub Tracker is the intellectual property of its contributors. You may not reproduce or distribute any part of the service without explicit permission.", + }, + { + title: "Disclaimer of Warranties", + content: + "GitHub Tracker is provided as-is without warranties of any kind. We do not guarantee uninterrupted or error-free service and are not liable for any data loss or damages.", + }, + { + title: "Changes to Terms", + content: + "We reserve the right to modify these terms at any time. Continued use of the service after changes constitutes your acceptance of the new terms.", + }, +]; + +const TermsAndConditions = () => ( + +); + +export default TermsAndConditions; \ No newline at end of file