/* ====================================================== UPDATE WEBSITE RESULTS ====================================================== */ function updateWebsiteResults(){ const roi = calculateROI(); const totalProductivityValueAnnual = roi.revenue.annualGrowth + roi.labor.savingsAnnual; /* ------------------------- TOP 3 ------------------------- */ setText( "out_total_productivity_value_annual", money(totalProductivityValueAnnual) ); setText( "out_revenue_growth_rate_hero", percent(roi.revenue.growthRate) ); setText( "out_labor_efficiency_hero", percent( roi.assumptions.laborEfficiencyRate ) ); /* ------------------------- WEBSITE RESULTS ------------------------- */ setText( "out_annual_revenue_uplift", money(roi.revenue.annualGrowth) ); setText( "out_labor_hours_saved_annual", hours(roi.labor.hoursSavedAnnual) ); setText( "out_labor_cost_savings_annual", money(roi.labor.savingsAnnual) ); setText( "out_labor_savings_per_store_annual", roi.labor.savingsPerStoreAnnual === null ? "N/A" : money( roi.labor.savingsPerStoreAnnual ) ); /* ------------------------- HIDDEN / EMAIL OUTPUTS ------------------------- */ setText( "out_industry", roi.input.industry || "—" ); setText( "out_retail_channels", roi.input.retailChannels || "—" ); setText( "out_annual_revenue", money(roi.input.annualRevenue) ); setText( "out_stores", roi.input.stores ); setText( "out_staff", roi.input.staff ); setText( "out_wage", money(roi.input.hourlyWage) ); /* CALCULATOR ASSUMPTION */ setText( "out_revenue_growth_rate", percent(roi.revenue.growthRate) ); setText( "out_labor_efficiency_rate", percent( roi.assumptions.laborEfficiencyRate ) ); setText( "out_staff_hours_per_week", roi.assumptions.staffHoursPerWeek ); /* ESTIMATED RESULTS */ const revenueGrowthMonthly = roi.revenue.annualGrowth / 12; const totalProductivityValueMonthly = revenueGrowthMonthly + roi.labor.savingsMonthly; setText( "out_total_productivity_value_monthly", money(totalProductivityValueMonthly) ); setText( "out_total_productivity_value_annual", money(totalProductivityValueAnnual) ); setText( "out_revenue_growth_monthly", money(revenueGrowthMonthly) ); setText( "out_labor_hours_saved_monthly", hours(roi.labor.hoursSavedMonthly) ); setText( "out_labor_cost_savings_monthly", money(roi.labor.savingsMonthly) ); setText( "out_labor_savings_per_store_monthly", roi.labor.savingsPerStoreMonthly === null ? "N/A" : money( roi.labor.savingsPerStoreMonthly ) ); } /* ====================================================== UPDATE WEBSITE RESULTS ====================================================== */ function updateWebsiteResults(){ const roi = calculateROI(); /* ------------------------- HERO CARDS ------------------------- */ setText( "out_annual_revenue_uplift_hero", money(roi.revenue.annualGrowth) ); setText( "out_revenue_growth_rate_hero", percent(roi.revenue.growthRate) ); setText( "out_labor_efficiency_hero", percent( roi.assumptions.laborEfficiencyRate ) ); /* ------------------------- WEBSITE RESULT ROWS ------------------------- */ setText( "out_annual_revenue_uplift", money(roi.revenue.annualGrowth) ); setText( "out_labor_cost_savings_annual", money(roi.labor.savingsAnnual) ); setText( "out_labor_hours_saved_annual", hours(roi.labor.hoursSavedAnnual) ); setText( "out_labor_savings_per_store_annual", roi.labor.savingsPerStoreAnnual === null ? "N/A" : money( roi.labor.savingsPerStoreAnnual ) ); /* ------------------------- OPTIONAL OUTPUTS These do not have to exist on the page. They are updated only if you add them later. ------------------------- */ setText( "out_revenue_growth_rate", percent(roi.revenue.growthRate) ); setText( "out_labor_efficiency_rate", percent( roi.assumptions.laborEfficiencyRate ) ); setText( "out_staff_hours_per_week", roi.assumptions.staffHoursPerWeek ); setText( "out_labor_cost_savings_monthly", money(roi.labor.savingsMonthly) ); setText( "out_labor_hours_saved_monthly", hours(roi.labor.hoursSavedMonthly) ); setText( "out_labor_savings_per_store_monthly", roi.labor.savingsPerStoreMonthly === null ? "N/A" : money( roi.labor.savingsPerStoreMonthly ) ); } /* ====================================================== BUILD EMAIL HTML ====================================================== */ function buildEmailHTML(){ const roi = calculateROI(); const input = roi.input; const perStoreMonthly = roi.labor.savingsPerStoreMonthly === null ? "N/A" : money( roi.labor.savingsPerStoreMonthly ); const perStoreAnnual = roi.labor.savingsPerStoreAnnual === null ? "N/A" : money( roi.labor.savingsPerStoreAnnual ); return `
Your Retail Software Productivity Estimate
Thanks for using Celerant's Productivity Calculator.
Based on the information you provided, we generated an estimated breakdown of the potential revenue growth, labor savings, and operational efficiency your business could achieve with a more streamlined retail software platform.
View Pricing | Request a Demo
BUSINESS INPUTS
| Metric | Value |
| Industry | ${input.industry || "—"} |
| Retail Channels | ${input.retailChannels || "—"} |
| Annual Revenue (Estimated) | ${money(input.annualRevenue)} |
| Store Locations | ${input.stores} |
| Number of Staff | ${input.staff} |
| Average Hourly Staff Wage | ${money(input.hourlyWage)} per hour |
CALCULATOR ASSUMPTIONS
| Assumption | Value |
| Revenue Uptick Percentage | ${percent(roi.revenue.growthRate)} |
| Estimated Labor Efficiency | ${percent( roi.assumptions.laborEfficiencyRate )} |
| Assumed Average Staff Hours Per Week | ${roi.assumptions.staffHoursPerWeek} hours |
ESTIMATED RESULTS
| Metric | Monthly | Yearly |
| Total Productivity Value | ${money(totalProductivityValueMonthly)} | ${money(totalProductivityValueAnnual)} |
| Estimated Revenue Growth | ${money( roi.revenue.annualGrowth / 12 )} | ${money( roi.revenue.annualGrowth )} |
| Labor Cost Savings | ${money( roi.labor.savingsMonthly )} | ${money( roi.labor.savingsAnnual )} |
| Labor Hours Saved | ${hours( roi.labor.hoursSavedMonthly )} hours | ${hours( roi.labor.hoursSavedAnnual )} hours |
| Labor Savings per Store | ${perStoreMonthly} | ${perStoreAnnual} |
HOW THESE ESTIMATES ARE CALCULATED
- Revenue Uptick Percentage: Begins at 1.5% for businesses selling through one retail channel and 2% for businesses selling both in-store and online. An additional 0.1 percentage point is added for each physical store location, up to a maximum store adjustment of 1%. The total estimated revenue growth rate is capped at 3.5%.
- Estimated Revenue Growth: Calculated by multiplying estimated annual revenue by the calculated revenue uptick percentage.
- Estimated Labor Efficiency: The calculator assumes a 7.5% improvement in labor efficiency from more streamlined retail operations and workflows.
- Staff Hours: The calculator assumes each staff member works an average of 30 hours per week.
- Labor Hours Saved: Calculated by applying the estimated labor efficiency percentage to total estimated staff hours.
- Labor Cost Savings: Calculated by applying the estimated labor efficiency percentage to estimated annual labor cost.
- Labor Savings per Store: Estimated labor savings divided across the number of physical store locations entered.
These figures are estimates based on information provided and assumptions used by the calculator. Actual results may vary and are not guaranteed.
Ready to Simplify Your Retail Operations?
See how Celerant can help improve efficiency, streamline operations, and support your business growth.
Request a Demo View Pricing `; } /* ====================================================== LIVE RECALCULATION ====================================================== */ document.addEventListener( "input", updateWebsiteResults ); document.addEventListener( "change", updateWebsiteResults ); /* ====================================================== CREATE EMAIL HTML ON SUBMIT ====================================================== */ document.addEventListener( "submit", function(){ /* Calculate one final time immediately before HubSpot processes the form. */ updateWebsiteResults(); const quizField = document.querySelector( '[name="quiz__results_for_email"]' ); if(!quizField) return; quizField.value = buildEmailHTML(); /* Fire events so HubSpot knows the hidden field was updated. */ quizField.dispatchEvent( new Event("input", { bubbles: true }) ); quizField.dispatchEvent( new Event("change", { bubbles: true }) ); }, true ); /* ====================================================== INITIAL CALCULATION ====================================================== */ document.addEventListener( "DOMContentLoaded", updateWebsiteResults ); })();