PageSourceSearch

https://whatpulse.pro/_nuxt/js/license-renewal-decision-tool-DQyAVkrd.js

js whatpulse.pro collected 2026-10-06 11:06:07 UTC 16,868 bytes, 22 lines download raw bytes

1import{d as B,P as E,A as v,h as A,u as G,c as z,a as t,b as l,w as r,g as W,e as n,f,B as I,o as $,I as g,J as w,Q as O,S as L,t as u,j as Z,m as j,F as q,r as J,_ as D,R as k}from"#entry";import{_ as Q}from"./Breadcrumbs.vue-B-d-7W2U.js";import{_ as U}from"./Card-CtTKTrvj.js";import{_ as y}from"./Header.vue-D85jUJAw.js";import{_ as K}from"./OGTemplate.vue-ClxpsJhF.js";import"./virtual_public-DSzYRXFB.js";const X={class:"min-h-screen bg-gray-50","aria-label":"License Renewal Decision Tool"},Y={class:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8","aria-label":"Breadcrumb"},ee={class:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8"},te={class:"text-center max-w-3xl mx-auto"},se={class:"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 pb-12"},ae={class:"grid grid-cols-1 lg:grid-cols-5 gap-6"},oe={class:"lg:col-span-3 space-y-6"},re={class:"space-y-4"},le={class:"grid grid-cols-1 sm:grid-cols-2 gap-4"},ne={class:"mt-1 flex rounded-md shadow-sm"},ie={class:"mt-2 flex gap-3"},de={class:"flex items-center gap-2 text-sm"},ue={class:"flex items-center gap-2 text-sm"},me={class:"text-sm text-gray-600 mb-4"},ce={class:"space-y-4"},pe={class:"flex items-center justify-between"},ge={class:"text-sm font-semibold text-lime-700"},ye=["max"],be={class:"flex items-center justify-between"},he={class:"text-sm font-semibold text-amber-600"},xe=["max"],ve={class:"rounded-md bg-gray-50 border border-gray-200 p-3 text-sm"},fe={class:"flex items-center justify-between text-gray-700"},we={class:"font-semibold text-red-600"},ke={key:0,class:"mt-1 text-xs text-red-600"},Ue={class:"lg:col-span-2 space-y-4"},Re={class:"mt-2 text-lg font-semibold text-gray-900"},_e={class:"mt-2 text-sm text-gray-700"},Se={class:"mt-6 space-y-2 text-sm text-gray-700"},ze={class:"mt-6 space-y-3 border-t border-gray-100 pt-4"},$e={class:"flex items-baseline justify-between"},Me={class:"text-sm font-semibold text-gray-900"},Ce={class:"flex items-baseline justify-between"},De={class:"text-sm font-semibold text-gray-900"},Pe={class:"flex items-baseline justify-between border-t border-gray-100 pt-3"},Te={class:"text-xl font-bold text-lime-600"},Fe=["value"],Le={class:"mt-4 flex flex-col gap-2"},je={class:"bg-white py-12"},Ve={class:"max-w-3xl mx-auto px-4 sm:px-6 lg:px-8"},Ne={class:"bg-gray-50 py-12"},He={class:"max-w-3xl mx-auto px-4 sm:px-6 lg:px-8"},Be={class:"rounded-md bg-white border border-gray-200 p-6"},Ee={class:"mt-3 space-y-2 text-sm"},Qe=B({__name:"license-renewal-decision-tool",setup(Ae){const s=E({appName:"Adobe Creative Cloud",seats:187,costPerSeat:814,currency:"GBP",heavyUsers:35,lightUsers:130,tierFlex:!0}),P={USD:{locale:"en-US",code:"USD"},EUR:{locale:"de-DE",code:"EUR"},GBP:{locale:"en-GB",code:"GBP"}},R=o=>{const e=P[s.currency]??P.USD;return new Intl.NumberFormat(e.locale,{style:"currency",currency:e.code,maximumFractionDigits:0}).format(Math.max(0,o||0))},h=o=>{const e=Math.max(1,s.seats||1);return Math.round(Math.max(0,o)/e*100)},_=v(()=>{const o=Math.max(0,s.seats||0),e=Math.max(0,s.heavyUsers||0),i=Math.max(0,s.lightUsers||0);return Math.max(0,o-e-i)}),V=v(()=>(s.heavyUsers||0)+(s.lightUsers||0)>(s.seats||0)),p=v(()=>{const o=Math.max(0,s.seats||0),e=Math.max(0,s.heavyUsers||0),i=Math.max(0,s.lightUsers||0),a=_.value,m=o>0?e/o:0,c=o>0?a/o:0,C=s.tierFlex;let x="Right-size",b="";const d=[];return m>=.7?(x="Renew",b="Renew at or near current seat count; negotiate on price, not volume.",d.push(`${Math.round(m*100)}% of seats are heavy users — the tool is delivering value.`),a>0&&d.push(`Move the ${a} zero-use seats out, but keep the contract structure.`),d.push("Use this renewal to push for a multi-year price lock or a discount tied to seat commitment.")):m>=.4?(x="Right-size",b=`Reduce seat count to ${e+i} (active users only) and renew on current tier.`,d.push(`${Math.round(m*100)}% heavy use is healthy but not universal.`),d.push(`The ${a} zero-use seats are pure waste — drop them at renewal.`),i>0&&d.push("Light users can stay on the current tier; usage may grow.")):m>=.15?C?(x="Downgrade tier",b=`Move light users to a cheaper tier; keep ${e} seats on full plan.`,d.push(`Only ${Math.round(m*100)}% are heavy users — the full tier isn't earning its cost across the board.`),d.push("Cheaper tier (single-app or basic) typically saves 40–70% per light-user seat."),d.push(`Drop the ${a} zero-use seats entirely.`)):(x="Right-size",b=`No cheaper tier available — reduce to ${e} heavy-user seats only.`,d.push("Without tier flexibility, light users can't be downgraded — they have to be kept or cut."),d.push("Consider whether light users genuinely need the tool, or can use a free / built-in alternative."),d.push(`Drop the ${a} zero-use seats at minimum.`)):(x="Consolidate or drop",b=e>0?`Consolidate the ${e} active users onto an alternative; drop this contract.`:"Drop this contract entirely — no measurable use.",d.push(`Only ${Math.round(m*100)}% heavy use means the tool isn't earning its line item.`),d.push("Evaluate whether an existing tool (or a free alternative) can cover the few heavy users."),c>.5&&d.push(`${Math.round(c*100)}% zero-use is a strong signal the org never adopted this tool.`)),{kind:x,headline:b,summary:b,reasons:d}}),S=v(()=>
1{const o=Math.max(0,s.seats||0),e=Math.max(0,s.costPerSeat||0),i=Math.max(0,s.heavyUsers||0),a=Math.max(0,s.lightUsers||0),m=o*e;let c=m;switch(p.value.kind){case"Renew":c=(i+a)*e;break;case"Right-size":c=(i+a)*e;break;case"Downgrade tier":c=i*e+a*e*.5;break;case"Consolidate or drop":c=i*e*.3;break}const C=Math.max(0,m-c);return{currentSpend:m,projectedSpend:c,savings:C}}),T=v(()=>{switch(p.value.kind){case"Renew":return{banner:"bg-lime-50 border border-lime-200",label:"text-lime-700"};case"Right-size":return{banner:"bg-sky-50 border border-sky-200",label:"text-sky-blue-hover"};case"Downgrade tier":return{banner:"bg-amber-50 border border-amber-200",label:"text-amber-700"};case"Consolidate or drop":return{banner:"bg-red-50 border border-red-200",label:"text-red-700"};default:return{banner:"bg-gray-50 border border-gray-200",label:"text-gray-700"}}}),F=v(()=>{const o=s.appName.trim()||"the application",e=R(S.value.savings),i=s.heavyUsers,a=s.lightUsers,m=_.value;return`Subject: ${o} renewal — proposed changes
2
3Hi [name],
4
5Ahead of the ${o} renewal, we've reviewed actual usage across the ${s.seats} licensed seats:
6
7- Heavy users: ${i} (${h(i)}%)
8- Light / sporadic users: ${a} (${h(a)}%)
9- Zero-use seats: ${m} (${h(m)}%)
10
11Recommendation: ${p.value.headline}
12
13Why:
14${p.value.reasons.map(c=>`- ${c}`).join(`
15`)}
16
17Projected annual savings vs current contract: ${e}.
18
19Happy to discuss before the renewal date.
20
21Thanks,
22[your name]`}),M=A("Copy email to clipboard"),N=async()=>{try{await navigator.clipboard.writeText(F.value),M.value="Copied!",setTimeout(()=>{M.value="Copy email to clipboard"},2e3)}catch{}},H=[{label:"Free Tools",href:"/tools"},{label:"License Renewal Decision Tool"}];return G({title:"License Renewal Decision Tool | WhatPulse Professional",description:"Should you renew, right-size, downgrade, or drop this software contract? Enter usage breakdown to get a recommendation and a procurement email template."}),(o,e)=>{const i=I;return $(),z("main",X,[t("nav",Y,[l(Q,{items:H})]),t("div",ee,[t("div",te,[l(y,{size:"h1",class:"mb-4"},{default:r(()=>[...e[8]||(e[8]=[n("License Renewal Decision Tool",-1)])]),_:1}),e[9]||(e[9]=t("p",{class:"text-lg text-gray-600"}," Should you renew this contract, downgrade the tier, right-size the seats, or drop the tool entirely? Enter your usage breakdown and get a recommendation — plus a procurement email you can copy and send. ",-1))])]),t("section",se,[t("div",ae,[t("div",oe,[l(U,null,{header:r(()=>[l(y,{size:"h2"},{default:r(()=>[...e[10]||(e[10]=[n("Contract details",-1)])]),_:1})]),default:r(()=>[t("div",re,[t("div",null,[e[11]||(e[11]=t("label",{for:"app-name",class:"block text-sm font-medium text-gray-700"},"Application",-1)),g(t("input",{id:"app-name","onUpdate:modelValue":e[0]||(e[0]=a=>s.appName=a),type:"text",class:"mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-sky-blue focus:ring-sky-blue sm:text-sm",placeholder:"Adobe Creative Cloud"},null,512),[[w,s.appName]])]),t("div",le,[t("div",null,[e[12]||(e[12]=t("label",{for:"seats",class:"block text-sm font-medium text-gray-700"},"Seats licensed",-1)),g(t("input",{id:"seats","onUpdate:modelValue":e[1]||(e[1]=a=>s.seats=a),type:"number",min:"1",step:"1",class:"mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-sky-blue focus:ring-sky-blue sm:text-sm"},null,512),[[w,s.seats,void 0,{number:!0}]])]),t("div",null,[e[14]||(e[14]=t("label",{for:"cost",class:"block text-sm font-medium text-gray-700"},"Cost per seat / year",-1)),t("div",ne,[g(t("select",{"onUpdate:modelValue":e[2]||(e[2]=a=>s.currency=a),class:"rounded-l-md border-gray-300 border-r-0 focus:border-sky-blue focus:ring-sky-blue text-sm"},[...e[13]||(e[13]=[t("option",{value:"USD"},"$",-1),t("option",{value:"EUR"},"€",-1),t("option",{value:"GBP"},"£",-1)])],512),[[O,s.currency]]),g(t("input",{id:"cost","onUpdate:modelValue":e[3]||(e[3]=a=>s.costPerSeat=a),type:"number",min:"0",step:"1",class:"flex-1 block w-full rounded-r-md border-gray-300 focus:border-sky-blue focus:ring-sky-blue sm:text-sm"},null,512),[[w,s.costPerSeat,void 0,{number:!0}]])])])]),t("div",null,[e[17]||(e[17]=t("label",{class:"block text-sm font-medium text-gray-700"},"Contract tier flexibility",-1)),t("div",ie,[t("label",de,[g(t("input",{type:"radio","onUpdate:modelValue":e[4]||(e[4]=a=>s.tierFlex=a),value:!0,class:"accent-sky-blue"},null,512),[[L,s.tierFlex]]),e[15]||(e[15]=t("span",null,"Vendor offers cheaper tiers (single-app, basic)",-1))]),t("label",ue,[g(t("input",{type:"radio","onUpdate:modelValue":e[5]||(e[5]=a=>s.tierFlex=a),value:!1,class:"accent-sky-blue"},null,512),[[L,s.tierFlex]]),e[16]||(e[16]=t("span",null,"One tier only",-1))])])])])]),_:1}),l(U,null,{header:r(()=>[l(y,{size:"h2"},{default:r(()=>[...e[18]||(e[18]=[n("Usage breakdown",-1)])]),_:1})]),default:r(()=>[t("p",me," Split your "+u(s.seats||0)+" licensed seats into three buckets. Heavy = active use most weeks. Light = sporadic, often a single-app or single-feature need. Zero = no measurable usage in 60+ days. ",1),t("div",ce,[t("div",null,[t("div",pe,[e[19]||(e[19]=t("label",{for:"heavy",class:"block text-sm font-medium text-gray-700"},"Heavy users (seats)",-1)),t("span",ge,u(s.heavyUsers)+" ("+u(h(s.heavyUsers))+"%)",1)]),g(t("input",{id:"heavy","onUpdate:modelValue":e[6]||(e[6]=a=>s.heavyUsers=a),type:"number",min:"0",max:s.seats,step:"1",class:"mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-sky-blue focus:ring-sky-blue sm:text-sm"},null,8,ye),[[w,s.heavyUsers,void 0,{number:!0}]])]),t("div",null,[t("div",be,[e[20]||(e[20]=t("label",{for:"light",class:"block text-sm font-medium text-gray-700"},"Light / sporadic users (seats)",-1)),t("span",he,u(s.lightUsers)+" ("+u(h(s.lightUsers))+"%)",1)]),g(t("input",{id:"light","onUpdate:modelValue":e[7]||
22(e[7]=a=>s.lightUsers=a),type:"number",min:"0",max:s.seats,step:"1",class:"mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-sky-blue focus:ring-sky-blue sm:text-sm"},null,8,xe),[[w,s.lightUsers,void 0,{number:!0}]])]),t("div",ve,[t("div",fe,[e[21]||(e[21]=t("span",null,"Zero-use seats (auto-calculated)",-1)),t("span",we,u(_.value)+" ("+u(h(_.value))+"%)",1)]),V.value?($(),z("p",ke," Heavy + light exceeds licensed seats. Adjust the numbers above. ")):Z("",!0)]),e[22]||(e[22]=t("p",{class:"text-xs text-gray-500"}," No usage data yet? Most teams find the actual zero-use bucket is 20–50% larger than expected once they measure. Run a 30-day baseline with WhatPulse Professional before signing the renewal. ",-1))])]),_:1})]),t("div",Ue,[l(U,null,{header:r(()=>[l(y,{size:"h2"},{default:r(()=>[...e[23]||(e[23]=[n("Recommendation",-1)])]),_:1})]),default:r(()=>[t("div",{class:j(["rounded-md p-4",T.value.banner])},[t("p",{class:j(["text-xs font-semibold uppercase tracking-wide",T.value.label])},u(p.value.kind),3),t("p",Re,u(p.value.headline),1),t("p",_e,u(p.value.summary),1)],2),t("ul",Se,[($(!0),z(q,null,J(p.value.reasons,a=>($(),z("li",{key:a,class:"flex items-start"},[e[24]||(e[24]=t("span",{class:"mr-2 mt-1 inline-block h-1.5 w-1.5 rounded-full bg-sky-blue flex-shrink-0"},null,-1)),t("span",null,u(a),1)]))),128))]),t("dl",ze,[t("div",$e,[e[25]||(e[25]=t("dt",{class:"text-sm text-gray-600"},"Current annual spend",-1)),t("dd",Me,u(R(S.value.currentSpend)),1)]),t("div",Ce,[e[26]||(e[26]=t("dt",{class:"text-sm text-gray-600"},"Projected spend after action",-1)),t("dd",De,u(R(S.value.projectedSpend)),1)]),t("div",Pe,[e[27]||(e[27]=t("dt",{class:"text-sm font-medium text-gray-900"},"Annual savings",-1)),t("dd",Te,u(R(S.value.savings)),1)])])]),_:1}),l(U,null,{header:r(()=>[l(y,{size:"h2"},{default:r(()=>[...e[28]||(e[28]=[n("Procurement email",-1)])]),_:1})]),default:r(()=>[e[29]||(e[29]=t("p",{class:"text-sm text-gray-600 mb-3"}," Copy this draft into your renewal conversation with the vendor or internal procurement. ",-1)),t("textarea",{readonly:"",value:F.value,rows:"10",class:"w-full font-mono text-xs bg-gray-50 border border-gray-200 rounded-md p-3 focus:outline-none"},null,8,Fe),l(D,{variant:"primary",size:"sm","full-width":"",class:"mt-3",onClick:N},{default:r(()=>[n(u(M.value),1)]),_:1})]),_:1}),l(U,{class:"bg-gradient-to-br from-sky-blue/10 to-lime-400/10 border-sky-blue/20"},{default:r(()=>[l(y,{size:"h3"},{default:r(()=>[...e[30]||(e[30]=[n("Get the usage breakdown right",-1)])]),_:1}),e[33]||(e[33]=t("p",{class:"mt-3 text-sm text-gray-700"}," Recommendations are only as good as your usage numbers. WhatPulse Professional measures heavy / light / zero-use seats directly — privacy-first, no screenshots — so you walk into the renewal with evidence, not estimates. ",-1)),t("div",Le,[l(D,{to:{name:("Routes"in o?o.Routes:f(k)).solutionsLicenseUsageTracking},variant:"primary","full-width":""},{default:r(()=>[...e[31]||(e[31]=[n(" How license usage tracking works ",-1)])]),_:1},8,["to"]),l(D,{href:("Routes"in o?o.Routes:f(k)).signupLink,variant:"secondary","full-width":""},{default:r(()=>[...e[32]||(e[32]=[n(" Start 14-day free trial ",-1)])]),_:1},8,["href"])])]),_:1})])])]),t("section",je,[t("div",Ve,[l(y,{size:"h2"},{default:r(()=>[...e[34]||(e[34]=[n("How the recommendation works",-1)])]),_:1}),e[35]||(e[35]=W('<p class="mt-4 text-gray-600"> The recommendation uses heavy-use percentage as the primary signal, with tier flexibility and zero-use percentage as modifiers. Four outcomes: </p><dl class="mt-6 space-y-4"><div><dt class="font-semibold text-gray-900">Renew as-is</dt><dd class="text-sm text-gray-600">Heavy usage ≥ 70%. The tool is core. Focus the renewal conversation on negotiated discount, not seat reduction.</dd></div><div><dt class="font-semibold text-gray-900">Right-size seats</dt><dd class="text-sm text-gray-600">Heavy usage 40–70%, light usage moderate. Reduce seat count to match active use; keep the same tier. Move zero-use seats out.</dd></div><div><dt class="font-semibold text-gray-900">Downgrade tier</dt><dd class="text-sm text-gray-600">Heavy usage 15–40% with cheaper tiers available. Move light users to single-app or basic plans; keep heavy users on the full tier.</dd></div><div><dt class="font-semibold text-gray-900">Consolidate or drop</dt><dd class="text-sm text-gray-600">Heavy usage &lt; 15%. The tool isn&#39;t earning its line item. Consolidate into an existing tool, or drop entirely and let the few heavy users move to alternatives.</dd></div></dl>',2))])]),t("section",Ne,[t("div",He,[t("div",Be,[l(y,{size:"h3"},{default:r(()=>[...e[36]||(e[36]=[n("Related tools",-1)])]),_:1}),t("ul",Ee,[t("li",null,[l(i,{to:{name:("Routes"in o?o.Routes:f(k)).toolsUnusedLicenseSavings},class:"text-sky-blue hover:underline"},{default:r(()=>
22[...e[37]||(e[37]=[n(" Unused License Savings Calculator ",-1)])]),_:1},8,["to"]),e[38]||(e[38]=n(" — quick savings estimate before you start gathering usage detail. ",-1))]),t("li",null,[l(i,{to:{name:("Routes"in o?o.Routes:f(k)).toolsSaasSprawlWaste},class:"text-sky-blue hover:underline"},{default:r(()=>[...e[39]||(e[39]=[n(" SaaS Sprawl Waste Estimator ",-1)])]),_:1},8,["to"]),e[40]||(e[40]=n(" — portfolio-level view across all your SaaS subscriptions. ",-1))]),t("li",null,[l(i,{to:{name:("Routes"in o?o.Routes:f(k)).toolsSalesRenewalUplift},class:"text-sky-blue hover:underline"},{default:r(()=>[...e[41]||(e[41]=[n(" Sales Renewal & Uplift Calculator ",-1)])]),_:1},8,["to"]),e[42]||(e[42]=n(" — model multi-year price changes once you've picked the renewal path. ",-1))])])])])]),l(K,{label:"Free Tool",title:"License Renewal Decision Tool",description:"Should you renew, right-size, downgrade, or drop? Get a recommendation plus a procurement email template."})])}}});export{Qe as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.