Skip to content

Commit 76d540d

Browse files
Merge pull request #25 from kartikver15gr8/staging
Added terms-of-use
2 parents f295995 + 0bda92e commit 76d540d

File tree

10 files changed

+327
-16
lines changed

10 files changed

+327
-16
lines changed

app/privacy/page.tsx

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
import Footer from "@/components/landing/footer";
2+
import Navbar from "@/components/landing/navbar";
3+
import { BackButton } from "@/components/terms-and-privacy/back-button";
4+
import { ContentPointer } from "@/components/terms-and-privacy/content-pointer";
5+
import { RAW_ICONS } from "@/lib/icons";
6+
import SVGIcon from "@/lib/svg-icon";
7+
import { PrivacyOptions } from "@/utils/terms-and-privacy";
8+
import Link from "next/link";
9+
10+
export default function TermsConditions() {
11+
return (
12+
<>
13+
<BackButton />
14+
<div className="min-h-screen px-4 sm:px-6 md:px-10 lg:px-20 xl:px-52 mb-10 lg:mb-20">
15+
<div className="w-full flex flex-col items-center justify-center h-16 sm:h-20">
16+
<p className="text-[25px] lg:text-[30px] xl:text-[40px] font-medium">
17+
Privacy Policy
18+
</p>
19+
<p className="text-[14px] lg:text-[15px] xl:text-[16px] text-[#b0a9a9]">
20+
Last updated: Jun 27, 2025
21+
</p>
22+
</div>
23+
24+
{/* Overview */}
25+
<div className="w-full mt-5 lg:mt-10 ">
26+
<p className="font-medium text-[16px] md:text-[20px] xl:text-[24px]">
27+
Our Commitment to Privacy
28+
</p>
29+
<p className="text-[#b0a9a9] font-extralight text-[14px] lg:text-[15px] xl:text-[17px]">
30+
At Zenorizon, we believe that privacy is a fundamental right. Our
31+
open-source project management solution is built with privacy at its
32+
core, and we&apos;re committed to being transparent about how we handle
33+
your data.
34+
</p>
35+
<p className="font-extralight text-[14px] lg:text-[15px] xl:text-[17px] mt-2">
36+
We DO NOT keep any of your passwords or confidential information,
37+
All the user sessions are managed through cookies through
38+
authentication via browsers. We do store user emails on our servers
39+
with secure encryption.
40+
</p>
41+
</div>
42+
43+
{/* Content */}
44+
45+
<ContentPointer contentArray={PrivacyOptions} />
46+
47+
<div className="mt-5 md:mt-7 lg:mt-10">
48+
<p className="text-[16px] md:text-[20px] xl:text-[24px] mb-1 md:mb-2">
49+
Reach out to us:
50+
</p>
51+
<p className="text-[#b0a9a9] font-extralight text-[14px] lg:text-[15px] xl:text-[17px]">
52+
If you have any queries regarding the privacy policies
53+
</p>
54+
<Link
55+
href={"mailto:vermakartikey786@gmail.com"}
56+
target="_blank"
57+
className="flex items-center gap-x-1 md:gap-x-2 mt-2"
58+
>
59+
<p className="text-[#b0a9a9] font-extralight text-[14px] lg:text-[15px] xl:text-[17px] hover:text-white transition-all duration-200">
60+
You may contact us on the given mail
61+
</p>
62+
<SVGIcon
63+
className="flex w-4 md:w-5"
64+
svgString={RAW_ICONS.MailBox}
65+
/>
66+
</Link>
67+
</div>
68+
</div>
69+
<Footer />
70+
</>
71+
);
72+
}

app/terms-of-use/page.tsx

Lines changed: 0 additions & 7 deletions
This file was deleted.

