PageSourceSearch

https://meetquinn.ai/industries/hvac

html meetquinn.ai collected 2026-10-05 12:14:51 UTC 17,220 bytes, 258 lines download raw bytes

1<!DOCTYPE html>
2<html lang="en">
3  <head>
4    <style data-vite-theme="" data-inject-first="">:root {
5      --background: 240 10% 3.9%;
6--foreground: 0 0% 98%;
7--muted: 240 3.7% 15.9%;
8--muted-foreground: 240 5% 64.9%;
9--popover: 240 10% 3.9%;
10--popover-foreground: 0 0% 98%;
11--card: 240 10% 3.9%;
12--card-foreground: 0 0% 98%;
13--border: 240 3.7% 15.9%;
14--input: 240 3.7% 15.9%;
15--primary: 144 58% 63%;
16--primary-foreground: 144 49% 10%;
17--secondary: 240 3.7% 15.9%;
18--secondary-foreground: 0 0% 98%;
19--accent: 240 3.7% 15.9%;
20--accent-foreground: 0 0% 98%;
21--destructive: 0 62.8% 30.6%;
22--destructive-foreground: 0 0% 98%;
23--ring: 240 4.9% 83.9%;
24--radius: 0.5rem;
25  }
26  .light {
27      --background: 0 0% 100%;
28--foreground: 20 14.3% 4.1%;
29--muted: 60 4.8% 95.9%;
30--muted-foreground: 25 5.3% 44.7%;
31--popover: 0 0% 100%;
32--popover-foreground: 20 14.3% 4.1%;
33--card: 0 0% 100%;
34--card-foreground: 20 14.3% 4.1%;
35--border: 20 5.9% 90%;
36--input: 20 5.9% 90%;
37--primary: 144 58% 63%;
38--primary-foreground: 144 49% 10%;
39--secondary: 60 4.8% 95.9%;
40--secondary-foreground: 24 9.8% 10%;
41--accent: 60 4.8% 95.9%;
42--accent-foreground: 24 9.8% 10%;
43--destructive: 0 84.2% 60.2%;
44--destructive-foreground: 60 9.1% 97.8%;
45--ring: 20 14.3% 4.1%;
46--radius: 0.5rem;
47  }</style>
48
49    <!-- dataLayer stub: queues any app-level pushes before GTM loads -->
50    
50<script>window.dataLayer = window.dataLayer || [];</script>
50
51
52    <meta charset="UTF-8" />
53    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1" />
54    <meta name="google-site-verification" content="rdgUFSsjyFU2FNa1DYHSz6T2SvkP4Xz9s5Gg9q5P0cY" />
55    <title>HVAC Training Software | AI-Powered LMS for HVAC Teams | Quinn</title>
56    <meta name="description" content="HVAC training software trusted by leading HVAC companies. AI-powered onboarding for technicians, installers, and service teams." />
57    <meta name="keywords" content="AI training platform, gamified LMS, frontline training, operational team training, HVAC training software, employee onboarding, mobile training, AI course creator" />
58    <link rel="canonical" href="https://meetquinn.ai/industries/hvac" />
59    
60    <!-- Open Graph Meta Tags -->
61    <meta property="og:title" content="HVAC Training Software | AI-Powered LMS for HVAC Teams | Quinn" />
62    <meta property="og:description" content="HVAC training software trusted by leading HVAC companies. AI-powered onboarding for technicians, installers, and service teams." />
63    <meta property="og:type" content="website" />
64    <meta property="og:url" content="https://meetquinn.ai/industries/hvac" />
65    <meta property="og:image" content="https://assets.meetquinn.ai/website/images/products/og-image-quinn-v4.png" />
66    <meta property="og:image:width" content="1200" />
67    <meta property="og:image:height" content="630" />
68    <meta property="og:site_name" content="Quinn" />
69    <meta property="og:locale" content="en_US" />
70    
71    <!-- Twitter Card Meta Tags -->
72    <meta name="twitter:card" content="summary_large_image" />
73    <meta name="twitter:title" content="HVAC Training Software | AI-Powered LMS for HVAC Teams | Quinn" />
74    <meta name="twitter:description" content="HVAC training software trusted by leading HVAC companies. AI-powered onboarding for technicians, installers, and service teams." />
75    <meta name="twitter:image" content="https://assets.meetquinn.ai/website/images/products/og-image-quinn-v4.png" />
76    <meta name="twitter:site" content="@meetquinn" />
77    
78    <!-- Favicon and App Icons -->
79    <link rel="icon" href="/favicon.ico" sizes="32x32" />
80    <link rel="icon" href="https://assets.meetquinn.ai/website/images/Quinn_favicon.svg" type="image/svg+xml" />
81    <!-- Removed: <link rel="icon" href="https://assets.meetquinn.ai/website/images/apple-touch-icon.png" type="image/png">
82         Chrome promoted this `rel="icon"` reference to High priority and decoded
83         the 32KB PNG inside the LCP window on /landing-ai-training (989→1306ms,
84         landing roughly 200ms before the hero IMG paint commit). The real Apple
85         touch-icon declarations (rel="apple-touch-icon") below cover iOS home
86         screen; favicon.ico + Quinn_favicon.svg above cover the browser tab. -->
87
88    <!-- Apple Touch Icons for iOS -->
89    <link rel="apple-touch-icon" href="https://assets.meetquinn.ai/website/images/apple-touch-icon.png" />
90    <link rel="apple-touch-icon" sizes="152x152" href="https://assets.meetquinn.ai/website/images/apple-touch-icon-152x152.png" />
91    <link rel="apple-touch-icon" sizes="167x167" href="https://assets.meetquinn.ai/website/images/apple-touch-icon-167x167.png" />
92    <link rel="apple-touch-icon" sizes="180x180" href="https://assets.meetquinn.ai/website/images/apple-touch-icon-180x180.png" />
93    
94    <!-- Apple Web App Configuration -->
95    <meta name="mobile-web-app-capable" content="yes" />
96    <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
97    <meta name="apple-mobile-web-app-title" content="Quinn" />
98    
99    <!-- DNS prefetch for third-party origins (cheap — no TCP, just DNS warm-up) -->
100    <link rel="dns-prefetch" href="https://www.googletagmanager.com">
101    <link rel="dns-prefetch" href="https://js.hs-scripts.com">
102    <link rel="dns-prefetch" href="https://t.contentsquare.net">
103    <link rel="dns-prefetch" href="https://ddwl4m2hdecbv.cloudfront.net">
104    <!-- HubSpot Meetings preconnect (speeds up /book-demo scheduler) -->
105    <link rel="preconnect" href="https://static.hsappstatic.net">
106    <link rel="preconnect" href="https://meetings.hubspot.com">
107    <link rel="dns-prefetch" href="https://static.hsappstatic.net">
108    <link rel="dns-prefetch" href="https://meetings.hubspot.com">
109    <!-- Inter (LCP + body font) — self-hosted, same-origin, single variable
110         latin woff2. Preloaded so the hero weight is fetched at high priority
111         from connection start (crossorigin required: fonts always fetch in CORS
112         mode, even same-origin). The @font-face (client/src/index.css) uses
113         font-display:optional → never swaps, so the certified CLS is protected.
114         Replaces the dead Poppins loader (0 applied font-family refs) + its
115         Google-Fonts preconnects (no consumer on any production route once Inter
116         is self-hosted; only the lazy /preview/* pages still use webfonts). -->
117    <link rel="preload" href="/images/fonts/inter-latin.woff2" as="font" type="font/woff2" crossorigin>
118    
119    <!-- Hide Intercom widget (safety net; Intercom loads via GTM after idle) -->
120    <style>
121      .intercom-lightweight-app,
122      .intercom-namespace,
123      #intercom-container,
124      .intercom-launcher-frame,
125      .intercom-messenger-frame,
126      [class*="intercom-"] {
127        display: none !important;
128        visibility: hidden !important;
129        opacity: 0 !important;
130        pointer-events: none !important;
131      }
132    </style>
133    <!-- Structured Data: the site-wide Organization / WebSite / SoftwareApplication
134         nodes used to be declared here AND again by the server, so Googlebot got two
135         definitions of the same @id with conflicting descriptions, logos and social
136         URLs on 126 pages. They now live in shared/site-entities.ts and are injected
137         server-side. Do not re-add a JSON-LD block here — scripts/check-jsonld.js
138         fails the build if one comes back. -->
139    
139<script type="module" crossorigin src="/bundles/index-BRXtePuw.js"></script>
139
140    <link rel="modulepreload" crossorigin href="/bundles/vendor-S6w1S69P.js">
141    <link rel="modulepreload" crossorigin href="/bundles/ui-CmKj4tE7.js">
142    <link rel="modulepreload" crossorigin href="/bundles/router-BTvDrYwR.js">
143    <link rel="modulepreload" crossorigin href="/bundles/utils-C4xBKWBT.js">
144    <link rel="stylesheet" crossorigin href="/bundles/index-B8xJoGOR.css">
145    
145<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"WebSite","@id":"https://meetquinn.ai/#website","url":"https://meetquinn.ai","name":"Quinn","alternateName":"Quinn - AI-Powered Training Platform","description":"Quinn delivers AI-powered, gamified learning solutions designed specifically for operational teams and frontline workers.","publisher":{"@id":"https://meetquinn.ai/#organization"},"potentialAction":{"@type":"SearchAction","target":"https://meetquinn.ai/articles?q={search_term_string}","query-input":"required name=search_term_string"}},{"@type":"Organization","@id":"https://meetquinn.ai/#organization","name":"Quinn","alternateName":"Quinn AI","url":"https://meetquinn.ai","logo":{"@type":"ImageObject","url":"https://assets.meetquinn.ai/website/images/products/Quinn_Logo.png","width":200,"height":54},"description":"Quinn is an AI-powered learning management system (LMS) designed for operational teams, frontline workers, and skilled trades. Quinn helps businesses train HVAC technicians, pest control specialists, plumbers, electricians, and other field service professionals faster through gamified learning, AI course generation, and real-time analytics.","foundingDate":"2023","sameAs":["https://www.linkedin.com/company/meetquinn","https://twitter.com/meetquinn"],"contactPoint":{"@type":"ContactPoint","contactType":"sales","url":"https://meetquinn.ai/book-demo","availableLanguage":["English"]},"address":{"@type":"PostalAddress","addressCountry":"US"},"areaServed":{"@type":"Country","name":"United States"},"knowsAbout":["AI-powered training","Gamified learning","Frontline worker training","HVAC technician training","Learning management systems","Employee onboarding","Field service training"]},{"@type":"SoftwareApplication","@id":"https://meetquinn.ai/#software","name":"Quinn","applicationCategory":"EducationalApplication","operatingSystem":"Web, iOS, Android","description":"Quinn is an AI-native LMS that turns your SOPs, docs, and videos into gamified mobile training courses. Built for frontline workers in HVAC, pest control, plumbing, electrical, and field service industries.","publisher":{"@id":"https://meetquinn.ai/#organization"},"featureList":["AI course generation from SOPs and documents","Gamified mobile learning modules","Real-time completion tracking and analytics"]}]}</script>
145
146  
146<script type="application/ld+json">{"@context":"https://schema.org","@type":"BreadcrumbList","@id":"https://meetquinn.ai/industries/hvac#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://meetquinn.ai"},{"@type":"ListItem","position":2,"name":"Industries","item":"https://meetquinn.ai/industries"},{"@type":"ListItem","position":3,"name":"HVAC","item":"https://meetquinn.ai/industries/hvac"}]}</script>
146
147    <link rel="describedby" href="/llms.txt" />
148    <link rel="alternate" type="text/markdown" href="/industries/hvac.md" />
149  </head>
150  <body>
151    <!-- Google Tag Manager (noscript fallback — required by GTM spec, no JS needed) -->
vendor: 72 bytes, lines 151-152
151
152    <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
152GTM-WZ44P5WJ
vendor: 91 bytes, lines 152-154
152"
153    height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
154    
154<!-- End Google Tag Manager (noscript) -->
155    <div id="root"></div>
156    <div id="hvac-portal"></div>
157
158    <!-- Third-party tag loader: deferred until first user interaction (with a 10s
159         fallback). GTM fires Intercom, Facebook pixel, Vector, ZoomInfo, and any other
160         container tags. Deferring GTM naturally defers all of them — ~1.2MB off the
161         critical path and out of the mobile Lighthouse lab trace (cuts TBT). -->
162    
162<script>
163    (function() {
164      var fired = false;
165      function loadAllTags() {
166        if (fired) return;
167        fired = true;
168        // Contentsquare (146 KB) — guarded against double-load. Setting window._uxa
169        // before GTM loads makes GTM's Contentsquare tag template skip its own inject,
170        // so CS loads exactly once even though both sources reference it.
171        if (!window._uxa && !document.querySelector('script[src*="contentsquare"]')) {
172          window._uxa = window._uxa || [];
173          var cs = document.createElement('script');
174          cs.async = true;
175          cs.src = 'https://t.contentsquare.net/uxa/7a41314097d9b.js';
176          document.head.appendChild(cs);
177        }
178
179        // GTM (448 KB container — fires Intercom 342 KB, FB pixel 159 KB, Vector 63 KB, ZoomInfo 12 KB, HubSpot via tags ~94 KB)
vendor: 332 bytes, lines 179-180
179
180        (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src='https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);})(window,document,'script','dataLayer','
180GTM-WZ44P5WJ
vendor: 13 bytes, lines 180-182
180');
181
182        
182// HubSpot tracking (~94 KB, loaded directly as backup if not via GTM tags)
183        var hs = document.createElement('script');
184        hs.id = 'hs-script-loader';
185        hs.async = true;
186        hs.src = '//js.hs-scripts.com/50110724.js';
187        document.head.appendChild(hs);
188
189        // RB2B is intentionally NOT loaded here. It runs eagerly at the end of
190        // <body> instead, because RB2B's own script validator fetches the page
191        // and checks synchronously without any user interaction — a deferred
192        // RB2B never fired in time and failed validation. It is small (~12 KB)
193        // and self-injects an async script, so eager-loading just this one tag
194        // keeps the heavy containers above off the critical path.
195      }
196
197      // Load third-party tags on the FIRST genuine user interaction so they stay
198      // off the critical path AND out of the mobile Lighthouse lab trace (cuts the
199      // 600–1140ms TBT spikes). IMPORTANT: only real-intent events — Lighthouse
200      // performs a PROGRAMMATIC scroll during gathering, which fires `scroll`/
201      // `mousemove` but NOT `pointerdown`/`keydown`. Listening to scroll/mousemove
202      // caused tags (GTM, ContentSquare, etc.) to inject LATE during that synthetic
203      // scroll, after layout settled → large CLS. `pointerdown`+`keydown` cover
204      // real tap/type (pointerdown fires on touch too, so touchstart is redundant
205      // — and touchstart/scroll fire sub-second on mobile, which would drag GTM
206      // back into the LCP window on the exact field-p75 users we're optimizing).
207      //
208      // BACKSTOP: requestIdleCallback with a hard 3s timeout (+ setTimeout(3000)
209      // where rIC is unsupported) loads the tags for passive visitors — including
210      // the cross-origin-iframe-direct booker who fires NO parent-page interaction.
211      // Guarantees GTM (and the LinkedIn Insight Tag + the meetingBookSucceeded
212      // conversion listener GTM hosts) is registered within 3s — well before any
213      // 10s+ booking flow — while still holding GTM off the main thread through the
214      // LCP window. Trigger locked with @hubby + @googy 2026-07-06.
215      var EVENTS = ['pointerdown', 'keydown'];
216      EVENTS.forEach(function(e) {
217        window.addEventListener(e, loadAllTags, { passive: true, once: true });
218      });
219      // The idle backstop only ARMS once the page has finished loading (or 3s in,
220      // whichever comes first). rIC alone fired at ~1.4s on a throttled mobile
221      // /pricing and /book-demo — i.e. DURING the LCP window and, because the
222      // route's page chunk is a lazy import, actually BEFORE it — so ~1.2MB of
223      // tags competed with the bundle for bandwidth on exactly the loads we care
224      // about. Deadline is unchanged in the worst case (still ≤3s + one idle
225      // period), so GTM/the LinkedIn Insight Tag/the meetingBookSucceeded
226      // listener are still registered long before any 10s+ booking flow.
227      function armIdleBackstop() {
228        if ('requestIdleCallback' in window) {
229          requestIdleCallback(loadAllTags, { timeout: 500 });
230        } else {
231          setTimeout(loadAllTags, 500);
232        }
233      }
234      var armed = false;
235      function arm() {
236        if (armed) return;
237        armed = true;
238        armIdleBackstop();
239      }
240      if (document.readyState === 'complete') arm();
241      else window.addEventListener('load', arm, { once: true });
242      setTimeout(arm, 3000);
243    })();
244    </script>
244
245
246    <!-- RB2B visitor de-anonymization (~12 KB) — loaded EAGERLY, unlike the
247         heavy containers in the deferred loader above (GTM/HubSpot/Contentsquare),
248         which stay off the critical path. RB2B's own script validator fetches
249         the page and checks synchronously without any user interaction, so a
250         deferred RB2B never fired in time and failed validation ("Unable to
251         validate your script"). The snippet self-injects an async script, so
252         even eager it does not block rendering; the cost is isolated to this one
253         small tag while the big containers remain deferred. -->
254    
254<script>
255    !function(key){if(window.reb2b)return;window.reb2b={loaded:true};var s=document.createElement("script");s.async=true;s.src="https://ddwl4m2hdecbv.cloudfront.net/b/"+key+"/"+key+".js.gz";document.getElementsByTagName("script")[0].parentNode.insertBefore(s,document.getElementsByTagName("script")[0]);}("4N210HQD5R6Z");
256    </script>
256
257  </body>
258</html>

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.