From c387798be72dc01f391e427f061e94d5da6ed4ad Mon Sep 17 00:00:00 2001 From: KS Jannette Date: Tue, 12 May 2026 18:17:02 -0400 Subject: [PATCH] added TOS and Privacy content --- frontend/src/App.jsx | 49 ++++++--- frontend/src/components/Footer.css | 36 +++++++ frontend/src/components/Footer.jsx | 41 +++++++ frontend/src/index.css | 12 +++ frontend/src/pages/privacy/Privacy.css | 24 +++++ frontend/src/pages/privacy/Privacy.jsx | 30 ++++++ frontend/src/pages/terms/Terms.css | 24 +++++ frontend/src/pages/terms/Terms.jsx | 141 +++++++++++++++++++++++++ 8 files changed, 340 insertions(+), 17 deletions(-) create mode 100644 frontend/src/components/Footer.css create mode 100644 frontend/src/components/Footer.jsx create mode 100644 frontend/src/pages/privacy/Privacy.css create mode 100644 frontend/src/pages/privacy/Privacy.jsx create mode 100644 frontend/src/pages/terms/Terms.css create mode 100644 frontend/src/pages/terms/Terms.jsx diff --git a/frontend/src/App.jsx b/frontend/src/App.jsx index 014f142..362c2e6 100644 --- a/frontend/src/App.jsx +++ b/frontend/src/App.jsx @@ -1,6 +1,7 @@ import { Routes, Route, Navigate } from "react-router-dom"; import { useAuth } from "./contexts/AuthContext"; import Navbar from "./components/Navbar"; +import Footer from "./components/Footer"; import Login from "./pages/login/Login"; import Signup from "./pages/Signup"; import Subscribe from "./pages/subscribe/Subscribe"; @@ -9,6 +10,8 @@ import Addresses from "./pages/addresses/Addresses"; import Alerts from "./pages/alerts/Alerts"; import AlertHistory from "./pages/alertHistory/AlertHistory"; import Account from "./pages/user_account/Account"; +import Terms from "./pages/terms/Terms"; +import Privacy from "./pages/privacy/Privacy"; export default function App() { const { currentUser, isSubscribed } = useAuth(); @@ -27,28 +30,40 @@ export default function App() { if (!isSubscribed) { return ( - - } /> - } /> - } /> - } /> - +
+
+ + } /> + } /> + } /> + } /> + } /> + } /> + +
+
+
); } return ( -
+
- - } /> - } /> - } /> - } /> - } /> - } /> - } /> - } /> - +
+ + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + +
+
); } diff --git a/frontend/src/components/Footer.css b/frontend/src/components/Footer.css new file mode 100644 index 0000000..2189184 --- /dev/null +++ b/frontend/src/components/Footer.css @@ -0,0 +1,36 @@ +.footer { + flex-shrink: 0; + margin-top: auto; + padding: 0.75rem 1rem; + background-color: var(--color-bg); + border-top: 1px solid var(--color-border-light); +} + +.footer__inner { + display: flex; + flex-wrap: wrap; + justify-content: center; + align-items: center; + gap: 0.5rem 1rem; + max-width: 1400px; + margin: 0 auto; + font-size: 0.85rem; + line-height: 1.4; + color: var(--color-text-dimmed); +} + +.footer__copyright { + color: var(--color-text-dimmed); +} + +.footer__link { + font-size: 1.265em; + color: inherit; + text-decoration: none; + white-space: nowrap; +} + +.footer__link:hover { + color: var(--color-primary); + text-decoration: underline; +} diff --git a/frontend/src/components/Footer.jsx b/frontend/src/components/Footer.jsx new file mode 100644 index 0000000..a260e41 --- /dev/null +++ b/frontend/src/components/Footer.jsx @@ -0,0 +1,41 @@ +import { Link } from "react-router-dom"; +import { useAuth } from "../contexts/AuthContext"; +import "./Footer.css"; + +export default function Footer() { + const { currentUser } = useAuth(); + + if (!currentUser) return null; + + return ( + + ); +} diff --git a/frontend/src/index.css b/frontend/src/index.css index befdf10..fa44484 100644 --- a/frontend/src/index.css +++ b/frontend/src/index.css @@ -78,6 +78,18 @@ button { font-weight: 200; } +/* ── App shell (navbar + main + footer) ───────────────────── */ + +.app-layout { + min-height: 100vh; + display: flex; + flex-direction: column; +} + +.app-layout__main { + flex: 1 0 auto; +} + /* ── Page Layouts ─────────────────────────────────────────── */ .page { diff --git a/frontend/src/pages/privacy/Privacy.css b/frontend/src/pages/privacy/Privacy.css new file mode 100644 index 0000000..a76e1e5 --- /dev/null +++ b/frontend/src/pages/privacy/Privacy.css @@ -0,0 +1,24 @@ +.privacy-container { + max-width: 800px; + margin: 0 auto; + padding: 2rem; + color: var(--color-text); +} + +.privacy-container h1 { + font-size: 2rem; + font-weight: 200; + margin-bottom: 1.25rem; +} + +.privacy-para { + margin-bottom: 1.25rem; + font-size: 1.35rem; + font-weight: 200; + line-height: 1.65; + color: var(--color-text-muted); +} + +.privacy-para:last-child { + margin-bottom: 0; +} \ No newline at end of file diff --git a/frontend/src/pages/privacy/Privacy.jsx b/frontend/src/pages/privacy/Privacy.jsx new file mode 100644 index 0000000..518fd8e --- /dev/null +++ b/frontend/src/pages/privacy/Privacy.jsx @@ -0,0 +1,30 @@ +import "./Privacy.css"; + +export default function Privacy() { + return ( +
+

Privacy

+

+ Koin Ping is committed to protecting the privacy of our users. Koin Ping + does not sell or rent user information and we do not share user + information without prior consent except as compelled by law. +

+

+ Koin Ping collects only enough information from users to enable the + functioning of this website and its services. It will never collect + extra information about you and uses no tracking, cookies or logging + with personal information. +

+

+ The only information ever stored is your chosen email address and + contact information that is provided upon signup. Koin Ping is located + within the United States, and will process and store your information in + the United States. +

+

+ If you would like to remove your data, or if you have any questions + about how your data is used, please contact us. +

+
+ ); +} diff --git a/frontend/src/pages/terms/Terms.css b/frontend/src/pages/terms/Terms.css new file mode 100644 index 0000000..b586b09 --- /dev/null +++ b/frontend/src/pages/terms/Terms.css @@ -0,0 +1,24 @@ +.tos-container { + max-width: 800px; + margin: 0 auto; + padding: 2rem; + color: var(--color-text); +} + +.tos-container h1 { + font-size: 2rem; + font-weight: 200; + margin-bottom: 1.25rem; +} + +.tos-para { + margin-bottom: 1.25rem; + font-size: 1.35rem; + font-weight: 200; + line-height: 1.65; + color: var(--color-text-muted); +} + +.tos-para:last-child { + margin-bottom: 0; +} diff --git a/frontend/src/pages/terms/Terms.jsx b/frontend/src/pages/terms/Terms.jsx new file mode 100644 index 0000000..bb31b7a --- /dev/null +++ b/frontend/src/pages/terms/Terms.jsx @@ -0,0 +1,141 @@ +import "./Terms.css"; + +export default function Terms() { + return ( +
+

Terms of Service And Use

+

+ YOU SHOULD READ THESE TERMS OF SERVICE AND USE BEFORE USING THIS WEB + SITE. +

+

+ By using the Website, you acknoweldge that you have read this, and + that you understand it. The Website which is located at the domain + Koin Ping.com and Koin Ping.ai ("Koin Ping") and/or any mobile + apps available for download (collectively, the "Web Site," + "Websites" and "Apps") are governed by these Terms + of Service and Use (the "Agreement," "Terms of + Service", or "TOS"). Any reference herein to the + Website, Websites, and/or Apps is intended, and shall be construed, to + pertain to one, all, or any of them, indivuidually and collectively. +

+

+ By using the Web Site and Apps, you ("you" or "User") + signify your acceptance of this Agreement and your acknowledgement that + all information that you provide, directly or indirectly, through the Web + Sites and App will be managed in accordance with the Privacy Notice. IF + YOU DO NOT ACCEPT THESE TERMS OF SERVICE AND USE, YOU ARE NOT AUTHORIZED + TO ACCESS OR USE THE WEB SITE OR APPS. +

+

+ Communications. You agree that by providing your contact information, + you consent to receiving communication, in connection with your + Membership subscription. This may include communication about your + account, features, and services via e-email, push notification, phone, + or text message (including by an automatic telephone dialing system + and/or with an artificial or pre-recorded voice) at any of the phone + numbers provided by you or on your behalf. Standard text messaging + charges applied by your cell phone carrier may apply. +

+

+ User Eligibility. The Website should only be accessed and used by + individuals who agree to be bound by these Terms of Use and who are at + least 18 years of age. The Websites may be accessible worldwide; + however, the Websites are intended for use only in the USA and Canada. + If you access/use the Websites from outside the USA or Canada, you do + so at your own risk and are responsible for complying with the laws + and regulations of the territory from which you access/use the + Websites. +

+

+ Intellectual property rights. The Web Site and the information, computer + code, and related functionality appearing, featured or otherwise + displayed on the Websites are owned by Koin Ping, its affiliates, and + their respective licensors or other third parties and protected under + the copyright, trademark and other laws of the United States and other + countries sand international treaty provisions. +

+

+ Limited license. Koin Ping grants to you a limited, non-exclusive, + non-transferable license to use the Web Site in strict accordance with + these Terms of Service and Use and the instructions provided by us on + the Web Site. The materials provided on the Web Site, including, + without limitation, the Information, computer code, and related + functionality, are for your personal use only. Except as may be + explicitly permitted through the Websites, you may not copy, modify, + upload, republish, distribute, display, post, license, create + derivative works from, or transmit anything you obtain from the Web + Sites, including anything you download from the Websites, unless you + first obtain our written consent. +

+

+ Any rights not expressly granted herein are reserved to Koin Ping and + its affiliates. You may not remove, obscure, or otherwise deface + proprietary notices appearing on the Web Site, or any content or + Information. Any unauthorized use of the Websites or its contents may + violate copyright laws, trademark laws, the laws of privacy and + publicity and communications regulations and statutes. +

+

+ Restrictions on Use. As a condition of your use of the Websites, you + warrant that you will not use the Websites for any purpose that is + unlawful or prohibited by these terms, conditions and notices. You may + not use the Websites in any way that could damage, disable, overburden + or impair the Websites or interfere with any other party's use and + enjoyment of the Websites. You may not obtain or attempt to obtain any + materials or information through any means not intentionally made + available or provided for through the Web Site. +

+

+ Revocation of privileges. You agree that your use of the Websites may + be suspended or terminated immediately upon receipt of any notice which + alleges that you have used the Websites in violation of these Terms of + Use and/or for any purpose that violates any local, state, federal or + law of the USA or other jurisdictions, including, but not limited to, + the posting of information that may violate third party rights, may + defame a third party, may be obscene or pornographic, may harass or + assault others, or may violate any laws, rules or regulations, + including, hacking or other criminal regulations. You understand that + actions in violation of these Terms of Use may subject you to serious + civil and criminal legal penalties and Koin Ping reserves the right to + pursue penalties and other remedies to the fullest extent of the law to + protect our rights. +

+

+ No Warranties. Koin Ping MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT + THE WEB SITE, THE SUITABILITY OF THE INFORMATION CONTAINED ON OR + RECEIVED THROUGH THE WEB SITE, OR ANY SERVICES OR PRODUCTS RECEIVED + THROUGH THE WEB SITE. ALL INFORMATION AND USE OF THE WEB SITE ARE + PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. Koin Ping HEREBY + EXPRESSLY DISCLAIMS ALL WARRANTIES WITH REGARD TO THE Websites, THE + INFORMATION CONTAINED ON OR RECEIVED THROUGH USE OF THE Websites AND + ANY SERVICES OR PRODUCTS RECEIVED THROUGH THE Websites, INCLUDING ALL + EXPRESS, STATUTORY AND IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS + FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. Koin Ping DOES + NOT WARRANT THAT THE CONTENTS OR ANY INFORMATION RECEIVED THROUGH THE + Websites ARE ACCURATE, RELIABLE OR CORRECT; THAT THE Websites WILL BE + AVAILABLE AT ANY PARTICULAR TIME OR LOCATION; THAT ANY DEFECTS OR + ERRORS WILL BE CORRECTED; OR THAT THE CONTENTS OR ANY INFORMATION + RECEIVED THROUGH THE Websites ARE FREE OF VIRUSES OR OTHER DESTRUCTIVE + OR HARMFUL COMPONENTS. YOUR USE OF THE Websites IS SOLELY AT YOUR OWN + RISK. USER EXPRESSLY AGREES THAT IT HAS RELIED ON NO WARRANTIES, + REPRESENTATIONS OR STATEMENTS OTHER THAN IN THIS AGREEMENT. +

+

+ Limitation of Liability. UNDER NO CIRCUMSTANCES SHALL Koin Ping BE + LIABLE FOR ANY DAMAGES, INCLUDING, WITHOUT LIMITATION, DIRECT, + INDIRECT, PUNITIVE, INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOST + PROFITS THAT RESULT FROM, OR ARISE OUT OF OR IN CONNECTION WITH THE USE + OF, OR INABILITY TO USE THE Websites, THE INFORMATION CONTAINED ON OR + RECEIVED THROUGH USE OF THE Websites, OR ANY SERVICES OR PRODUCTS + RECEIVED THROUGH THE Websites. THIS LIMITATION APPLIES WHETHER THE + ALLEGED LIABILITY IS BASED ON CONTRACT, TORT, NEGLIGENCE, STRICT + LIABILITY OR ANY OTHER BASIS, EVEN IF Koin Ping HAS BEEN ADVISED OF THE + POSSIBILITY OF SUCH DAMAGES. BECAUSE SOME JURISDICTIONS DO NOT ALLOW THE + EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, Koin + Ping's LIABILITY IN SUCH JURISDICTIONS SHALL BE LIMITED TO THE + MAXIMUM EXTENT PERMITTED BY THE LAW OF YOUR JURISDICTION. +

+
+ ); +}