app/terms/page.tsx

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
import Footer from "@/components/landing/footer";
2+
import Navbar from "@/components/landing/navbar";
3+
import { BackButton } from "@/components/terms-and-privacy/back-button";
4+
import { ContentPointer } from "@/components/terms-and-privacy/content-pointer";
5+
import { RAW_ICONS } from "@/lib/icons";
6+
import SVGIcon from "@/lib/svg-icon";
7+
import { TermsOptions } from "@/utils/terms-and-privacy";
8+
import Link from "next/link";
9+
10+
export default function TermsConditions() {
11+
return (
12+
<>
13+
<BackButton />
14+
<div className="min-h-screen px-4 sm:px-6 md:px-10 lg:px-20 xl:px-52 mb-10 lg:mb-20">
15+
<div className="w-full flex flex-col items-center justify-center h-16 sm:h-20">
16+
<p className="text-[25px] lg:text-[30px] xl:text-[40px] font-medium">
17+
Terms of Service
18+
</p>
19+
<p className="text-[14px] lg:text-[15px] xl:text-[16px] text-[#b0a9a9]">
20+
Last updated: Jun 26, 2025
21+
</p>
22+
</div>
23+
24+
{/* Overview */}
25+
<div className="w-full mt-5 lg:mt-10 ">
26+
<p className="font-medium text-[16px] md:text-[20px] xl:text-[24px]">
27+
Overview
28+
</p>
29+
<p className="text-[#b0a9a9] font-extralight text-[14px] lg:text-[15px] xl:text-[17px]">
30+
Zenorizon is an open-source modern issue tracking and project
31+
management tool built for high-performing teams. By using Zenorizon,
32+
you agree these terms.
33+
</p>
34+
</div>
35+
36+
{/* Content */}
37+
38+
<ContentPointer contentArray={TermsOptions} />
39+
40+
<div className="mt-5 md:mt-7 lg:mt-10">
41+
<p className="text-[16px] md:text-[20px] xl:text-[24px] mb-1 md:mb-2">
42+
Reach out to us:
43+
</p>
44+
<p className="text-[#b0a9a9] font-extralight text-[14px] lg:text-[15px] xl:text-[17px]">
45+
If you have any queries regarding the terms of service
46+
</p>
47+
<Link
48+
href={"https://github.com/kartikver15gr8/Zenorizon/issues"}
49+
className="flex items-center gap-x-1 md:gap-x-2 mt-2"
50+
>
51+
<SVGIcon
52+
className="flex w-3 xl:w-4"
53+
svgString={RAW_ICONS.GitHubIcon}
54+
/>
55+
<p className="text-[#b0a9a9] font-extralight text-[14px] lg:text-[15px] xl:text-[17px] hover:text-white transition-all duration-200">
56+
Open an issue on GitHub
57+
</p>
58+
</Link>
59+
</div>
60+
</div>
61+
<Footer />
62+
</>
63+
);
64+
}

