// components/pricing/ROICalculator.tsx "use client"; import { useMemo, useState } from "react"; import { Plan } from "./types"; import { formatEUR } from "./money"; function targetUptime(planId: string) { return planId === "mission" ? 0.9999 : planId === "growth" ? 0.9995 : 0.999; } export default function ROICalculator({ plans }: { plans: Plan[] }) { const [planId, setPlanId] = useState("growth"); const [monthlyLeads, setMonthlyLeads] = useState(40); const [avgLeadValue, setAvgLeadValue] = useState(150); const [currentUptime, setCurrentUptime] = useState(0.995); // 99.5% const [deliverability, setDeliverability] = useState(0.85); // 85% const plan = plans.find((p) => p.id === planId)!; const result = useMemo(() => { const target = targetUptime(planId); const uptimeGain = Math.max(0, target - currentUptime); // fraction // assume +10pp absolute deliverability improvement (conservative) const deliverabilityGain = Math.max(0, 0.1 + (deliverability < 0.9 ? 0 : -0.02)); const recoveredLeads = monthlyLeads * uptimeGain + monthlyLeads * (deliverabilityGain * (1 - deliverability)); const recoveredRevenue = recoveredLeads * avgLeadValue; const planCost = plan.monthlyPrice; const roi = planCost ? (recoveredRevenue - planCost) / planCost : 0; return { target, uptimeGain, deliverabilityGain, recoveredLeads, recoveredRevenue, planCost, roi, }; }, [planId, plan, monthlyLeads, avgLeadValue, currentUptime, deliverability]); return (

Estimate your ROI

A simple, conservative model based on uptime & deliverability improvements.

setMonthlyLeads(Number(e.target.value || 0))} />
setAvgLeadValue(Number(e.target.value || 0))} />
setCurrentUptime(Number(e.target.value || 0))} />

e.g., 0.995 = 99.5%

setDeliverability(Number(e.target.value || 0))} />

e.g., 0.85 = 85%

Target uptime (plan)

{(result.target * 100).toFixed(3)}%

Recovered leads (est.)

{Math.max(0, Math.round(result.recoveredLeads))}

Monthly impact

{formatEUR(Math.max(0, Math.round(result.recoveredRevenue)))}

Estimated ROI

{result.planCost ? `${Math.round(result.roi * 100)}%` : "—"}

Impact is an estimate; we provide before/after proof during your first month.

); }