{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./app/javascript/packs/roi_calculator.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","increaseInUserActivation","UARPercentage","monthlyCustomerChurnPercentage","ARPAMonthly","trialsStartedPerMonth","trialToPayImproved","trialToPayBench","trialToPayDiff","monthlyCustomerChurn1","monthlyCustomerChurn2","monthlyCustomerChurn3","lifeTimeValue1","lifeTimeValue2","lifeTimeValue3","MRRLifetimeBenchArray","MRRLifetimeBenchArrayTotal","MRRLifetimeImprovedArray","MRRLifetimeImprovedArrayTotal","lifetimeMonthsArray","MRRLifetimetotalDiff","MRRLifetimetotalDiffPercentage","saasSlider","saasSliderValue","saasCalculatorChart","consumer_increaseInUserActivation","consumer_UARPercentage","ARPUMonthly","monthlyDownloads","_90DayUserRetentionTotalPercentage","_90DayUserRetentionFrom","_90DayUserRetentionDiff","weeklyActiveUsersTotal","weeklyActiveUsersFrom","weeklyActiveUsersDiff","consumerLifeTimeValueTotal","consumerLifeTimeValueFrom","consumerLifeTimeValueDiff","milestonesRetentionArray","consumerSlider","consumerSliderValue","consumerCalculatorChart","pc","numberFormatToCurrency","Intl","NumberFormat","style","currency","verifySwitchStatus","$elem","prop","$","addClass","removeClass","initConsumerSlider","initSaasSlider","initSaasCalc","calulateVariables","setUIValues","chartOptions","animation","duration","legend","display","elements","line","tension","responsive","maintainAspectRatio","tooltips","enabled","intersect","titleFontSize","bodyFontSize","bodySpacing","callbacks","label","tooltipItem","data","format","yLabel","split","title","itemSort","a","b","datasetIndex","scales","yAxes","ticks","callback","index","values","scaleLabel","labelString","xAxes","gridLines","ctx","document","getElementById","Chart","type","setChartData","options","defaultValue","undefined","text","oninput","this","recalculate","increaseInUserActivationVal","UARPercentageVal","monthlyCustomerChurnPercentageVal","ARPAMonthlyVal","trialsStartedPerMonthVal","improvedUARPercentage","activatedUserCountBench","activatedUserCountImproved","ACTIVATE_USER_CONVERSION_RATE","nonActivatedUserCountBench","nonActivatedUserCountImproved","NON_ACTIVATE_USER_CONVERSION_RATE","trialToPaidCountBench","trialToPaidCountImproved","monthlyRetentionBenchPercentage","UARAbsoluteIncreasePercentage","parseFloat","toString","substr","month1AdditionalCustomerImprovedAbsoluteCountFromNonActivatedCustomers","month1RetentionIncreasePercentage","annualRetentionImprovedPercentage","Math","pow","annualChurnBenchmarkPercentage","annualChurnImprovedPercentage","customerLifetimeMonthsBenchmark","customerLifetimeMonthsBenchmarkRounded","round","customerLifetimeMonthsImproved","customerLifetimeMonthsImprovedRounded","monthlyRetentionImprovedPercentage","toFixed","Array","customers","push","reduce","val","map","x","update","hide","show","totalRecurringRevenueVal","MRRLifetimetotalDiffVal","html","trialToPayImprovedRounded","trialToPayBenchRounded","trialToPayDiffRounded","monthlyCustomerChurn1Rounded","monthlyCustomerChurn3Rounded","monthlyCustomerChurn2Rounded","abs","lifetimeValue3Rounded","labels","datasets","fill","borderColor","backgroundColor","borderWidth","initConsumerAppCalc","calulateCustomerVariables","setCustomerUIValues","setConsumerChartData","recalculateConsumer","consumer_increaseInUserActivationVal","consumer_UARPercentageVal","ARPUMonthlyVal","monthlyDownloadsVal","consumer_improvedUARPercentage","RETENTION_DATA_PERCENTAGE","D1RetentionRateBench","D1RetentionRateImproved","D1D90RetentionPointIncrease","D90RetentionRateBench","annualChurnBench","annualChurnImproved","monthlyChurnBench","monthlyChurnImproved","userLifetimeMonthsBench","userLifetimeMonthsImproved","_90DayUserRetentionTotalVal","_90DayUserRetentionFromVal","_90DayUserRetentionDiffVal","weeklyActiveUsersTotalVal","weeklyActiveUsersFromVal","weeklyActiveUsersDiffVal","consumerLifeTimeValueTotalVal","consumerLifeTimeValueFromVal","consumerLifeTimeValueDiffVal","elemSwitch","querySelector","Switchery","color","secondaryColor","jackColor","className","speed","size","onchange","elemSwitchMobile","on","change"],"mappings":"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","file":"js/roi_calculator-f98038f0790a1f085a00.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/packs/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 2);\n","const debug = false;\n\n//used when in the spreadsheet we have % number\nconst pc = c => c / 100;\n\nconst currencyFormat = { style: 'currency', currency: 'USD'};\nconst numberFormatToCurrency = new Intl.NumberFormat('en-US', currencyFormat);\n\nfunction log(name, value) {\n console.log('%c' + name + ' %c ' + value, 'color: white; border: 1px solid grey; background: black', 'color: lightblue;');\n}\n\nfunction verifySwitchStatus($elem) {\n var isCustomerCalc = $elem.prop('checked');\n if (isCustomerCalc) {\n $('.saasUI').addClass('d-none');\n $('.consumerAppUI').removeClass('d-none');\n $('#consumer-app-calc-label').addClass('font-weight-bold');\n $('#consumer-app-calc-label-mobile').addClass('font-weight-bold');\n $('#saas-calc-label').removeClass('font-weight-bold');\n $('#saas-calc-label-mobile').removeClass('font-weight-bold');\n\n initConsumerSlider();\n } else {\n $('.saasUI').removeClass('d-none');\n $('.consumerAppUI').addClass('d-none');\n $('#consumer-app-calc-label').removeClass('font-weight-bold');\n $('#consumer-app-calc-label-mobile').removeClass('font-weight-bold');\n $('#saas-calc-label').addClass('font-weight-bold');\n $('#saas-calc-label-mobile').addClass('font-weight-bold');\n\n initSaasSlider();\n }\n}\n\n$(function() {\n var elemSwitch = document.querySelector('.js-switch');\n new Switchery(elemSwitch, {\n // primary color\n color: '#16ad6f',\n // secondary color\n secondaryColor: '#16ad6f',\n // primary handle color\n jackColor: '#fff',\n // default CSS class\n className: 'switchery',\n // animation speed\n speed: '0.4s',\n size: 'small'\n });\n\n verifySwitchStatus($(elemSwitch));\n\n elemSwitch.onchange = function() {\n verifySwitchStatus($(this));\n };\n\n //------- js swith mobile ------- \n var elemSwitchMobile = document.querySelector('.js-switch-mobile');\n new Switchery(elemSwitchMobile, {\n // primary color\n color: '#16ad6f',\n // secondary color\n secondaryColor: '#16ad6f',\n // primary handle color\n jackColor: '#fff',\n // default CSS class\n className: 'switchery',\n // animation speed\n speed: '0.4s',\n size: 'small'\n });\n\n verifySwitchStatus($(elemSwitchMobile));\n\n elemSwitchMobile.onchange = function() {\n verifySwitchStatus($(this));\n };\n\n\n $('#saasResetBenchmarkLink').on('click', function() {\n initSaasCalc();\n });\n\n $('#consumerAppresetBenchmarkLink').on('click', function() {\n initConsumerAppCalc();\n });\n});\n\n\n//++++++++++++++++++++++++++++++++++\nvar increaseInUserActivation;\n\nvar UARPercentage;\nvar monthlyCustomerChurnPercentage;\nvar ARPAMonthly;\nvar trialsStartedPerMonth;\n\nvar trialToPayImproved;\nvar trialToPayBench;\nvar trialToPayDiff;\nvar monthlyCustomerChurn1;\nvar monthlyCustomerChurn2;\nvar monthlyCustomerChurn3;\nvar lifeTimeValue1;\nvar lifeTimeValue2;\nvar lifeTimeValue3;\n\nvar MRRLifetimeBenchArray;\nvar MRRLifetimeBenchArrayTotal;\nvar MRRLifetimeImprovedArray;\nvar MRRLifetimeImprovedArrayTotal;\nvar lifetimeMonthsArray;\nvar MRRLifetimetotalDiff;\nvar MRRLifetimetotalDiffPercentage;\n\nvar saasSlider;\nvar saasSliderValue;\nvar saasCalculatorChart;\n\n$(function() {\n //*************** INIT ***************** */ \n initSaasCalc();\n\n //------------- EVENT HANDLERS -------------\n\n $('#txtUserActivationRate, #txtMonthlyCustomerChurn, #txtAvgMmonthlySubcription, #txtTrialsStartedPerMonth')\n .change(function() {\n recalculate();\n });\n});\n\nfunction initSaasCalc() {\n\n calulateVariables();\n setUIValues();\n initSaasSlider(0);\n\n //*************** CHART ***************** */\n var chartOptions = {\n animation: {\n duration: 0\n },\n legend: {\n display: false\n },\n elements: {\n line: {\n tension: 0.1 // disables bezier curves\n }\n },\n responsive: true, // Instruct chart js to respond nicely.\n maintainAspectRatio: true, // Add to prevent default behaviour of full-width/height,\n tooltips: {\n enabled: true,\n mode: 'index',\n intersect: false,\n titleFontSize: 14,\n bodyFontSize: 12,\n bodySpacing: 10,\n callbacks: {\n label: function(tooltipItem, data) {\n return numberFormatToCurrency.format(tooltipItem.yLabel).split('.')[0];\n },\n title: function(tooltipItem, data) {\n return \"MRR\";\n },\n },\n itemSort: function(a, b) {\n return b.datasetIndex - a.datasetIndex\n }\n },\n scales: {\n yAxes: [{\n ticks: {\n // Include a dollar sign in the ticks\n callback: function(value, index, values) {\n return '$' + (value / 1000) + 'k';\n }\n },\n scaleLabel: {\n display: true,\n labelString: 'Monthly recurring rev.'\n }\n }],\n xAxes: [{\n scaleLabel: {\n display: true,\n labelString: 'Customer lifetime (months)'\n },\n gridLines : {\n display : false\n }\n }]\n }\n };\n\n var ctx = document.getElementById('saasCalculatorChart');\n saasCalculatorChart = new Chart(ctx, {\n type: 'line',\n data: setChartData(),\n options: chartOptions\n });\n}\n\nfunction initSaasSlider(defaultValue) {\n saasSlider = document.getElementById(\"saasSlider\");\n\n if (defaultValue != undefined) {\n saasSlider.value = defaultValue;\n saasSliderValue = defaultValue;\n $('#saasSliderValue').text(defaultValue);\n }\n\n // Update the current slider value (each time you drag the slider handle)\n saasSlider.oninput = function() {\n $('#saasSliderValue').text(this.value);\n saasSliderValue = this.value;\n recalculate();\n };\n}\n\nfunction resetSaasCalculator() {\n initSaasCalc();\n}\n\nfunction calulateVariables(\n increaseInUserActivationVal = 0,\n UARPercentageVal = 25,\n monthlyCustomerChurnPercentageVal = 5.5,\n ARPAMonthlyVal = 100,\n trialsStartedPerMonthVal = 300\n) {\n\n ///////////////// EDITABLE BY USER ////////////////////\n increaseInUserActivation = pc(increaseInUserActivationVal);\n\n // BENCHMARKS\n UARPercentage = pc(UARPercentageVal);\n monthlyCustomerChurnPercentage = pc(monthlyCustomerChurnPercentageVal);\n ARPAMonthly = ARPAMonthlyVal;\n trialsStartedPerMonth = trialsStartedPerMonthVal;\n var improvedUARPercentage = UARPercentage * (1 + increaseInUserActivation);\n ///////////////////////////////////////////////////////\n\n // --- Active user data ---\n var activatedUserCountBench = trialsStartedPerMonth * UARPercentage;\n var activatedUserCountImproved = trialsStartedPerMonth * improvedUARPercentage;\n const ACTIVATE_USER_CONVERSION_RATE = 0.4; //(non active is~0.1)\n var nonActivatedUserCountBench = trialsStartedPerMonth - activatedUserCountBench;\n var nonActivatedUserCountImproved = trialsStartedPerMonth - activatedUserCountImproved;\n const NON_ACTIVATE_USER_CONVERSION_RATE = 0.1;\n\n // --- Trial to paid data PART #1 --- \n var trialToPaidCountBench = (activatedUserCountBench * ACTIVATE_USER_CONVERSION_RATE) + (nonActivatedUserCountBench * NON_ACTIVATE_USER_CONVERSION_RATE);\n var trialToPaidCountImproved = (activatedUserCountImproved * ACTIVATE_USER_CONVERSION_RATE) + (nonActivatedUserCountImproved * NON_ACTIVATE_USER_CONVERSION_RATE);\n var monthlyRetentionBenchPercentage = (100 - (monthlyCustomerChurnPercentage * 100)) / 100;\n\n // --- Assorted data PART #1 ---\n var UARAbsoluteIncreasePercentage = parseFloat((improvedUARPercentage - UARPercentage).toString().substr(0, 5));\n\n var month1AdditionalCustomerImprovedAbsoluteCountFromNonActivatedCustomers =\n (nonActivatedUserCountImproved * NON_ACTIVATE_USER_CONVERSION_RATE) * UARAbsoluteIncreasePercentage;\n\n var month1AdditionalCustomerImprovedAbsoluteCountFromActivatedCustomers = ((activatedUserCountImproved * ACTIVATE_USER_CONVERSION_RATE) * UARAbsoluteIncreasePercentage);\n\n var month1RetentionIncreasePercentage =\n month1AdditionalCustomerImprovedAbsoluteCountFromNonActivatedCustomers / trialToPaidCountImproved;\n\n var annualRetentionImprovedPercentage =\n Math.pow((1 - monthlyCustomerChurnPercentage), 12) + month1RetentionIncreasePercentage;\n\n var annualChurnBenchmarkPercentage = 1 -\n Math.pow((1 - monthlyCustomerChurnPercentage), 12);\n\n var annualChurnImprovedPercentage = 1 - annualRetentionImprovedPercentage;\n var customerLifetimeMonthsBenchmark = 1 / monthlyCustomerChurnPercentage;\n var customerLifetimeMonthsBenchmarkRounded = Math.round(customerLifetimeMonthsBenchmark);\n\n // MONTHLY CUSTOMER CHURN\n monthlyCustomerChurn1 = (1 - Math.pow((1 - annualChurnImprovedPercentage), (1 / 12)));\n\n monthlyCustomerChurn2 = (monthlyCustomerChurn1 - monthlyCustomerChurnPercentage) / monthlyCustomerChurn1;\n\n monthlyCustomerChurn3 = 1 - Math.pow((1 - annualChurnBenchmarkPercentage), (1 / 12));\n\n // --- Assorted data PART #2 ---\n var customerLifetimeMonthsImproved = 1 / monthlyCustomerChurn1;\n var customerLifetimeMonthsImprovedRounded = Math.round(customerLifetimeMonthsImproved);\n\n // --- Trial to paid data PART #2 ---\n var monthlyRetentionImprovedPercentage = 1 - monthlyCustomerChurn1;\n\n //----------------------------------------\n\n // TRIAL TO PAID\n trialToPayImproved = (trialToPaidCountImproved / trialsStartedPerMonth);\n trialToPayBench = (trialToPaidCountBench / trialsStartedPerMonth);\n trialToPayDiff = (trialToPayImproved - trialToPayBench) / trialToPayBench;\n\n // LIFETIME VALUE\n lifeTimeValue1 = ARPAMonthly * customerLifetimeMonthsImproved;\n lifeTimeValue2 = Math.round(((ARPAMonthly * customerLifetimeMonthsBenchmark).toFixed(2) * 100)) / 100;\n lifeTimeValue3 = (lifeTimeValue1 - lifeTimeValue2) / lifeTimeValue2;\n\n //************************************************************************* */\n\n //---------- MRR lifetime (bench) ----------\n MRRLifetimeBenchArray = new Array();\n\n for (var i = 0; i < customerLifetimeMonthsBenchmarkRounded; i++) {\n if (i === 0) {\n var customers = trialToPaidCountBench * monthlyRetentionBenchPercentage;\n MRRLifetimeBenchArray.push({\n 'customers': customers,\n 'value': customers * ARPAMonthly\n });\n } else {\n var customers = (MRRLifetimeBenchArray[i - 1].customers + trialToPaidCountBench) * monthlyRetentionBenchPercentage;\n MRRLifetimeBenchArray.push({\n 'customers': customers,\n 'value': customers * ARPAMonthly\n });\n }\n }\n\n MRRLifetimeBenchArrayTotal = MRRLifetimeBenchArray.reduce(function(a, b) {\n return a + (b['value'] || 0);\n }, 0);\n\n //----------- MRR lifetime (improved) ---------\n MRRLifetimeImprovedArray = new Array();\n\n for (var i = 0; i < customerLifetimeMonthsImprovedRounded; i++) {\n if (i === 0) {\n var customers = trialToPaidCountImproved * monthlyRetentionImprovedPercentage;\n MRRLifetimeImprovedArray.push({\n 'customers': customers,\n 'value': customers * ARPAMonthly\n });\n } else {\n var customers = (MRRLifetimeImprovedArray[i - 1].customers + trialToPaidCountImproved) * monthlyRetentionImprovedPercentage;\n MRRLifetimeImprovedArray.push({\n 'customers': customers,\n 'value': customers * ARPAMonthly\n });\n }\n }\n\n MRRLifetimeImprovedArrayTotal = MRRLifetimeImprovedArray.reduce(function(a, b) {\n return a + (b['value'] || 0);\n }, 0);\n\n\n //---------- lifetime (months) -----------\n lifetimeMonthsArray = new Array();\n\n for (var i = 1; i < customerLifetimeMonthsImprovedRounded + 1; i++) {\n lifetimeMonthsArray.push(i);\n }\n\n MRRLifetimetotalDiff = MRRLifetimeImprovedArrayTotal - MRRLifetimeBenchArrayTotal;\n MRRLifetimetotalDiffPercentage = Math.round((parseFloat((MRRLifetimetotalDiff / MRRLifetimeBenchArrayTotal).toFixed(4)) * 100) * 100) / 100;\n //----------------------------------------\n\n if (debug) {\n // ***** LOGS *******\n console.log('//////////////////////////// SAAS ///////////////////////////////////////////');\n log('INCREASE IN USER ACTIVATION:', increaseInUserActivation);\n log('Improved UAR Percentage', improvedUARPercentage);\n\n console.log('------------ BENCHMARKS ------------');\n log('UAR Percentage', UARPercentage);\n log('Monthly Customer Churn Percentage', monthlyCustomerChurnPercentage);\n log('ARPA Monthly', ARPAMonthly);\n log('Trials Started Per Month', trialsStartedPerMonth);\n\n console.log('-------- Active user data ----------');\n log('Activated User Count Bench', activatedUserCountBench);\n log('Activated User Count Improved', activatedUserCountImproved);\n log('ACTIVATE USER CONVERSION RATE', ACTIVATE_USER_CONVERSION_RATE);\n log('NON Activated User Count Bench', nonActivatedUserCountBench);\n log('NON Activated User Count Improved', nonActivatedUserCountImproved);\n log('NON ACTIVATE USER CONVERSION RATE', NON_ACTIVATE_USER_CONVERSION_RATE);\n\n console.log('-------- Trial to paid data ----------');\n log('Trial To Paid Count Bench', trialToPaidCountBench);\n log('Trial To Paid Count Improved', trialToPaidCountImproved);\n log('Monthly Retention Bench Percentage', monthlyRetentionBenchPercentage);\n log('Monthly Retention Improved Percentage', monthlyRetentionImprovedPercentage);\n\n console.log('-------- Assorted data ----------');\n log('UAR Absolute Increase Percentage', UARAbsoluteIncreasePercentage);\n log('Month 1 Additional Customer Improved Absolute Count From NON Activated Customers', month1AdditionalCustomerImprovedAbsoluteCountFromNonActivatedCustomers);\n log('Month 1 Additional Customer Improved Absolute Count From Activated Customers', month1AdditionalCustomerImprovedAbsoluteCountFromActivatedCustomers);\n\n log('Month 1 Retention Increase Percentage', month1RetentionIncreasePercentage);\n log('Annual Retention Improved Percentage', annualRetentionImprovedPercentage);\n log('Annual Churn Benchmark Percentage', annualChurnBenchmarkPercentage);\n log('Annual Churn Improved Percentage', annualChurnImprovedPercentage);\n log('Customer Lifetime Months Benchmark', customerLifetimeMonthsBenchmark);\n log('Customer Lifetime Months Benchmark Rounded', customerLifetimeMonthsBenchmarkRounded);\n log('Customer Lifetime Months Improved', customerLifetimeMonthsImproved);\n log('Customer Lifetime Months Improved Rounded', customerLifetimeMonthsImprovedRounded);\n\n console.log('-------- TRIAL TO PAID ----------');\n log('Trial To Pay Improved', trialToPayImproved);\n log('Trial To Pay Bench', trialToPayBench);\n log('Trial To Pay Diff', trialToPayDiff);\n\n console.log('-------- MONTHLY CUSTOMER CHURN ----------');\n log('Monthly Customer Churn 1', monthlyCustomerChurn1);\n log('Monthly Customer Churn 2', monthlyCustomerChurn2);\n log('Monthly Customer Churn 3', monthlyCustomerChurn3);\n\n console.log('-------- LIFETIME VALUE ----------');\n log('Life Time Value 1', lifeTimeValue1);\n log('Life Time Value 2', lifeTimeValue2);\n log('Life Time Value 3', lifeTimeValue3);\n\n console.log('-------- TOTAL RECURRING REVENUE ----------');\n log('MRR Lifetime Bench Total', MRRLifetimeBenchArrayTotal);\n log('MRR Lifetime Improved Total', MRRLifetimeImprovedArrayTotal);\n console.log('///////////////////////////////////////////////////////////////////////');\n }\n}\n\nfunction recalculate() {\n\n calulateVariables(\n increaseInUserActivationVal = saasSliderValue,\n UARPercentageVal = parseFloat($('#txtUserActivationRate').val()),\n monthlyCustomerChurnPercentageVal = parseFloat($('#txtMonthlyCustomerChurn').val()),\n ARPAMonthlyVal = parseFloat($('#txtAvgMmonthlySubcription').val()),\n trialsStartedPerMonthVal = parseFloat($('#txtTrialsStartedPerMonth').val())\n );\n\n setUIValues();\n\n updateChart();\n}\n\nfunction setUIValues() {\n if ($('#saasSliderValue').text() == \"0\") {\n $('#revenueOutputUI').hide();\n $('.arrow_lg').hide();\n } \n else{\n $('#revenueOutputUI').show();\n $('.arrow_lg').show();\n }\n\n\n var totalRecurringRevenueVal = (MRRLifetimeImprovedArrayTotal === MRRLifetimeBenchArrayTotal ? \"--\" : MRRLifetimeImprovedArrayTotal);\n var MRRLifetimetotalDiffVal = (MRRLifetimetotalDiff === 0 ? \"--\" : numberFormatToCurrency.format(MRRLifetimetotalDiff).split('.')[0]);\n\n\n $('#totalRecurringRevenueUI').html(numberFormatToCurrency.format(totalRecurringRevenueVal).split('.')[0]);\n $('#MRRLifetimeBenchTotalUI').html(numberFormatToCurrency.format(MRRLifetimeBenchArrayTotal).split('.')[0]);\n $('#MRRLifetimetotalDiffUI').html(MRRLifetimetotalDiffVal);\n $('#MRRLifetimetotalDiffPercentageUI').html(MRRLifetimetotalDiffPercentage.toFixed(0) + '%');\n\n $('#totalRecurringRevenueOutputUI').html(numberFormatToCurrency.format(totalRecurringRevenueVal).split('.')[0] + 'up' + MRRLifetimetotalDiffPercentage + '%');\n $('#revenueOutputUI').removeClass('invisible');\n\n var trialToPayImprovedRounded = (trialToPayImproved > trialToPayBench ? (trialToPayImproved * 100).toFixed(1) + '%' : \"--\");\n $('#trialToPaidUI').html(trialToPayImprovedRounded);\n var trialToPayBenchRounded = (trialToPayBench * 100).toFixed(2);\n $('#trialToPayBenchUI').html(trialToPayBenchRounded + '%');\n var trialToPayDiffRounded = (trialToPayDiff * 100).toFixed(2);\n $('#trialToPayDiffUI').html(trialToPayDiffRounded + '%');\n\n var monthlyCustomerChurn1Rounded = parseFloat((monthlyCustomerChurn1 * 100).toFixed(2));\n var monthlyCustomerChurn3Rounded = parseFloat((monthlyCustomerChurn3 * 100).toFixed(2));\n var monthlyCustomerChurn2Rounded = (Math.abs(monthlyCustomerChurn2) * 100).toFixed(2);\n $('#monthlyCustomerChurn1UI').html((monthlyCustomerChurn1Rounded === monthlyCustomerChurn3Rounded ? \"--\" : monthlyCustomerChurn1Rounded + '%'));\n $('#monthlyCustomerChurn3UI').html(monthlyCustomerChurn3Rounded + '%');\n $('#monthlyCustomerChurn2UI').html(monthlyCustomerChurn2Rounded + '%');\n\n\n $('#lifetimeValue1UI').html(lifeTimeValue1.toFixed(2) == lifeTimeValue2 ? \"--\" : numberFormatToCurrency.format(lifeTimeValue1).split('.')[0]);\n $('#lifetimeValue2UI').html(numberFormatToCurrency.format(lifeTimeValue2).split('.')[0]);\n var lifetimeValue3Rounded = (lifeTimeValue3 * 100).toFixed(2);\n $('#lifetimeValue3UI').html(lifetimeValue3Rounded + '%');\n $('#uarTotalSaasUI').text(((UARPercentage * (1 + increaseInUserActivation)) * 100).toFixed(1) + '%');\n $('#txtUserActivationRate').val(UARPercentage * 100);\n $('#txtMonthlyCustomerChurn').val(monthlyCustomerChurnPercentage * 100);\n $('#txtAvgMmonthlySubcription').val(ARPAMonthly);\n $('#txtTrialsStartedPerMonth').val(trialsStartedPerMonth);\n}\n\nfunction setChartData() {\n return {\n labels: lifetimeMonthsArray,\n datasets: [{\n data: MRRLifetimeBenchArray.map(x => x.value),\n fill: true,\n borderColor: '#5EC887', // Add custom color border (Line)\n backgroundColor: '#E3FAEC', // Add custom color background (Points and Fill)\n borderWidth: 1 // Specify bar border width\n },\n {\n data: MRRLifetimeImprovedArray.map(x => x.value),\n fill: true,\n borderColor: '#3A975E', // Add custom color border (Line)\n backgroundColor: '#91f4c3', // Add custom color background (Points and Fill)\n borderWidth: 1 // Specify bar border width\n }\n ]\n };\n}\n\nfunction updateChart() {\n if (saasCalculatorChart != undefined) {\n\n saasCalculatorChart.data = setChartData(\n lifetimeMonthsArray,\n MRRLifetimeBenchArray.map(x => x.value),\n MRRLifetimeImprovedArray.map(x => x.value));\n\n saasCalculatorChart.update();\n }\n}\n\n\n\n//+++++++++++++++++++++++++++++++\nvar consumer_increaseInUserActivation;\n\nvar consumer_UARPercentage;\nvar ARPUMonthly;\nvar monthlyDownloads;\n\nvar _90DayUserRetentionTotalPercentage;\nvar _90DayUserRetentionFrom;\nvar _90DayUserRetentionDiff;\n\nvar weeklyActiveUsersTotal;\nvar weeklyActiveUsersFrom;\nvar weeklyActiveUsersDiff;\n\nvar consumerLifeTimeValueTotal;\nvar consumerLifeTimeValueFrom;\nvar consumerLifeTimeValueDiff;\n\nvar milestonesRetentionArray;\n\nvar consumerSlider;\nvar consumerSliderValue;\nvar consumerCalculatorChart;\n\n$(function() {\n //*************** INIT ***************** */ \n initConsumerAppCalc();\n\n //------------- EVENT HANDLERS -------------\n\n $('#txtUserActivationRateCustomer, #txtAvgMonthlyRevenuePerUser, #txtMonthlyAppDownloads')\n .change(function() {\n recalculateConsumer();\n });\n});\n\nfunction initConsumerAppCalc() {\n\n calulateCustomerVariables();\n setCustomerUIValues();\n\n initConsumerSlider(0);\n\n //*************** CHART ***************** */\n var chartConsumerOptions = {\n animation: {\n duration: 0\n },\n legend: {\n display: false\n },\n elements: {\n line: {\n tension: 0.1 // disables bezier curves\n }\n },\n responsive: true, // Instruct chart js to respond nicely.\n maintainAspectRatio: true, // Add to prevent default behaviour of full-width/height,\n tooltips: {\n enabled: true,\n mode: 'index',\n intersect: false,\n titleFontSize: 14,\n bodyFontSize: 12,\n bodySpacing: 10,\n callbacks: {\n label: function(tooltipItem, data) {\n return tooltipItem.yLabel.toFixed(1) + '%';\n },\n title: function(tooltipItem, data) {\n return \"Active users\";\n },\n },\n itemSort: function(a, b) {\n return b.datasetIndex - a.datasetIndex\n }\n },\n scales: {\n yAxes: [{\n /*ticks: {\n callback: function(value, index, values) {\n return numberFormatToCurrency.format(value);\n }\n },*/\n scaleLabel: {\n display: true,\n labelString: '% of active users'\n }\n }],\n xAxes: [{\n scaleLabel: {\n display: true,\n labelString: 'Days since app install'\n },\n gridLines : {\n display : false\n }\n }]\n }\n };\n\n var ctx = document.getElementById('consumerCalculatorChart');\n consumerCalculatorChart = new Chart(ctx, {\n type: 'line',\n data: setConsumerChartData(),\n options: chartConsumerOptions\n });\n\n}\n\nfunction initConsumerSlider(defaultValue) {\n consumerSlider = document.getElementById(\"consumerSlider\");\n\n if (defaultValue != undefined) {\n consumerSlider.value = defaultValue;\n consumerSliderValue = defaultValue;\n $('#consumerSliderValue').text(defaultValue);\n }\n\n // Update the current slider value (each time you drag the slider handle)\n consumerSlider.oninput = function() {\n $('#consumerSliderValue').text(this.value);\n consumerSliderValue = this.value;\n recalculateConsumer();\n };\n}\n\nfunction calulateCustomerVariables(\n consumer_increaseInUserActivationVal = 0,\n consumer_UARPercentageVal = 30,\n ARPUMonthlyVal = 4,\n monthlyDownloadsVal = 1500\n) {\n\n ///////////////// EDITABLE BY USER ////////////////////\n consumer_increaseInUserActivation = pc(consumer_increaseInUserActivationVal);\n\n // BENCHMARKS\n consumer_UARPercentage = pc(consumer_UARPercentageVal);\n ARPUMonthly = ARPUMonthlyVal;\n monthlyDownloads = monthlyDownloadsVal;\n\n var consumer_improvedUARPercentage = consumer_UARPercentage * (1 + consumer_increaseInUserActivation);\n ///////////////////////////////////////////////////////\n\n // --- Retention data ---\n const RETENTION_DATA_PERCENTAGE = pc(15);\n var D1RetentionRateBench = (consumer_UARPercentage * (1 - RETENTION_DATA_PERCENTAGE));\n var D1RetentionRateImproved = (consumer_improvedUARPercentage * (1 - RETENTION_DATA_PERCENTAGE));\n var D1D90RetentionPointIncrease = (D1RetentionRateImproved * 100) - (D1RetentionRateBench * 100);\n\n //row 1\n milestonesRetentionArray = [\n //milestones (days) | retention curve blueprint (bench) | retention curve (bench) | difference btwn milestones | retention curve (improved)\n [0, 100, 100, 0, 100]\n ];\n\n //row 2\n milestonesRetentionArray.push([\n 1,\n 29.17,\n D1RetentionRateBench * 100,\n Math.abs((29.17 - milestonesRetentionArray[0][1]) / milestonesRetentionArray[0][1]),\n (D1RetentionRateBench * 100) + D1D90RetentionPointIncrease\n ]);\n\n //row 3\n milestonesRetentionArray.push([\n 3,\n 23.42,\n 0,\n Math.abs((23.42 - milestonesRetentionArray[1][1]) / milestonesRetentionArray[1][1]),\n 0\n ]);\n milestonesRetentionArray[2][2] = (milestonesRetentionArray[1][2] * (1 - milestonesRetentionArray[2][3]));\n milestonesRetentionArray[2][4] = milestonesRetentionArray[2][2] + D1D90RetentionPointIncrease;\n\n //row 4\n milestonesRetentionArray.push([\n 7,\n 17.28,\n 0,\n Math.abs((17.28 - milestonesRetentionArray[2][1]) / milestonesRetentionArray[2][1]),\n 0\n ]);\n milestonesRetentionArray[3][2] = (milestonesRetentionArray[2][2] * (1 - milestonesRetentionArray[3][3]));\n milestonesRetentionArray[3][4] = milestonesRetentionArray[3][2] + D1D90RetentionPointIncrease;\n\n //row 5\n milestonesRetentionArray.push([\n 14,\n 13.11,\n 0,\n Math.abs((13.11 - milestonesRetentionArray[3][1]) / milestonesRetentionArray[3][1]),\n 0\n ]);\n milestonesRetentionArray[4][2] = (milestonesRetentionArray[3][2] * (1 - milestonesRetentionArray[4][3]));\n milestonesRetentionArray[4][4] = milestonesRetentionArray[4][2] + D1D90RetentionPointIncrease;\n\n //row 6\n milestonesRetentionArray.push([\n 30,\n 9.55,\n 0,\n Math.abs((9.55 - milestonesRetentionArray[4][1]) / milestonesRetentionArray[4][1]),\n 0\n ]);\n milestonesRetentionArray[5][2] = (milestonesRetentionArray[4][2] * (1 - milestonesRetentionArray[5][3]));\n milestonesRetentionArray[5][4] = milestonesRetentionArray[5][2] + D1D90RetentionPointIncrease;\n\n //row 7\n milestonesRetentionArray.push([\n 60,\n 6.82,\n 0,\n Math.abs((6.82 - milestonesRetentionArray[5][1]) / milestonesRetentionArray[5][1]),\n 0\n ]);\n milestonesRetentionArray[6][2] = (milestonesRetentionArray[5][2] * (1 - milestonesRetentionArray[6][3]));\n milestonesRetentionArray[6][4] = milestonesRetentionArray[6][2] + D1D90RetentionPointIncrease;\n\n //row 8\n milestonesRetentionArray.push([\n 90,\n 6,\n 0,\n Math.abs((6 - milestonesRetentionArray[6][1]) / milestonesRetentionArray[6][1]),\n 0\n ]);\n milestonesRetentionArray[7][2] = (milestonesRetentionArray[6][2] * (1 - milestonesRetentionArray[7][3]));\n milestonesRetentionArray[7][4] = milestonesRetentionArray[7][2] + D1D90RetentionPointIncrease;\n\n // 90 Day User Retention Part #1\n _90DayUserRetentionTotalPercentage = pc(milestonesRetentionArray[7][4]);\n\n // --- LTV data ---\n var D90RetentionRateBench = milestonesRetentionArray[7][2] / 100;\n var annualChurnBench = 1 - D90RetentionRateBench;\n var annualChurnImproved = 1 - _90DayUserRetentionTotalPercentage;\n var monthlyChurnBench = 1 - (Math.pow((1 - annualChurnBench), (1 / 12)));\n var monthlyChurnImproved = 1 - (Math.pow((1 - annualChurnImproved), (1 / 12)));\n var userLifetimeMonthsBench = 1 / monthlyChurnBench;\n var userLifetimeMonthsImproved = 1 / monthlyChurnImproved;\n\n // 90 Day User Retention Part #2\n _90DayUserRetentionFrom = D90RetentionRateBench;\n _90DayUserRetentionDiff = (_90DayUserRetentionTotalPercentage - _90DayUserRetentionFrom) / _90DayUserRetentionFrom;\n\n // WEEKLY ACTIVE USERS\n weeklyActiveUsersTotal = monthlyDownloads * _90DayUserRetentionTotalPercentage;\n weeklyActiveUsersFrom = monthlyDownloads * D90RetentionRateBench;\n weeklyActiveUsersDiff = (weeklyActiveUsersTotal - weeklyActiveUsersFrom) / weeklyActiveUsersFrom;\n\n // LIFETIME VALUE\n consumerLifeTimeValueTotal = userLifetimeMonthsImproved * ARPUMonthly;\n consumerLifeTimeValueFrom = userLifetimeMonthsBench * ARPUMonthly;\n consumerLifeTimeValueDiff = (consumerLifeTimeValueTotal - consumerLifeTimeValueFrom) / consumerLifeTimeValueFrom;\n\n //************************************************************************* */\n\n if (debug) {\n // ***** LOGS *******\n console.log('/////////////////////////// CONSUMER APP ////////////////////////////////////////////');\n log('INCREASE IN USER ACTIVATION:', consumer_increaseInUserActivation);\n log('Improved UAR Percentage', consumer_improvedUARPercentage);\n\n console.log('------------ BENCHMARKS ------------');\n log('UAR Percentage', consumer_UARPercentage);\n log('ARPU Monthly', ARPUMonthly);\n log('Monthly Downloads', monthlyDownloadsVal);\n\n console.log('------------ RETENTION DATA ------------');\n log('RETENTION DATA PERCENTAGE', RETENTION_DATA_PERCENTAGE);\n log('D1 Retention Rate Bench', D1RetentionRateBench);\n log('D1 Retention Rate Improved', D1RetentionRateImproved);\n log('D1-D90 retention point increase', D1D90RetentionPointIncrease);\n\n console.log('------------ LTV DATA ------------');\n log('D90 Retention Rate Bench', D90RetentionRateBench);\n log('Annual Churn Bench', annualChurnBench);\n log('Annual Churn Improved', annualChurnImproved);\n log('Monthly Churn Bench', monthlyChurnBench);\n log('Monthly Churn Imrpoved', monthlyChurnImproved);\n log('User Lifetime Months Bench', userLifetimeMonthsBench);\n log('User Lifetime Months Improved', userLifetimeMonthsImproved);\n\n console.log('------------ 90-DAY USER RETENTION ------------');\n log('_90DayUserRetentionTotalPercentage', _90DayUserRetentionTotalPercentage);\n log('_90DayUserRetentionFrom', _90DayUserRetentionFrom);\n log('_90DayUserRetentionDiff', _90DayUserRetentionDiff);\n\n console.log('------------ WEEKLY ACTIVE USERS ------------');\n log('Weekly Active Users Total', weeklyActiveUsersTotal);\n log('Weekly Active Users From', weeklyActiveUsersFrom);\n log('Weekly Active Users Diff', weeklyActiveUsersDiff);\n\n console.log('------------ LIFETIME VALUE ------------');\n log('LifeTime Value Total', consumerLifeTimeValueTotal);\n log('LifeTime Value From', consumerLifeTimeValueFrom);\n log('LifeTime Value Diff', consumerLifeTimeValueDiff);;\n\n\n console.log('------------ Milestones Retention ------------');\n console.table(milestonesRetentionArray);\n\n console.log('///////////////////////////////////////////////////////////////////////');\n }\n}\n\nfunction recalculateConsumer() {\n calulateCustomerVariables(\n consumer_increaseInUserActivationVal = consumerSliderValue,\n consumer_UARPercentageVal = parseFloat($('#txtUserActivationRateCustomer').val()),\n ARPUMonthlyVal = parseFloat($('#txtAvgMonthlyRevenuePerUser').val()),\n monthlyDownloadsVal = parseFloat($('#txtMonthlyAppDownloads').val())\n );\n setCustomerUIValues();\n updateCustomerChart();\n}\n\nfunction setCustomerUIValues() {\n\n if ($('#consumerSliderValue').text() == \"0\") {\n $('#90DayUserRetentionFromUI').hide();\n $('.consumer-header-arrow-sm').hide();\n $('.consumer-header-up-text').hide();\n $('.from').hide();\n } else if ($('#consumerSliderValue').text() != \"0\") {\n $('#90DayUserRetentionFromUI').show();\n $('.consumer-header-arrow-sm').show();\n $('.consumer-header-up-text').show();\n $('.from').show();\n }\n\n var _90DayUserRetentionTotalVal = (_90DayUserRetentionTotalPercentage == _90DayUserRetentionFrom ? '--' : (Math.round((_90DayUserRetentionTotalPercentage * 100) * 100) / 100) + '%');\n $('#90DayUserRetentionTotalUI').html(_90DayUserRetentionTotalVal);\n var _90DayUserRetentionFromVal = Math.round((_90DayUserRetentionFrom * 100) * 100) / 100;\n $('#90DayUserRetentionFromUI').html(_90DayUserRetentionFromVal + '%');\n var _90DayUserRetentionDiffVal = Math.round((_90DayUserRetentionDiff * 100) * 100) / 100;\n $('#90DayUserRetentionDiffPercentageUI').html(_90DayUserRetentionDiffVal + '%');\n\n var weeklyActiveUsersTotalVal = (weeklyActiveUsersTotal == weeklyActiveUsersFrom ? '--' : Math.round(weeklyActiveUsersTotal));\n $('#weeklyActiveUsersTotalUI').html(weeklyActiveUsersTotalVal);\n var weeklyActiveUsersFromVal = Math.round(weeklyActiveUsersFrom);\n $('#weeklyActiveUsersFromUI').html(weeklyActiveUsersFromVal);\n var weeklyActiveUsersDiffVal = Math.round((weeklyActiveUsersDiff * 100).toFixed(2) * 100) / 100;\n $('#weeklyActiveUsersDiffUI').html(weeklyActiveUsersDiffVal + '%');\n\n var consumerLifeTimeValueTotalVal = (consumerLifeTimeValueTotal == consumerLifeTimeValueFrom ? '--' : numberFormatToCurrency.format(Math.round(consumerLifeTimeValueTotal * 100) / 100));\n $('#consumerLifetimeValueTotalUI').html(consumerLifeTimeValueTotalVal);\n var consumerLifeTimeValueFromVal = numberFormatToCurrency.format(Math.round(consumerLifeTimeValueFrom * 100) / 100);\n $('#consumerLifetimeValueFromUI').html(consumerLifeTimeValueFromVal);\n var consumerLifeTimeValueDiffVal = Math.round((consumerLifeTimeValueDiff * 100).toFixed(2) * 100) / 100;\n $('#consumerLifetimeValueDiffUI').html(consumerLifeTimeValueDiffVal + '%');\n $('#uarTotalCunsumerUI').text(((consumer_UARPercentage * (1 + consumer_increaseInUserActivation)) * 100).toFixed(1) + '%');\n\n $('#txtUserActivationRateCustomer').val(consumer_UARPercentage * 100);\n $('#txtAvgMonthlyRevenuePerUser').val(ARPUMonthly);\n $('#txtMonthlyAppDownloads').val(monthlyDownloads);\n}\n\nfunction setConsumerChartData() {\n return {\n labels: milestonesRetentionArray.map(x => x[0]),\n datasets: [{\n data: milestonesRetentionArray.map(x => x[2]),\n fill: true,\n borderColor: '#5EC887', // Add custom color border (Line)\n backgroundColor: '#E3FAEC', // Add custom color background (Points and Fill)\n borderWidth: 1 // Specify bar border width\n },\n {\n data: milestonesRetentionArray.map(x => x[4]),\n fill: true,\n borderColor: '#3A975E', // Add custom color border (Line)\n backgroundColor: '#91f4c3', // Add custom color background (Points and Fill)\n borderWidth: 1 // Specify bar border width\n }\n ]\n };\n}\n\nfunction updateCustomerChart() {\n if (consumerCalculatorChart != undefined) {\n\n consumerCalculatorChart.data = setConsumerChartData(\n milestonesRetentionArray.map(x => x[0]),\n milestonesRetentionArray.map(x => x[2]),\n milestonesRetentionArray.map(x => x[4]));\n\n consumerCalculatorChart.update();\n }\n}"],"sourceRoot":""}