I am rimport React, { useMemo, useState } from "react";
import { motion } from "framer-motion";
import { Card, CardContent } from "@/components/ui/card";
import { Button } from "@/components/ui/button";
const BLUE = "#0077c8";
const GREEN = "#97d700";
const TEXT = "#111111";
function formatCurrency(value) {
return new Intl.NumberFormat("en-US", {
style: "currency",
currency: "USD",
maximumFractionDigits: 0,
}).format(Number(value) || 0);
}
function formatPercent(value) {
return `${Number(value || 0).toFixed(1)}%`;
}
export function calculateROI({
monthlyUnits = 0,
avgGross = 0,
conversionRate = 0,
grossLift = 0,
conversionLift = 0,
}) {
const safeMonthlyUnits = Number(monthlyUnits) || 0;
const safeAvgGross = Number(avgGross) || 0;
const safeConversionRate = Number(conversionRate) || 0;
const safeGrossLift = Number(grossLift) || 0;
const safeConversionLift = Number(conversionLift) || 0;
const additionalUnits = safeMonthlyUnits * (safeConversionLift / 100);
const grossFromHigherValue = safeMonthlyUnits * safeGrossLift;
const grossFromMoreUnits = additionalUnits * safeAvgGross;
const monthlyLift = grossFromHigherValue + grossFromMoreUnits;
const annualLift = monthlyLift * 12;
const newConversionRate = safeConversionRate * (1 + safeConversionLift / 100);
return {
additionalUnits,
grossFromHigherValue,
grossFromMoreUnits,
monthlyLift,
annualLift,
newConversionRate,
};
}
function runROITests() {
const tests = [
{
name: "default assumptions",
input: { monthlyUnits: 85, avgGross: 1800, conversionRate: 14, grossLift: 900, conversionLift: 18 },
expected: {
additionalUnits: 15.3,
grossFromHigherValue: 76500,
grossFromMoreUnits: 27540,
monthlyLift: 104040,
annualLift: 1248480,
newConversionRate: 16.52,
},
},
{
name: "zero assumptions",
input: { monthlyUnits: 0, avgGross: 0, conversionRate: 0, grossLift: 0, conversionLift: 0 },
expected: {
additionalUnits: 0,
grossFromHigherValue: 0,
grossFromMoreUnits: 0,
monthlyLift: 0,
annualLift: 0,
newConversionRate: 0,
},
},
{
name: "string inputs are safely coerced",
input: { monthlyUnits: "10", avgGross: "2000", conversionRate: "12", grossLift: "500", conversionLift: "10" },
expected: {
additionalUnits: 1,
grossFromHigherValue: 5000,
grossFromMoreUnits: 2000,
monthlyLift: 7000,
annualLift: 84000,
newConversionRate: 13.2,
},
},
];
tests.forEach(({ name, input, expected }) => {
const actual = calculateROI(input);
Object.keys(expected).forEach((key) => {
const pass = Math.abs(actual[key] - expected[key]) < 0.001;
if (!pass) {
// eslint-disable-next-line no-console
console.error(`ROI test failed: ${name} / ${key}. Expected ${expected[key]}, got ${actual[key]}`);
}
});
});
}
runROITests();
function SvgIcon({ children, className = "h-5 w-5", color = BLUE }) {
return (
);
}
function CheckCircleIcon({ className = "h-5 w-5", color = GREEN }) {
return (
Turn inventory into Trusted Retail Vehicles.
Make reconditioning visible, give customers proof, and help your sales team sell value instead of defending price.
Used Cars = Low Trust
Dealers are investing more into vehicles than ever. But when customers cannot see the work, price becomes everything.
{title}
{text}
The Trusted Sale Framework
A simple system for making value visible across listings, showroom conversations, and sales follow-up.
Estimate the upside of visible trust.
Use directional assumptions to model how higher gross and stronger conversion could impact monthly and annual profit.
Directional model based on your selected monthly volume, gross lift, and conversion lift assumptions.
You’re already doing the work.
Now get paid for it.
Click edit button to change this html