components/authPages/signup-page.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ export default function SignupPage() {
5555

5656
<div className="text-sm mt-5 w-[80%] flex items-center flex-col">
5757
<p className="text-[#838384]">By signing up, you agree to our</p>
58-
<Link href={"/terms-of-use"} className="">
58+
<Link href={"/terms"} className="">
5959
terms and conditions.
6060
</Link>
6161
</div>

components/landing/footer.tsx

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -117,18 +117,18 @@ export default function Footer() {
117117
&copy; 2025 Zenorizon Inc, All Rights Reserved
118118
</p>
119119
<div className="flex items-center gap-x-2 sm:gap-x-4 lg:gap-x-8">
120-
<a
121-
href=""
120+
<Link
121+
href="/terms"
122122
className="w-fit hover:text-[#8d8d91] transition-all duration-200 cursor-pointer"
123123
>
124124
Terms & Conditions
125-
</a>
126-
<a
127-
href=""
125+
</Link>
126+
<Link
127+
href="/privacy"
128128
className="w-fit hover:text-[#8d8d91] transition-all duration-200 cursor-pointer"
129129
>
130130
Privacy Policy
131-
</a>
131+
</Link>
132132
<a
133133
href=""
134134
className="w-fit hover:text-[#8d8d91] transition-all duration-200 cursor-pointer"
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import { RAW_ICONS } from "@/lib/icons";
2+
import SVGIcon from "@/lib/svg-icon";
3+
import Link from "next/link";
4+
5+
export function BackButton() {
6+
return (
7+
<div className="px-4 sm:px-6 md:px-10 lg:px-20 xl:px-52 py-4 flex items-center">
8+
<Link
9+
href={"/"}
10+
className="border border-[#3e3c43] bg-[#33333760] hover:bg-[#45414170] transition-all duration-300 pl-3 pr-4 h-8 rounded-full flex items-center gap-x-1 cursor-pointer"
11+
>
12+
<SVGIcon
13+
className="flex w-3 md:w-4 rotate-180"
14+
svgString={RAW_ICONS.BackArrow}
15+
/>
16+
<p className="text-[14px] lg:text-[15px] xl:text-[16px]">back</p>
17+
</Link>
18+
</div>
19+
);
20+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
export const ContentPointer = ({
2+
contentArray,
3+
}: {
4+
contentArray: { title: string; subTitle: string; points: string[] }[];
5+
}) => {
6+
return (
7+
<div>
8+
{contentArray.map((elem, key) => {
9+
return (
10+
<div key={key} className="w-full mt-5 lg:mt-10 ">
11+
<p className="font-medium text-[16px] md:text-[20px] xl:text-[24px] mb-1 md:mb-2">
12+
{elem.title}
13+
</p>
14+
{elem.subTitle && (
15+
<p className="text-[#b0a9a9] font-extralight text-[14px] lg:text-[15px] xl:text-[17px] mb-1 md:mb-2">
16+
{elem.subTitle}
17+
</p>
18+
)}
19+
{elem.points.map((item, key) => {
20+
return (
21+
<li
22+
key={key}
23+
className="text-[#b0a9a9] font-extralight text-[14px] lg:text-[15px] xl:text-[17px] ml-5 sm:ml-4 md:ml-2"
24+
>
25+
{item}
26+
</li>
27+
);
28+
})}
29+
</div>
30+
);
31+
})}
32+
</div>
33+
);
34+
};

lib/icons.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,12 @@ export const RAW_ICONS = {
189189
<path fill-rule="evenodd" clip-rule="evenodd" d="M4.58301 3.88867C3.06422 3.88867 1.83301 5.11989 1.83301 6.63867V15.8053C1.83301 17.3241 3.06422 18.5553 4.58301 18.5553H17.4163C18.9351 18.5553 20.1663 17.3241 20.1663 15.8053V6.63867C20.1663 5.11989 18.9351 3.88867 17.4163 3.88867H4.58301ZM4.42306 5.73591C4.475 5.72677 4.52845 5.72201 4.58301 5.72201H17.4163C17.4709 5.72201 17.5244 5.72677 17.5763 5.73591L10.9997 10.1203L4.42306 5.73591ZM3.66634 7.43482V15.8053C3.66634 16.3116 4.07675 16.722 4.58301 16.722H17.4163C17.9226 16.722 18.333 16.3116 18.333 15.8053V7.43484L11.5082 11.9847C11.2003 12.19 10.7991 12.19 10.4912 11.9847L3.66634 7.43482Z" fill="black"/>
190190
</svg>
191191
`,
192+
MailBox: `<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
193+
<path fill="#c7c8c8" d="M2 11.25C2 8.35 4.015 6 6.5 6S11 8.35 11 11.25V20H4.233C3 20 2 18.834 2 17.395z" opacity="0.5" />
194+
<path fill="#c7c8c8" d="M11 11.25V20h8.793C21.012 20 22 18.847 22 17.425V11.25C22 8.35 19.985 6 17.5 6h-11C8.985 6 11 8.35 11 11.25" opacity="0.8" />
195+
<path fill="#c7c8c8" d="M9.5 20v2a.75.75 0 0 0 1.5 0v-2zm5.5 0h-1.5v2a.75.75 0 0 0 1.5 0z" />
196+
<path fill="#c7c8c8" fill-rule="evenodd" d="M4.25 16a.75.75 0 0 1 .75-.75h3a.75.75 0 0 1 0 1.5H5a.75.75 0 0 1-.75-.75m13.135-9.415l.256-.052a2.2 2.2 0 0 1 1.24.115c.69.277 1.446.328 2.165.148l.061-.015c.524-.131.893-.618.893-1.178v-2.13c0-.738-.664-1.282-1.355-1.109c-.396.1-.812.071-1.193-.081l-.073-.03a3.5 3.5 0 0 0-2-.185l-.449.09c-.54.108-.93.6-.93 1.17v6.953c0 .397.31.719.692.719a.706.706 0 0 0 .693-.72z" clip-rule="evenodd" />
197+
</svg>`,
192198

193199
MoreHorizontal: `
194200
<svg width="23" height="22" viewBox="0 0 23 22" fill="none" xmlns="http://www.w3.org/2000/svg">
@@ -553,5 +559,11 @@ export const RAW_ICONS = {
553559
<path d="M10 20.568c-3.429 1.157-6.286 0-8-3.568" />
554560
<path d="M10 22v-3.242c0-.598.184-1.118.48-1.588c.204-.322.064-.78-.303-.88C7.134 15.452 5 14.107 5 9.645c0-1.16.38-2.25 1.048-3.2c.166-.236.25-.354.27-.46c.02-.108-.015-.247-.085-.527c-.283-1.136-.264-2.343.16-3.43c0 0 .877-.287 2.874.96c.456.285.684.428.885.46s.469-.035 1.005-.169A9.5 9.5 0 0 1 13.5 3a9.6 9.6 0 0 1 2.343.28c.536.134.805.2 1.006.169c.2-.032.428-.175.884-.46c1.997-1.247 2.874-.96 2.874-.96c.424 1.087.443 2.294.16 3.43c-.07.28-.104.42-.084.526s.103.225.269.461c.668.95 1.048 2.04 1.048 3.2c0 4.462-2.134 5.807-5.177 6.643c-.367.101-.507.559-.303.88c.296.47.48.99.48 1.589V22" />
555561
</g>
562+
</svg>`,
563+
BackArrow: `<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
564+
<g fill="none" stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" color="#fff">
565+
<path d="M13 6H8.5a4.5 4.5 0 0 0 0 9H20" />
566+
<path d="M17 12s3 2.21 3 3s-3 3-3 3" />
567+
</g>
556568
</svg>`,
557569
};

utils/footer-list-options.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,11 @@ export const product = [
1616
export const resources = [
1717
{ title: "Documentation", redirectHref: "", target: "" },
1818
{ title: "GitHub", redirectHref: "", target: "" },
19-
{ title: "Privacy Policy", redirectHref: "", target: "" },
20-
{ title: "Terms and Conditions", redirectHref: "", target: "" },
19+
{ title: "Privacy Policy", redirectHref: "/privacy", target: "" },
20+
{
21+
title: "Terms and Conditions",
22+
redirectHref: "/terms",
23+
target: "",
24+
},
2125
{ title: "Branding", redirectHref: "", target: "" },
2226
];

utils/terms-and-privacy.ts

Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
// Terms of Service Options
2+
3+
export const TermsOptions: {
4+
title: string;
5+
subTitle: string;
6+
points: string[];
7+
}[] = [
8+
{
9+
title: "User Responsibility",
10+
subTitle: "User agree to:",
11+
points: [
12+
"Comply with all applicable laws and regulations",
13+
"Maintain the security of their instance",
14+
"Not use the service for spam or malicious purposes",
15+
"Respect intellectual property rights",
16+
"Report security vulnerabilities responsibly",
17+
],
18+
},
19+
{
20+
title: "Self-Hosted Service",
21+
subTitle: "",
22+
points: [
23+
"Zenorizon provides software that users can deploy on their own infrastructure",
24+
"Users are responsible for their own hosting, maintenance, and compliance",
25+
"The software is provided 'as is' under the Apache 2.0 License",
26+
],
27+
},
28+
{
29+
title: "Software License",
30+
subTitle: "Zenorizon is licensed under the Apache 2.0 License:",
31+
points: [
32+
"Users are free to use, modify, and distribute the software",
33+
"The software is provided “as-is” without warranties or guarantees of any kind",
34+
"Users must retain the original copyright and license notice",
35+
"Contributions and modifications may also be subject to the Apache 2.0 License",
36+
"The license includes a grant of patent rights from contributors to users",
37+
],
38+
},
39+
{
40+
title: "Community Guidelines",
41+
subTitle: "Users participating in our community agree to:",
42+
points: [
43+
"Follow our code of conduct",
44+
"Contribute constructively to discussions",
45+
"Respect other community members",
46+
"Report inappropriate behavior",
47+
],
48+
},
49+
];
50+
51+
// Privacy Policy Options
52+
53+
export const PrivacyOptions: {
54+
title: string;
55+
subTitle: string;
56+
points: string[];
57+
}[] = [
58+
{
59+
title: "We are Transparent",
60+
subTitle: "Our verified privacy commitments:",
61+
points: [
62+
"We store user emails after encryption to manage user authenticity",
63+
"Client-Side Processing: All email processing happens in your browser",
64+
"Open Source: Our entire codebase is public and can be audited",
65+
"Minimal Data: We only request essential Gmail API permissions",
66+
"User Control: You can revoke our access to your Gmail at any time",
67+
],
68+
},
69+
{
70+
title: "Auth Integration",
71+
subTitle: "User can Oauth using GitHub or Google",
72+
points: [
73+
"We request access to your Gmail data only after receiving your explicit consent",
74+
"If user is authenticating via GitHub, we only request access for their associated email and avatar",
75+
"Your Google account credentials are never stored on our servers",
76+
"We use secure OAuth 2.0 authentication provided by Google",
77+
"You can revoke our access to your Google account at any time through your Google Account settings and same goes with GitHub",
78+
],
79+
},
80+
{
81+
title: "Self-Hosted Instances",
82+
subTitle: "",
83+
points: [
84+
"When you self-host Zenorizon, your email data remains entirely under your control",
85+
"No data is sent to our servers or third parties without your explicit consent",
86+
"You maintain complete ownership and responsibility for your data",
87+
"We provide detailed documentation on secure self-hosting practices",
88+
"You can configure your own data retention and backup policies",
89+
],
90+
},
91+
{
92+
title: "Data Sharing and Transfer",
93+
subTitle: "",
94+
points: [
95+
"Google user data is never shared with third parties except as required for core service functionality",
96+
"When necessary, we only work with service providers who comply with Google API Services User Data Policy",
97+
"All service providers are bound by strict confidentiality agreements",
98+
"We maintain a current list of all third-party service providers with access to Google user data",
99+
"Data sharing agreements are reviewed annually",
100+
"Users are notified of any material changes to our data sharing practices",
101+
],
102+
},
103+
{
104+
title: "Security Response",
105+
subTitle: "We continuously maintain and improvise the security checks",
106+
points: [
107+
"Dedicated security monitoring to detect and respond to threats in real-time",
108+
"Well-defined escalation process for handling security incidents efficiently",
109+
"Ongoing internal security education and best practices for all developers and staff",
110+
],
111+
},
112+
];

0 commit comments

Comments
 (0)