Skip to content
Merged

fix #996

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
80 changes: 57 additions & 23 deletions apps/mail/app/(full-width)/pricing/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,21 @@ import {
import { Sheet, SheetContent, SheetHeader, SheetTitle, SheetTrigger } from '@/components/ui/sheet';
import { PixelatedBackground } from '@/components/home/pixelated-bg';
import { CircleCheck, CircleX } from '@/components/icons/icons';
import PricingCard from '@/components/pricing/pricing-card';
import Comparision from '@/components/pricing/comparision';
import { TextShimmer } from '@/components/ui/text-shimmer';
import { Separator } from '@/components/ui/separator';
import { useBilling } from '@/hooks/use-billing';
import { Button } from '@/components/ui/button';
import Footer from '@/components/home/footer';
import { useCustomer } from 'autumn-js/next';
import { useState, useMemo } from 'react';
import { Menu } from 'lucide-react';
import Image from 'next/image';
import { toast } from 'sonner';
import Link from 'next/link';
import { signIn } from '@/lib/auth-client';


const resources = [
{
Expand Down Expand Up @@ -88,8 +94,11 @@ export default function PricingPage() {
return (
<main className="relative flex h-screen flex-1 flex-col overflow-x-hidden bg-[#0F0F0F]">
<PixelatedBackground
className="z-1 absolute -top-72 left-1/2 h-auto w-screen min-w-[1920px] -translate-x-1/2 object-cover opacity-5"
style={{ mixBlendMode: 'screen' }}
className="z-1 absolute left-1/2 top-[-40px] h-auto w-screen min-w-[1920px] -translate-x-1/2 object-cover"
style={{
mixBlendMode: 'screen',
maskImage: 'linear-gradient(to bottom, black, transparent)',
}}
/>

{/* Desktop Navigation - Hidden on mobile */}
Expand All @@ -98,7 +107,9 @@ export default function PricingPage() {
<div className="flex items-center gap-6">
<a href="/" className="relative bottom-1 cursor-pointer">
<Image src="white-icon.svg" alt="Zero Email" width={22} height={22} />
<span className="text-muted-foreground absolute -right-[-0.5px] text-[10px]">beta</span>
<span className="text-muted-foreground absolute -right-[-0.5px] text-[10px]">
beta
</span>
</a>
<NavigationMenu>
<NavigationMenuList className="gap-1">
Expand Down Expand Up @@ -142,11 +153,24 @@ export default function PricingPage() {
</NavigationMenu>
</div>
<div className="flex gap-2">
<a href="/login">
<Button variant="ghost" className="h-8">
Sign in
</Button>
</a>
<Button
variant="ghost"
className="h-8"
onClick={() => {
toast.promise(
signIn.social({
provider: 'google',
callbackURL: `${process.env.NEXT_PUBLIC_APP_URL}/mail`,
}),
{
error: 'Login redirect failed',
},
);
}}
>
Sign in
</Button>

<a target="_blank" href="https://cal.com/team/0">
<Button className="h-8 font-medium">Contact Us</Button>
</a>
Expand Down Expand Up @@ -207,15 +231,21 @@ export default function PricingPage() {
</Sheet>
</div>

<div className="container mx-auto mt-12 h-screen px-4 py-16 md:mt-24">
<div className="container mx-auto mb-20 mt-12 h-screen px-4 py-16 md:mt-44">
<div className="mb-12 text-center">
<h1 className="mb-2 text-4xl font-bold text-white md:text-6xl">Pricing</h1>
<p className="text-lg text-white/50">Choose the plan that's right for you</p>
<h1 className="mb-2 self-stretch text-5xl font-medium leading-[62px] text-white md:text-6xl">
Simple, Transparent Pricing
</h1>
<p className="mt-6 text-2xl font-light text-[#B8B8B9]">
Choose the plan that's right for you
</p>
</div>

<div className="mx-auto grid max-w-5xl grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-3">
<div className="mx-auto max-w-5xl px-4">
{/* Free Plan */}
<div className="relative flex h-full flex-col rounded-xl border bg-[#121212] px-8 pb-4 pt-8">
<PricingCard />

{/* <div className="relative flex h-full flex-col rounded-xl border bg-[#121212] px-8 pb-4 pt-8">
<h1 className="mb-4 text-center text-lg font-normal text-white/50">Free</h1>
<div className="mb-4 text-center text-3xl font-bold dark:text-white">
$0 <span className="text-lg font-medium">/ mo</span>
Expand Down Expand Up @@ -243,7 +273,7 @@ export default function PricingPage() {
AI thread summaries <span className="text-xs text-white/50">(25 per day)</span>
</span>
</li>
{/* <li className="flex items-center gap-2">
<li className="flex items-center gap-2">
<CircleX className="h-4 w-4 fill-white opacity-50" /> Instant thread AI-generated
summaries
</li>
Expand All @@ -253,15 +283,15 @@ export default function PricingPage() {
</li>
<li className="flex items-center gap-2">
<CircleX className="h-4 w-4 fill-white opacity-50" /> Priority customer support
</li> */}
</li>
</ul>
<a href="/login">
<Button className="h-8 w-full">Get Started</Button>
</a>
</div>
</div> */}

{/* Pro Plan */}
<div className="relative flex h-full flex-col rounded-xl border bg-[#121212] px-8 pb-4 pt-8">
{/* <div className="relative flex h-full flex-col rounded-xl border bg-[#121212] px-8 pb-4 pt-8">
<h1 className="mb-4 text-center text-lg font-normal text-white/50">Pro</h1>

<div className="mb-4 text-center text-3xl font-bold dark:text-white">
Expand Down Expand Up @@ -293,10 +323,10 @@ export default function PricingPage() {
<Button className="h-8 w-full" onClick={handleUpgrade}>
Get Started
</Button>
</div>
</div> */}

{/* Enterprise Plan */}
<div className="relative flex h-full flex-col rounded-xl border bg-[#121212] px-8 pb-4 pt-8">
{/* <div className="relative flex h-full flex-col rounded-xl border bg-[#121212] px-8 pb-4 pt-8">
<h1 className="mb-4 text-center text-lg font-normal text-white/50">Enterprise</h1>

<div className="mb-4 text-center text-3xl font-bold dark:text-white">Contact us</div>
Expand All @@ -323,9 +353,7 @@ export default function PricingPage() {
<CircleCheck className="h-4 w-4 fill-[#2FAD71]" /> Verified checkmark
</li>

{/* <li className="flex items-center gap-2">
<CircleCheck className="h-4 w-4 fill-[#2FAD71]" /> Management dashboard
</li> */}


<li className="flex items-center gap-2">
<CircleCheck className="h-4 w-4 fill-[#2FAD71]" /> Priority customer support
Expand All @@ -336,9 +364,15 @@ export default function PricingPage() {
Contact us
</Button>
</a>
</div>
</div> */}
</div>
</div>
<div className="mx-12 mt-[500px] md:mt-12">
<Comparision />
</div>
<div className="mt-20">
<Footer />
</div>
</main>
);
}
154 changes: 109 additions & 45 deletions apps/mail/app/(full-width)/privacy/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import { useRouter } from 'next/navigation';
import { toast } from 'sonner';
import React from 'react';

const LAST_UPDATED = 'February 13, 2025';
const LAST_UPDATED = 'May 16, 2025';

export default function PrivacyPolicy() {
const router = useRouter();
Expand Down Expand Up @@ -93,11 +93,27 @@ const sections = [
{
title: 'Our Commitment to Privacy',
content: (
<p>
At Zero, we believe that privacy is a fundamental right. Our open-source email solution is
built with privacy at its core, and we&apos;re committed to being transparent about how we
handle your data.
</p>
<div className="space-y-4">
<p>
At Zero, we believe that privacy is a fundamental right. Our open-source email solution is
built with privacy at its core, and we&apos;re committed to being transparent about how we
handle your data.
</p>
<p className="font-semibold">
Important: Zero is a client-only email application. We DO NOT store your emails on our servers.
All email data is processed directly between your browser and Gmail.
</p>
<p>
Our verified privacy commitments:
</p>
<ul className="ml-4 list-disc space-y-2">
<li>Zero Email Storage: We never store your emails - they remain in your Gmail account</li>
<li>Client-Side Processing: All email processing happens in your browser</li>
<li>Open Source: Our entire codebase is public and can be audited</li>
<li>Minimal Data: We only request essential Gmail API permissions</li>
<li>User Control: You can revoke our access to your Gmail at any time</li>
</ul>
</div>
),
},
{
Expand Down Expand Up @@ -126,16 +142,12 @@ const sections = [
<h3 className="mb-3 text-lg font-medium">Google Services Data Handling</h3>
<ul className="ml-4 list-disc space-y-2">
<li>Email data is processed in accordance with Google API Services User Data Policy</li>
<li>
We only process and display email data - we don&apos;t store copies of your emails
</li>
<li>
All data transmission between our service and Google is encrypted using
industry-standard protocols
</li>
<li>
We maintain limited temporary caches only as necessary for application functionality
</li>
<li>We only process and display email data - we don&apos;t store copies of your emails</li>
<li>All data transmission between our service and Google is encrypted using industry-standard TLS 1.3 protocols</li>
<li>We maintain limited temporary caches only as necessary for application functionality, with a maximum retention period of 24 hours</li>
<li>Cached data is encrypted at rest using AES-256 encryption</li>
<li>We collect basic usage analytics (page views, feature usage) to improve the service, but this data is anonymized</li>
<li>Error logs are retained for 30 days to help diagnose and fix issues</li>
</ul>
</div>
<div>
Expand All @@ -144,6 +156,18 @@ const sections = [
<li>When you self-host Zero, your email data remains entirely under your control</li>
<li>No data is sent to our servers or third parties without your explicit consent</li>
<li>You maintain complete ownership and responsibility for your data</li>
<li>We provide detailed documentation on secure self-hosting practices</li>
<li>You can configure your own data retention and backup policies</li>
<li>Optional telemetry can be enabled to help us improve the platform</li>
</ul>
</div>
<div>
<h3 className="mb-3 text-lg font-medium">Data Processing Locations</h3>
<ul className="ml-4 list-disc space-y-2">
<li>All data processing occurs in secure data centers in the United States</li>
<li>Self-hosted instances can choose their own data processing location</li>
<li>We comply with international data transfer regulations</li>
<li>Data processing agreements are available for enterprise users</li>
</ul>
</div>
</div>
Expand All @@ -152,13 +176,39 @@ const sections = [
{
title: 'Data Protection and Security',
content: (
<ul className="ml-4 list-disc space-y-2">
<li>End-to-end encryption for all email communications</li>
<li>Secure OAuth 2.0 authentication for Google services</li>
<li>Regular security audits and updates</li>
<li>Open-source codebase for transparency and community review</li>
<li>Compliance with Google API Services User Data Policy</li>
</ul>
<div className="space-y-6">
<div>
<h3 className="mb-3 text-lg font-medium">Security Measures</h3>
<ul className="ml-4 list-disc space-y-2">
<li>End-to-end encryption for all email communications using industry-standard protocols</li>
<li>Secure OAuth 2.0 authentication for Google services with strict scope limitations</li>
<li>Regular third-party security audits and penetration testing</li>
<li>Open-source codebase for transparency and community security review</li>
<li>Compliance with Google API Services User Data Policy and security requirements</li>
<li>Real-time monitoring for suspicious activities and potential security threats</li>
<li>Automated security patches and dependency updates</li>
</ul>
</div>
<div>
<h3 className="mb-3 text-lg font-medium">Infrastructure Security</h3>
<ul className="ml-4 list-disc space-y-2">
<li>All servers are hosted in SOC 2 Type II certified data centers</li>
<li>Network-level security with enterprise-grade firewalls</li>
<li>Regular backup and disaster recovery testing</li>
<li>Multi-factor authentication required for all administrative access</li>
<li>Encryption at rest for all stored data using AES-256</li>
</ul>
</div>
<div>
<h3 className="mb-3 text-lg font-medium">Security Response</h3>
<ul className="ml-4 list-disc space-y-2">
<li>24/7 security incident response team</li>
<li>Bug bounty program for responsible security disclosure</li>
<li>Incident response plan with clear notification procedures</li>
<li>Regular security training for all team members</li>
</ul>
</div>
</div>
),
},
{
Expand All @@ -168,43 +218,57 @@ const sections = [
<div>
<h3 className="mb-3 text-lg font-medium">Data Access and Usage</h3>
<ul className="ml-4 list-disc space-y-2">
<li>
We access the following Google user data: email content, attachments, and metadata
through Gmail API
<li>We access the following Google user data through the Gmail API:
<ul className="ml-4 list-disc space-y-1 mt-2">
<li>Email content and attachments</li>
<li>Email metadata (subject, dates, recipients)</li>
<li>Labels and folder structure</li>
<li>Basic profile information</li>
</ul>
</li>
<li>This data is used exclusively for providing email functionality within Zero</li>
<li>No Google user data is used for advertising or marketing purposes</li>
<li>We maintain detailed logs of all data access for security and compliance</li>
<li>No Google user data is used for advertising, marketing, or profiling purposes</li>
<li>We maintain detailed audit logs of all data access for security and compliance</li>
<li>Access to user data is strictly limited to essential personnel</li>
</ul>
</div>
<div>
<h3 className="mb-3 text-lg font-medium">Data Sharing and Transfer</h3>
<ul className="ml-4 list-disc space-y-2">
<li>
Google user data is never shared with third parties except as required for core
service functionality
</li>
<li>
When necessary, we only work with service providers who comply with Google API
Services User Data Policy
</li>
<li>Google user data is never shared with third parties except as required for core service functionality</li>
<li>When necessary, we only work with service providers who comply with Google API Services User Data Policy</li>
<li>All service providers are bound by strict confidentiality agreements</li>
<li>
We maintain a current list of all third-party service providers with access to Google
user data
</li>
<li>We maintain a current list of all third-party service providers with access to Google user data</li>
<li>Data sharing agreements are reviewed annually</li>
<li>Users are notified of any material changes to our data sharing practices</li>
</ul>
</div>
<div>
<h3 className="mb-3 text-lg font-medium">Data Retention and Deletion</h3>
<ul className="ml-4 list-disc space-y-2">
<li>Email data is processed in real-time and not permanently stored</li>
<li>Temporary caches are automatically cleared within 24 hours</li>
<li>All Google user data is permanently deleted when you revoke application access</li>
<li>
You can request immediate deletion of all your Google user data by contacting
founders@0.email
<li>Temporary caches are automatically cleared after 24 hours</li>
<li>Users can request immediate deletion of their cached data</li>
<li>Account deletion process:
<ul className="ml-4 list-disc space-y-1 mt-2">
<li>All user data is immediately marked for deletion</li>
<li>Cached data is purged within 24 hours</li>
<li>Audit logs are retained for 30 days then permanently deleted</li>
<li>Backup data is removed within 7 days</li>
</ul>
</li>
<li>We provide a data export tool for users to download their settings</li>
</ul>
</div>
<div>
<h3 className="mb-3 text-lg font-medium">User Rights and Controls</h3>
<ul className="ml-4 list-disc space-y-2">
<li>Right to access: Request a copy of your data</li>
<li>Right to rectification: Correct inaccurate data</li>
<li>Right to erasure: Request deletion of your data</li>
<li>Right to restrict processing: Limit how we use your data</li>
<li>Right to data portability: Export your data</li>
<li>Right to object: Opt-out of certain data processing</li>
</ul>
</div>
</div>
Expand Down
1 change: 1 addition & 0 deletions apps/mail/app/(routes)/mail/layout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ export default async function MailLayout({ children }: { children: React.ReactNo
<div className="bg-lightBackground dark:bg-darkBackground w-full">{children}</div>
<OnboardingWrapper />
<NotificationProvider headers={Object.fromEntries(headersList.entries())} />

</HotkeyProviderWrapper>
);
}
Loading