diff --git a/apps/mail/components/pricing/comparision.tsx b/apps/mail/components/pricing/comparision.tsx
index f5d20dcc9..a571d62d5 100644
--- a/apps/mail/components/pricing/comparision.tsx
+++ b/apps/mail/components/pricing/comparision.tsx
@@ -280,7 +280,7 @@ export default function Comparision() {
>
- Get Zero Pro
+ Start free trial
diff --git a/apps/mail/components/pricing/pricing-card.tsx b/apps/mail/components/pricing/pricing-card.tsx
index c081f4abb..19644bc47 100644
--- a/apps/mail/components/pricing/pricing-card.tsx
+++ b/apps/mail/components/pricing/pricing-card.tsx
@@ -262,7 +262,7 @@ export default function PricingCard() {
>
- Get Zero Pro
+ Start free trial
diff --git a/apps/mail/components/ui/pricing-dialog.tsx b/apps/mail/components/ui/pricing-dialog.tsx
index daf731026..ef881d58e 100644
--- a/apps/mail/components/ui/pricing-dialog.tsx
+++ b/apps/mail/components/ui/pricing-dialog.tsx
@@ -10,6 +10,8 @@ import { useBilling } from '@/hooks/use-billing';
import { Button } from '@/components/ui/button';
import { cn } from '@/lib/utils';
import { useState, useEffect } from 'react';
+import { PricingSwitch } from './pricing-switch';
+import { Badge } from './badge';
import { toast } from 'sonner';
import { useQueryState } from 'nuqs';
@@ -22,7 +24,10 @@ interface PricingDialogProps {
export function PricingDialog({ open: propOpen, onOpenChange: propOnOpenChange, children }: PricingDialogProps) {
const { attach } = useBilling();
const [isLoading, setIsLoading] = useState(false);
+ const [isAnnual, setIsAnnual] = useState(false);
const [pricingDialog, setPricingDialog] = useQueryState('pricingDialog');
+ const monthlyPrice = 20;
+ const annualPrice = monthlyPrice * 0.5; // 50% off for annual billing
const isControlled = propOpen !== undefined;
const open = isControlled ? propOpen : pricingDialog === 'true';
@@ -44,10 +49,11 @@ export function PricingDialog({ open: propOpen, onOpenChange: propOnOpenChange,
setIsLoading(true);
toast.promise(
attach({
- productId: 'pro-example',
+ productId: isAnnual ? 'pro_annual' : 'pro-example',
successUrl: `${window.location.origin}/mail/inbox?success=true`,
}),
{
+ success: 'Redirecting to payment...',
error: 'Failed to process upgrade. Please try again later.',
finally: () => setIsLoading(false),
},
@@ -88,20 +94,30 @@ export function PricingDialog({ open: propOpen, onOpenChange: propOnOpenChange,
-
-
-

+
+
+
+

+
+
+
+
setIsAnnual(checked)} />
+ Billed Annually
+ Save 50%
- $20
+ ${isAnnual ? annualPrice : monthlyPrice}
+ {isAnnual && (
+ ${monthlyPrice}
+ )}
@@ -116,7 +132,7 @@ export function PricingDialog({ open: propOpen, onOpenChange: propOnOpenChange,
-
+
@@ -124,7 +140,7 @@ export function PricingDialog({ open: propOpen, onOpenChange: propOnOpenChange,
-
+
@@ -132,7 +148,7 @@ export function PricingDialog({ open: propOpen, onOpenChange: propOnOpenChange,
-
+
@@ -140,7 +156,7 @@ export function PricingDialog({ open: propOpen, onOpenChange: propOnOpenChange,
-
+
@@ -148,7 +164,7 @@ export function PricingDialog({ open: propOpen, onOpenChange: propOnOpenChange,
-
+
@@ -156,7 +172,7 @@ export function PricingDialog({ open: propOpen, onOpenChange: propOnOpenChange,
-
+
@@ -164,7 +180,7 @@ export function PricingDialog({ open: propOpen, onOpenChange: propOnOpenChange,
-
+
@@ -180,7 +196,7 @@ export function PricingDialog({ open: propOpen, onOpenChange: propOnOpenChange,
>
- {isLoading ? 'Processing...' : 'Get Zero Pro'}
+ {isLoading ? 'Processing...' : 'Start free trial'}