1import{r as s,j as e,L as H,F as T,B as E,c as B}from"./main-DbcRomnx.js";import{A as i}from"./AnimateOnScroll-DXt_md5v.js";import{C as W}from"./CTASection-AgAo4weD.js";import{F as Q}from"./FAQSection-DzL9SB7i.js";import{R as _}from"./RelatedResourcesSection-BYktG6vD.js";import{s as g,r as $,c as y}from"./calculator-CtWp4hR2.js";const v="https://trashlab.com",N=[{question:"What is route profitability?",answer:"Route profitability is the contribution a route generates after direct labor, fuel, disposal, and supporting admin cost are accounted for. It helps operators see whether a route is truly healthy or only busy."},{question:"What should I review if a route margin looks weak?",answer:"Review revenue per stop, route density, overtime, pricing rules, same-day exception volume, and whether the route is carrying too much underpriced work."},{question:"What should I pair with this calculator?",answer:"Use it with pricing and density work so route fixes address both revenue quality and operating shape.",answerHtml:'<p>Use it with pricing and density work so route fixes address both revenue quality and operating shape. Pair it with <a href="/blog/how-to-improve-route-density-for-waste-haulers">route density guidance</a> and the <a href="/tools/roll-off-pricing-calculator">roll-off pricing calculator</a>.</p>'}],n=r=>r.toLocaleString("en-US",{style:"currency",currency:"USD",maximumFractionDigits:0});function X(){const[r,S]=s.useState(48500),[l,R]=s.useState(22),[c,P]=s.useState(128),[d,D]=s.useState(9.5),[u,I]=s.useState(38),[m,k]=s.useState(285),[p,M]=s.useState(8200),[h,A]=s.useState(4100),a=s.useMemo(()=>{const t=y(r,{min:0}),o=y(l,{min:1}),L=y(c,{min:1}),j=o*d*u,w=o*m,x=t-j-w-p-h,b=o*L,f=g(x,t),U=g(t,b),C=g(x,b),q=f>=.28?"Strong route":f>=.18?"Watch closely":"Needs intervention";return{totalStops:b,laborCost:j,fuelCost:w,contribution:x,margin:f,revenuePerStop:U,profitPerStop:C,healthLabel:q}},[h,p,d,m,u,r,l,c]),F=[{name:"Home",url:`${v}/`},{name:"Tools",url:`${v}/tools`},{name:"Route profitability calculator",url:`${v}/tools/route-profitability-calculator`}];return e.jsxs(H,{children:[e.jsx(T,{faqItems:N}),e.jsx(E,{items:F}),e.jsx("section",{className:"bg-white px-4 lg:px-4 xl:px-0 pt-24 sm:pt-32 pb-16",children:e.jsx("div",{className:"mx-auto max-w-[1200px]",children:e.jsxs("div",{className:"space-y-6",children:[e.jsx(i,{variant:"fadeUp",duration:.4,delay:0,children:e.jsxs("p",{className:"text-[18px] font-medium text-[#10A6CC] text-left",children:[e.jsx(B,{to:"/tools",className:"hover:underline",children:"Tools"})," / ","Route profitability calculator"]})}),e.jsx(i,{variant:"fadeUp",duration:.5,delay:.1,children:e.jsx("h1",{className:"text-2xl sm:text-3xl lg:text-4xl xl:text-5xl font-bold text-[#1a174f] leading-tight text-left",children:"Route profitability calculator"})}),e.jsx(i,{variant:"fadeUp",duration:.5,delay:.2,children:e.jsx("p",{className:"max-w-4xl text-base leading-relaxed text-slate-900 text-left",children:"Estimate revenue per stop, route contribution, and whether weak margin is coming from labor, fuel, disposal, or route shape."})})]})})}),e.jsx("section",{className:"bg-[#F6F7FB] px-4 py-16",children:e.jsxs("div",{className:"mx-auto grid max-w-[1200px] gap-8 lg:grid-cols-[1.05fr_0.95fr]",children:[e.jsx(i,{variant:"fadeUp",duration:.5,delay:0,children:e.jsxs("div",{className:"rounded-2xl bg-white p-6 shadow-lg sm:p-8",children:[e.jsx("h2",{className:"text-xl font-bold text-[#1a174f]",children:"Route inputs"}),e.jsx("div",{className:"mt-8 grid gap-5 sm:grid-cols-2",children:[{label:"Monthly route revenue",value:r,testId:"route-monthly-revenue",setter:S,min:0},{label:"Route days per month",value:l,testId:"route-days",setter:R,min:1},{label:"Stops per day",value:c,testId:"route-stops-per-day",setter:P,min:1},{label:"Driver hours per day",value:d,testId:"route-driver-hours",setter:D,min:0},{label:"Loaded labor rate",value:u,testId:"route-labor-rate",setter:I,min:0},{label:"Fuel + maintenance per day",value:m,testId:"route-fuel-cost",setter:k,min:0},{label:"Disposal per month",value:p,testId:"route-disposal",setter:M,min:0},{label:"Admin + dispatch per month",value:h,testId:"route-admin-cost",setter:A,min:0}].map(t=>e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium text-[#1a174f]",children:t.label}),e.jsx("input",{"data-testid":t.testId,type:"number",value:t.value,step:"0.1",onChange:o=>t.setter($(o.target.value,{min:t.min})),min:t.min,className:"mt-2 w-full rounded-xl border border-gray-300 px-4 py-3 text-slate-900 focus:border-[#312D97] focu
1s:outline-none"})]},t.testId))})]})}),e.jsx(i,{variant:"fadeUp",duration:.5,delay:.1,children:e.jsxs("div",{className:"rounded-2xl bg-[#1a174f] p-6 text-white shadow-lg sm:p-8",children:[e.jsx("p",{className:"text-sm font-medium uppercase tracking-[0.18em] text-[#8ddbef]",children:"Route contribution"}),e.jsx("p",{className:"mt-3 text-4xl font-bold","data-testid":"route-contribution",children:n(a.contribution)}),e.jsxs("div",{className:"mt-8 grid gap-4 sm:grid-cols-2",children:[e.jsxs("div",{className:"rounded-2xl bg-white/8 p-5",children:[e.jsx("p",{className:"text-sm text-slate-200",children:"Margin"}),e.jsxs("p",{className:"mt-2 text-2xl font-bold","data-testid":"route-margin",children:[Math.round(a.margin*100),"%"]})]}),e.jsxs("div",{className:"rounded-2xl bg-white/8 p-5",children:[e.jsx("p",{className:"text-sm text-slate-200",children:"Revenue per stop"}),e.jsx("p",{className:"mt-2 text-2xl font-bold",children:n(a.revenuePerStop)})]}),e.jsxs("div",{className:"rounded-2xl bg-white/8 p-5",children:[e.jsx("p",{className:"text-sm text-slate-200",children:"Profit per stop"}),e.jsx("p",{className:"mt-2 text-2xl font-bold",children:n(a.profitPerStop)})]}),e.jsxs("div",{className:"rounded-2xl bg-white/8 p-5",children:[e.jsx("p",{className:"text-sm text-slate-200",children:"Route health"}),e.jsx("p",{className:"mt-2 text-2xl font-bold",children:a.healthLabel})]})]}),e.jsxs("ul",{className:"mt-6 space-y-3 text-sm leading-relaxed text-slate-200",children:[e.jsxs("li",{children:["Labor: ",n(a.laborCost)]}),e.jsxs("li",{children:["Fuel + maintenance: ",n(a.fuelCost)]}),e.jsxs("li",{children:["Total stops: ",a.totalStops.toLocaleString("en-US")]})]})]})})]})}),e.jsx(Q,{sectionId:"faq",faqItems:N,whiteBackground:!0,whiteAccordions:!0,businessValuationVariant:!0}),e.jsx(_,{background:"slate",title:"Fix the route, not just the math",resources:[{title:"How to improve route density",description:"Use the territory and customer-mix playbook when routes are busy but not healthy.",href:"/blog/how-to-improve-route-density-for-waste-haulers"},{title:"How to price commercial waste contracts",description:"Protect recurring work before underpriced stops quietly weaken the route.",href:"/blog/how-to-price-commercial-waste-contracts"},{title:"Roll-off pricing calculator",description:"Pressure-test debris-heavy route work against stronger disposal assumptions.",href:"/tools/roll-off-pricing-calculator"},{title:"Garbage route planner",description:"See the workflow stack behind better route planning and execution.",href:"/garbage-route-planner"}]}),e.jsx(W,{})]})}export{X as component};
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.