+ For more information about our terms and conditions, please visit
+ our
+
+ Terms and Conditions page
+
+ .
+
+
+ );
+}
diff --git a/src/components/layouts/Legal/PrivacyPolicy/constants/privacyPolicyData.ts b/src/components/layouts/Legal/PrivacyPolicy/constants/privacyPolicyData.ts
new file mode 100644
index 000000000..0f9038b8d
--- /dev/null
+++ b/src/components/layouts/Legal/PrivacyPolicy/constants/privacyPolicyData.ts
@@ -0,0 +1,157 @@
+export type LegalTermContentItem = {
+ text: string;
+ list?: {
+ title: string;
+ body: string;
+ }[];
+};
+
+export type LegalTermData = {
+ id: string;
+ title: string;
+ description: LegalTermContentItem;
+}[];
+
+const privacyPolicyData: LegalTermData = [
+ {
+ id: "intro",
+ title: "Introduction",
+ description: {
+ text: "At Boilerplate Hng, we prioritize your privacy and are committed to protecting your personal information. This Privacy Policy outlines the types of information we collect, how we use it, and the measures we take to ensure its security. By using our services, you agree to the collection and use of information in accordance with this policy.",
+ },
+ },
+ {
+ id: "info-we-collect",
+ title: "Information We Collect",
+ description: {
+ text: "We collect various types of information in connection with the services we provide, including:",
+ list: [
+ {
+ title: "Personal Information:",
+ body: "This includes any information that can be used to identify you personally, such as your name, email address, phone number, and payment information. We collect personal information when you create an account, make a purchase, or interact with our customer support.",
+ },
+ {
+ title: "Usage Information:",
+ body: "This refers to information about how you use our services, such as your IP address, browser type, pages visited, and the time spent on those pages. We collect this information to understand how our users interact with our services and to improve our offerings.",
+ },
+ {
+ title: "Cookies and Tracking Technologies:",
+ body: "We use cookies and other tracking technologies to enhance your experience on our website, analyze site traffic, and for security purposes. Cookies are small data files stored on your device that help us recognize you and provide a more personalized experience.",
+ },
+ ],
+ },
+ },
+ {
+ id: "how-we-use-your-info",
+ title: "How We Use Your Information",
+ description: {
+ text: "We use the information we collect to:",
+ list: [
+ {
+ title: "Provide and Improve Our Services:",
+ body: "Your information helps us deliver the services you request and improve our offerings based on your feedback and interactions.",
+ },
+ {
+ title: "Personalize Your Experience:",
+ body: "We use your information to tailor our services to your preferences and provide you with relevant description and recommendations.",
+ },
+ {
+ title: "Communicate with You:",
+ body: "We may use your contact information to send you updates, newsletters, and promotional materials. You can opt-out of receiving marketing communications at any time.",
+ },
+ {
+ title: "Ensure Security and Prevent Fraud:",
+ body: "Your information helps us protect your account and our services from unauthorized access and other security threats.",
+ },
+ {
+ title: "Comply with Legal Obligations:",
+ body: "We may use your information to comply with legal requirements, such as tax regulations and data protection laws.",
+ },
+ ],
+ },
+ },
+ {
+ id: "sharing-your-info",
+ title: "Sharing Your Information",
+ description: {
+ text: "We do not sell your personal information to third parties. We may share your information with:",
+ list: [
+ {
+ title: "Service Providers:",
+ body: "We work with trusted third-party companies that perform services on our behalf, such as payment processing, data analysis, and customer support. These service providers have access to your information only to perform these tasks and are obligated to protect your information.",
+ },
+ {
+ title: "Legal Authorities:",
+ body: "We may disclose your information if required by law or if we believe that such action is necessary to comply with legal processes, protect our rights, or ensure the safety of our users.",
+ },
+ {
+ title: "Business Transfers:",
+ body: "If we are involved in a merger, acquisition, or sale of assets, your information may be transferred as part of that transaction. We will notify you of any such changes and the choices you have regarding your information.",
+ },
+ ],
+ },
+ },
+
+ {
+ id: "your-choices-and-rights",
+ title: "Your Choices and Rights",
+ description: {
+ text: "You have certain rights regarding your personal information, including:",
+ list: [
+ {
+ title: "Access and Correction:",
+ body: "You can request access to and correction of your personal information by contacting us at [Your Contact Information].",
+ },
+ {
+ title: "Deletion:",
+ body: "You can request the deletion of your personal information, subject to certain legal obligations we may have to retain your information.",
+ },
+ {
+ title: "Opt-Out of Marketing Communications:",
+ body: "You can opt-out of receiving marketing communications from us by following the unsubscribe instructions in the emails or contacting us directly.",
+ },
+ {
+ title: "Cookies Management:",
+ body: "You can manage your cookie preferences through your browser settings. However, disabling cookies may affect your ability to use some features of our services.",
+ },
+ ],
+ },
+ },
+ {
+ id: "security-measures",
+ title: "Security Measures",
+ description: {
+ text: "We implement robust security measures to protect your information from unauthorized access, disclosure, alteration, and destruction. These measures include encryption, secure servers, and regular security assessments. However, no security system is completely infallible, and we cannot guarantee the absolute security of your information.",
+ },
+ },
+ {
+ id: "changes-to-this-privacy-policy",
+ title: "Changes to This Privacy Policy",
+ description: {
+ text: "We may update this Privacy Policy from time to time to reflect changes in our practices or legal requirements. When we make changes, we will notify you by updating the date at the top of this policy and providing a more prominent notice if the changes are significant. We encourage you to review this policy periodically to stay informed about how we are protecting your information.",
+ },
+ },
+ {
+ id: "contact-us",
+ title: "Contact Us",
+ description: {
+ text: "If you have any questions or concerns about this Privacy Policy or our data practices, please contact us at [Your Contact Information].",
+ },
+ },
+ {
+ id: "last-updated",
+ title: "Last Updated",
+ description: {
+ text: "This Privacy Policy was last updated on 13/07/2024.",
+ },
+ },
+];
+
+export const getTableOfContents = (data: LegalTermData) => {
+ return data.map((section) => ({
+ href: `#${section.id}`,
+ label: section.title,
+ }));
+};
+
+export default privacyPolicyData;
diff --git a/src/components/layouts/Legal/TableOfContent.tsx b/src/components/layouts/Legal/TableOfContent.tsx
new file mode 100644
index 000000000..7b67acb24
--- /dev/null
+++ b/src/components/layouts/Legal/TableOfContent.tsx
@@ -0,0 +1,28 @@
+import { cn } from "~/lib/utils";
+import TableOfContentItem from "./TableOfContentItem";
+
+type TableOfContentProperties = {
+ className?: string;
+ listOfContent: { href: string; label: string }[];
+};
+
+export default function TableOfContent({
+ className,
+ listOfContent,
+}: TableOfContentProperties) {
+ return (
+
+ );
+}
diff --git a/src/components/layouts/Legal/TableOfContentItem.tsx b/src/components/layouts/Legal/TableOfContentItem.tsx
new file mode 100644
index 000000000..8381ef473
--- /dev/null
+++ b/src/components/layouts/Legal/TableOfContentItem.tsx
@@ -0,0 +1,37 @@
+import Link, { LinkProps } from "next/link";
+import { DetailedHTMLProps, LiHTMLAttributes, ReactNode } from "react";
+
+import { cn } from "~/lib/utils";
+
+type TableOfContentItemProperties = DetailedHTMLProps<
+ LiHTMLAttributes,
+ HTMLLIElement
+> & {
+ className?: string;
+ children: ReactNode;
+ href: LinkProps["href"];
+};
+
+export default function TableOfContentItem({
+ className,
+ children,
+ href,
+ ...rest
+}: TableOfContentItemProperties) {
+ return (
+
+ We value and respect intellectual property rights and expect our users
+ to do the same. The following guidelines outline our stance on
+ intellectual property:
+
+ Welcome to Boilerplate Hng. These Terms and Conditions govern your
+ use of our website and services. By accessing or using our site,
+ you agree to comply with and be bound by these terms. If you do
+ not agree, please do not use our website..
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Changes to Terms
+
+
+ We reserve the right to modify these Terms and Conditions at any
+ time. Changes will be effective immediately upon posting on our
+ website. Your continued use of the site constitutes your
+ acceptance of the revised terms. We encourage you to review these
+ terms periodically to stay informed of any updates
+
+
+
+
+ Contact Information
+
+
+ For any questions or concerns regarding these Terms and
+ Conditions, please contact us at [Your Contact Information]. We
+ value your feedback and are here to assist you with any inquiries
+
+
+
+
+ Last Updated
+
+
+ These Terms and Conditions were last updated on [
+ {formattedDate(lastUpdate)}]. Please review them periodically for
+ any changes.
+
+
+
+ For more information about our privacy practices, please visit our{" "}
+
+ Privacy Policy page.{" "}
+
+
+ As a user of our services, you are expected to adhere to the following
+ obligations to ensure a safe and enjoyable experience for all users:
+
+
+ {Obligations.map((list: TermsType) => (
+
+ {list.title}{" "}
+ {list.value}
+
+ ))}
+
+
+
+ );
+};
+
+export default UserObligations;
diff --git a/src/components/layouts/Legal/Terms&Conditions/constants/constant.ts b/src/components/layouts/Legal/Terms&Conditions/constants/constant.ts
new file mode 100644
index 000000000..9bf49bac8
--- /dev/null
+++ b/src/components/layouts/Legal/Terms&Conditions/constants/constant.ts
@@ -0,0 +1,137 @@
+export const Obligations = [
+ {
+ title: " Provide Accurate Information:",
+ value:
+ " When creating an account, you must provide accurate and complete information. This includes your name, email address, and any other required details. Providing false information can result in the termination of your account.",
+ },
+ {
+ title: " Maintain Account Security:",
+ value:
+ " You are responsible for maintaining the confidentiality of your account credentials. Do not share your password with anyone and notify us immediately if you suspect any unauthorized use of your account. We are not liable for any loss or damage arising from your failure to comply with this security obligation.",
+ },
+ {
+ title: " Comply with Applicable Laws:",
+ value:
+ "Your use of our services must comply with all applicable laws and regulations. This includes local, state, national, and international laws. Any illegal activity will result in the immediate termination of your account and may be reported to the relevant authorities.",
+ },
+ {
+ title: "Respect Intellectual Property Rights: ",
+ value:
+ " You must respect the intellectual property rights of others. Do not upload, share, or distribute content that infringes on someone else's intellectual property rights. This includes copyrighted materials, trademarks, and any other proprietary information.",
+ },
+ {
+ title: "Prohibited Conduct:",
+ value:
+ " You must not engage in any conduct that is harmful, offensive, or disruptive. This includes, but is not limited to, harassment, spamming, phishing, or distributing malware. Any behavior that we deem inappropriate will result in the termination of your account.",
+ },
+ {
+ title: "Use Services as Intended:",
+ value:
+ "You must use our services only for their intended purposes. Do not attempt to exploit or misuse our services in any way. This includes circumventing any security measures, using automated tools to access our services, or interfering with the",
+ },
+];
+
+export const AcceptableUsePolicy = [
+ {
+ title: "Respectful Communication",
+ value:
+ "All interactions on our platform must be respectful and professional. Do not use offensive, abusive, or inflammatory language. Treat all users with respect and courtesy.",
+ },
+ {
+ title: "No Misrepresentation:",
+ value:
+ " Do not impersonate any person or entity, or falsely state or otherwise misrepresent your affiliation with a person or entity. Authenticity is crucial to maintaining trust on our platform.",
+ },
+ {
+ title: "Privacy Protection",
+ value:
+ "Do not collect or store personal data about other users without their express permission. Respect the privacy of others and adhere to all applicable privacy laws and regulations.",
+ },
+ {
+ title: "Appropriate Content",
+ value:
+ "All content shared on our platform must be appropriate and lawful. Do not share content that is obscene, defamatory, threatening, or otherwise objectionable. This includes text, images, videos, and any other form of media.",
+ },
+ {
+ title: "Compliance with Policies:",
+ value:
+ "You must comply with all our policies, including our Privacy Policy and any additional guidelines we may provide. Familiarize yourself with our policies to ensure you are using our services appropriately.",
+ },
+];
+export const IntellectualPropertyRight = [
+ {
+ title: "Ownership of Content:",
+ value:
+ "All content on our website, including text, graphics, logos, and images, is the property of boilerplate Hng or its content suppliers and is protected by intellectual property laws. You may not use, reproduce, or distribute any content without our express written permission.",
+ },
+ {
+ title: "User-Generated Content:",
+ value:
+ "By submitting content to our platform, you grant us a non-exclusive, royalty-free, perpetual, and worldwide license to use, reproduce, modify, publish, and distribute your content. You retain all rights to your content, but you grant us the right to use it in connection with our services.",
+ },
+ {
+ title: "Infringement Claims:",
+ value:
+ "If you believe that your intellectual property rights have been infringed, please contact us with detailed information about the alleged infringement. We will investigate the matter and take appropriate action, which may include removing the infringing content and terminating the accounts of repeat infringers.",
+ },
+ {
+ title: "Trademarks",
+ value:
+ " Our trademarks and trade dress may not be used in connection with any product or service without our prior written consent. Any unauthorized use of our trademarks is strictly prohibited.",
+ },
+];
+
+export const Disclaimers = [
+ {
+ title: "No Warranties:",
+ value:
+ 'Our website and services are provided "as is" without any warranties, express or implied. We do not guarantee the accuracy, completeness, or reliability of the content on our site. Your use of our services is at your own risk.',
+ },
+ {
+ title: "Limitation of Liability",
+ value:
+ "To the fullest extent permitted by law, [Your Company Name] disclaims all liability for any damages arising from your use of our website and services. This includes direct, indirect, incidental, consequential, and punitive damages.",
+ },
+ {
+ title: "Third-Party Content:",
+ value:
+ "Our website may contain links to third-party websites and content. We do not endorse or assume any responsibility for any third-party content. Your interactions with third-party websites are solely between you and the third party.",
+ },
+ {
+ title: "Indemnification:",
+ value:
+ "You agree to indemnify and hold harmless [Your Company Name] and its affiliates, officers, agents, and employees from any claims, liabilities, damages, losses, and expenses arising from your use of our services or your violation of these Terms and Conditions.",
+ },
+];
+
+export const GoverningLaw = [
+ {
+ title: "Governing Law:",
+ value:
+ "These Terms and Conditions are governed by the laws of [Your Country/State], without regard to its conflict of laws principles. Any legal action or proceeding arising under these terms will be brought exclusively in the courts of [Your Jurisdiction].",
+ },
+ {
+ title: "Dispute Resolution:",
+ value:
+ "We are committed to resolving disputes amicably and efficiently. In the event of a dispute, you agree to first attempt to resolve the matter informally by contacting us. If the dispute cannot be resolved informally, we agree to submit the matter to mediation before pursuing any other form of dispute resolution.",
+ },
+ {
+ title: "Arbitration:",
+ value:
+ "If mediation fails, any dispute arising from these Terms and Conditions will be resolved by binding arbitration in accordance with the rules of [Arbitration Organization]. The arbitration will be conducted in [Location], and the arbitrator's decision will be final and binding",
+ },
+];
+
+export const SECTIONS = [
+ { id: "introduction", text: "Introduction" },
+ { id: "user-obligations", text: "User Obligations" },
+ { id: "acceptable-use-policy", text: "Acceptable Use Policy" },
+ { id: "intellectual-property", text: "Intellectual Property Right" },
+ { id: "disclaimer", text: "Disclaimer and Limitation of Liability" },
+ { id: "governing-law", text: "Governing Law and Dispute Resolution" },
+ { id: "changes-to-terms", text: "Changes to Terms" },
+ { id: "contact-information", text: "Contact Information" },
+ { id: "last-updated", text: "Last Updated Date" },
+] as const;
+
+export const Contents = SECTIONS.map(({ id, text }) => ({ id, text }));
diff --git a/src/components/layouts/footer/index.tsx b/src/components/layouts/footer/index.tsx
index 14b4d9add..ee527ca9f 100644
--- a/src/components/layouts/footer/index.tsx
+++ b/src/components/layouts/footer/index.tsx
@@ -8,7 +8,7 @@ import {
} from "lucide-react";
import Link from "next/link";
-import CustomButton from "~/components/common/button/button";
+import CustomButton from "~/components/common/common-button/common-button";
import { Input } from "~/components/ui/input";
const Footer = () => {
@@ -30,7 +30,7 @@ const Footer = () => {
{ route: "FAQ", link: "/faqs" },
{ route: "waiting list", link: "/waitlist" },
{ route: "Pricing Experience", link: "/" },
- { route: "Contact Us", link: "/" },
+ { route: "Contact Us", link: "/contact-us" },
],
},
{
diff --git a/src/components/layouts/navbar/index.tsx b/src/components/layouts/navbar/index.tsx
index f2f17be2b..d7c2434ca 100644
--- a/src/components/layouts/navbar/index.tsx
+++ b/src/components/layouts/navbar/index.tsx
@@ -4,7 +4,7 @@ import { BellIcon, Menu, User } from "lucide-react";
import Link from "next/link";
import { useEffect, useState } from "react";
-import CustomButton from "~/components/common/button/button";
+import CustomButton from "~/components/common/common-button/common-button";
import Logo from "~/components/common/logo";
const navlinks = [
diff --git a/src/components/ui/input-otp.tsx b/src/components/ui/input-otp.tsx
new file mode 100644
index 000000000..e2274d2a4
--- /dev/null
+++ b/src/components/ui/input-otp.tsx
@@ -0,0 +1,75 @@
+"use client";
+
+import { OTPInput, OTPInputContext } from "input-otp";
+import { Dot } from "lucide-react";
+import * as React from "react";
+
+import { cn } from "~/lib/utils";
+
+const InputOTP = React.forwardRef<
+ React.ElementRef,
+ React.ComponentPropsWithoutRef
+>(({ className, containerClassName, ...properties }, reference) => (
+
+));
+InputOTP.displayName = "InputOTP";
+
+const InputOTPGroup = React.forwardRef<
+ React.ElementRef<"div">,
+ React.ComponentPropsWithoutRef<"div">
+>(({ className, ...properties }, reference) => (
+
+));
+InputOTPGroup.displayName = "InputOTPGroup";
+
+const InputOTPSlot = React.forwardRef<
+ React.ElementRef<"div">,
+ React.ComponentPropsWithoutRef<"div"> & { index: number }
+>(({ index, className, ...properties }, reference) => {
+ const inputOTPContext = React.useContext(OTPInputContext);
+ const { char, hasFakeCaret, isActive } = inputOTPContext.slots[index];
+
+ return (
+