"use client" import { Gmail, GoogleDrive, Granola, MCPIcon, Notion } from "@ui/assets/icons" import { GradientLogo } from "@ui/assets/Logo" import { Button } from "@ui/components/button" import { cn } from "@lib/utils" import { ArrowRight, Loader2, ShieldCheck } from "lucide-react" import { useState } from "react" import { toast } from "sonner" import { SlackMark } from "@/components/brain-connector-icons" import { analytics } from "@/lib/analytics" import { dmSans125ClassName } from "@/lib/fonts" const BACKEND = process.env.NEXT_PUBLIC_BACKEND_URL ?? "https://api.supermemory.ai" export const CHECKOUT_RETURN_PARAM = "brainTrial" const TRIAL_DAYS = 14 /** The only reminder that lands before the charge; 15 and 17 are post-trial. */ const REMINDER_DAY = 12 const MONTHLY_PRICE = "$100" function checkoutReturnUrl(): string { const url = new URL(window.location.href) url.searchParams.set(CHECKOUT_RETURN_PARAM, "complete") return url.toString() } function dayOffset(days: number): string { const at = new Date(Date.now() + days * 24 * 60 * 60 * 1000) return at.toLocaleDateString(undefined, { month: "short", day: "numeric" }) } const ORBIT = [ { key: "slack", r: 74, deg: 0, node: }, { key: "gmail", r: 74, deg: 128, node: }, { key: "notion", r: 74, deg: 236, node: }, { key: "drive", r: 112, deg: 58, node: }, { key: "granola", r: 112, deg: 172, node: }, { key: "mcp", r: 112, deg: 296, node: }, ] const SPIN = "motion-safe:animate-[spin_44s_linear_infinite]" const SPIN_BACK = "motion-safe:animate-[spin_44s_linear_infinite_reverse]" function BrainPanel() { return (
) } function TimelineRow({ date, title, value, current, }: { date: string title: string value?: string current?: boolean }) { return (
  • ) } export function StepTrial({ onActive }: { onActive: () => void }) { const [starting, setStarting] = useState(false) const start = async () => { if (starting) return setStarting(true) analytics.brainTrialCheckoutStarted() try { const res = await fetch(`${BACKEND}/brain/trial/start`, { method: "POST", credentials: "include", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ successUrl: checkoutReturnUrl() }), }) const data = (await res.json()) as { checkoutUrl?: string | null status?: string error?: string } if (res.status === 409 || data.error === "trial_unavailable") { throw new Error( "This workspace has already used its free trial. Upgrade from billing to continue.", ) } if (!res.ok) throw new Error(data.error ?? "Couldn't start the trial.") if (data.checkoutUrl) { window.location.href = data.checkoutUrl return } if (data.status === "already_active" || data.status === "attached") { onActive() return } throw new Error("Couldn't start the trial.") } catch (error) { console.error("Failed to start trial:", error) toast.error( error instanceof Error ? error.message : "Couldn't start the trial.", ) setStarting(false) } } return (

    Start your {TRIAL_DAYS}-day free trial

    Add a payment method to start. You will not be charged today. We will email you before your first payment.

    Secured by Stripe · Cancel in one click

    ) }