{
"version": 3,
"sources": ["src/app/spruce-servicing/spruce-servicing.component.ts", "src/app/spruce-servicing/spruce-servicing.component.html"],
"sourcesContent": ["import { Component, HostListener } from '@angular/core';\nimport { HeaderComponent } from \"../header/header.component\";\nimport { FooterComponent } from \"../footer/footer.component\";\nimport { CommonModule, NgIf, DecimalPipe } from '@angular/common';\nimport { RouterLink } from '@angular/router';\n\n@Component({\n selector: 'app-spruce-servicing',\n standalone: true,\n templateUrl: './spruce-servicing.component.html',\n styleUrl: './spruce-servicing.component.scss',\n imports: [HeaderComponent, FooterComponent, CommonModule, NgIf, DecimalPipe, RouterLink]\n})\nexport class SpruceServicingComponent {\n\n animatedNumber_Customers: number = 0;\n targetNumber_Customers: number = 80000;\n duration_Customers: number = 3000; // Duration of the animation in milliseconds\n startTime_Customers: number | null = null;\n show_Customers: boolean = false;\n\n animatedNumber_Assets: number = 0;\n targetNumber_Assets: number = 1000000000;\n duration_Assets: number = 5000; // Duration of the animation in milliseconds\n startTime_Assets: number | null = null;\n show_Assets: boolean = false;\n\n @HostListener('window:scroll', [])\n onScroll(): void {\n const element = document.querySelector('.number-container');\n if (element) {\n const rect = element.getBoundingClientRect();\n if (rect.top >= 0 && rect.bottom <= window.innerHeight) {\n this.animateNumber_Customers();\n this.animateNumber_Assets();\n }\n }\n }\n\n animateNumber_Customers(): void {\n if (this.startTime_Customers === null) {\n this.startTime_Customers = performance.now();\n }\n const currentTime = performance.now();\n const elapsedTime = currentTime - this.startTime_Customers;\n const progress = Math.min(elapsedTime / this.duration_Customers, 1);\n this.animatedNumber_Customers = Math.floor(progress * this.targetNumber_Customers);\n\n if (progress < 1) {\n requestAnimationFrame(() => this.animateNumber_Customers());\n }\n else {\n this.show_Customers = true;\n }\n }\n\n animateNumber_Assets(): void {\n if (this.startTime_Assets === null) {\n this.startTime_Assets = performance.now();\n }\n const currentTime = performance.now();\n const elapsedTime = currentTime - this.startTime_Assets;\n const progress = Math.min(elapsedTime / this.duration_Assets, 1);\n this.animatedNumber_Assets= Math.floor(progress * this.targetNumber_Assets);\n\n if (progress < 1) {\n requestAnimationFrame(() => this.animateNumber_Assets());\n }\n else {\n this.show_Assets = true;\n }\n }\n\n}\n ", "
\n Backed by the expertise of financial, solar, and utility\n professionals we bring an industry-leading network of service and\n maintenance partners. We offer customers a comprehensive,\n end-to-end servicing solution.\n
\n\n \n {{\n animatedNumber_Customers | number : \"1.0-0\"\n }}\n {{ targetNumber_Customers | number : \"1.0-0\" }}+\n \n
\n\n \n {{\n animatedNumber_Assets | number : \"1.0-0\"\n }}\n $1 billion \n
\n\n Spruce Servicing’s breadth of services enables a unique\n full-scope servicing solution.\n
\n\n In-depth financial services that span financial and\n operating reports, analysis, waterfalls & cash\n distributions, lender and tax equity partner management,\n tax services, and more.\n
\n\n Easy payment options and billing portal for portfolio\n customers along with streamlined payment processing,\n account monitoring, and end-to-end collections\n activities to ensure healthy and current accounts.\n
\n\n Management of the entire customer account from start to\n finish, from UCC/fixture filing removals and system\n buyouts to performance guarantees and other end to end\n account services.\n
\n\n System monitoring and performance management tools\n combined with a broad network of partners for timely\n on-site maintenance or repair helps sustain\n high-performing assets.\n
\n\n Dedicated US based homeowner support team and 24×7\n online portal to answer homeowner questions on their\n agreements, system performance, home sales, refinance,\n and agreement transfers.\n
\n\n From a full-service customer facing portal to intuitive\n reporting, Spruce Servicing offers full-stack technology\n implementation.\n
\n\n The proof is in the metrics. Through in- depth financial analysis\n and reporting, we’re able to provide detailed records for asset\n owners and 3rd party funds on financial and operational reporting\n metrics.\n
\n\n We’re committed to making the customer’s payment process\n hassle-free. We offer easy payment options for customers.\n
\n\n The Spruce Servicing Asset Recovery team recovers delinquent\n balances while reducing the volume of future delinquent\n accounts.\n
\n\n We are uniquely positioned to resolve underlying solar-related\n technical and commercial drivers of delinquencies:\n
\n\n Beyond just account support, we provide account solutions. Our\n account
\n services include complete customer account management from start\n to finish.
\n From UCC and fixture filing management and SREC reporting to\n performance
\n guarantee and system buyout management, our team has the entire\n account
\n spectrum covered, including:\n
\n
\n Our customer and US based homeowner support team is the primary\n point of contact for customers after system installation and\n activation. They use a cutting-edge customer relationship\n management system.\n
\nCustomer inquiries managed by the team include:
\n\n Leave the system maintenance and technical support to us. Through a\n combination of system monitoring and performance management tools, our\n asset operations team is able to determine when a solar system needs\n technical support. Our network of high-quality service providers and\n solar professionals support the following maintenance activities\n
\nChief Operating Officer, Spruce Servicing
\nChief Executive Officer
\nSenior Director, Customer Support
\nVP, IT & Enterprise Applications
\nDirector, Asset Recovery
\n