1<!DOCTYPE html> 2<html lang="en"> 3<head> 4<meta charset="utf-8"> 5<meta name="viewport" content="width=device-width, initial-scale=1"> 6<link rel="icon" href="favicon.ico" sizes="any"> 7<link rel="icon" type="image/png" sizes="32x32" href="favicon.png"> 8<link rel="icon" type="image/png" sizes="256x256" href="apple-touch-icon.png"> 9<link rel="apple-touch-icon" href="apple-touch-icon.png"> 10<title>AI Marketing for Brick-and-Mortar Businesses | Cirrus LED</title> 11<meta name="description" content="Cirrus AI Solutions turn your LED sign into a real-world marketing engine: measure traffic, grade content, and automate plays with Playbook."> 12<link rel="canonical" href="https://www.cirrusled.com/ai-solutions"> 13<meta property="og:type" content="website"> 14<meta property="og:site_name" content="Cirrus LED"> 15<meta property="og:title" content="AI Marketing for Brick-and-Mortar Businesses"> 16<meta property="og:description" content="Cirrus AI Solutions turn your LED sign into a real-world marketing engine: measure traffic, grade content, and automate plays with Playbook."> 17<meta property="og:url" content="https://www.cirrusled.com/ai-solutions"> 18<meta property="og:image" content="https://www.cirrusled.com/images/hero-1.png"> 19<meta name="twitter:card" content="summary_large_image"> 20<meta name="twitter:title" content="AI Marketing for Brick-and-Mortar Businesses"> 21<meta name="twitter:description" content="Cirrus AI Solutions turn your LED sign into a real-world marketing engine: measure traffic, grade content, and automate plays with Playbook."> 22<meta name="twitter:image" content="https://www.cirrusled.com/images/hero-1.png"> 23<link rel="preconnect" href="https://fonts.googleapis.com"> 24<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> 25<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Mulish:wght@300;400;500;600;700;800;900&family=JetBrains+Mono:wght@400;500&display=swap"> 26<link rel="stylesheet" href="assets/css/site.css">
27<script src="https://unpkg.com/lucide@latest/dist/umd/lucide.min.js" defer></script>
27 28<style> 29 /* Framed product screenshot */ 30 .shot { background: #fff; border: 1px solid var(--color-border); border-radius: 14px; box-shadow: var(--shadow-lg); overflow: hidden; } 31 .shot .shot-bar { display: flex; align-items: center; gap: 6px; padding: 10px 14px; background: var(--ink-50); border-bottom: 1px solid var(--color-border); } 32 .shot .shot-bar i { width: 9px; height: 9px; border-radius: 50%; background: var(--ink-200); display: block; } 33 .shot img { width: 100%; display: block; } 34 .shot-caption { font-size: 13px; color: var(--ink-500); margin: 10px 2px 0; } 35 /* Loop strip */ 36 .loop-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 18px; counter-reset: loop; } 37 .loop-step { position: relative; background: #fff; border: 1px solid var(--color-border); border-radius: 16px; padding: 26px; } 38 .loop-step .ls-num { font-family: var(--font-mono); font-size: 12px; font-weight: 600; color: var(--cobalt-600); margin-bottom: 12px; } 39 .loop-step .feature-icon { width: 42px; height: 42px; margin-bottom: 16px; } 40 .loop-step h3 { font-size: 18px; font-weight: 800; letter-spacing: -.01em; margin: 0 0 6px; } 41 .loop-step p { font-size: 14px; line-height: 1.55; color: var(--ink-500); margin: 0; } 42 @media (max-width: 1024px) { .loop-grid { grid-template-columns: repeat(2, 1fr); } } 43 @media (max-width: 640px) { .loop-grid { grid-template-columns: 1fr; } } 44 /* Tier note */ 45 .tier-note { display: flex; align-items: center; justify-content: center; gap: 10px; flex-wrap: wrap; margin: 40px auto 0; font-size: 14.5px; color: var(--ink-500); } 46 .tier-note a { color: var(--cobalt-600); font-weight: 700; } 47</style> 48 <!-- Tracking ported from cirrusled.com (Webflow) --> 49
49<script type="text/javascript">!function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';n.agent='plwebflow';n.queue=[];t=b.createElement(e);t.async=!0;t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window,document,'script','https://connect.facebook.net/en_US/fbevents.js');fbq('init', '1910226229259262');fbq('track', 'PageView');</script>
49<!-- CSS animation code --> 50 <meta name="google-site-verification" content="MOOrklGxaQJEXXWsi2G7oO-Q4SJHg2ucpcwd64OIdhs"> 51 <!-- TikTok Pixel Code Start --> 52
52<script> 53!function (w, d, t) { 54w.TiktokAnalyticsObject=t;var ttq=w[t]=w[t]||[];ttq.methods=["page","track","identify","instances","debug","on","off","once","ready","alias","group","enableCookie","disableCookie","holdConsent","revokeConsent","grantConsent"],ttq.setAndDefer=function(t,e){t[e]=function(){t.push([e].concat(Array.prototype.slice.call(arguments,0)))}};for(var i=0;i<ttq.methods.length;i++)ttq.setAndDefer(ttq,ttq.methods[i]);ttq.instance=function(t){for( 55var e=ttq._i[t]||[],n=0;n<ttq.methods.length;n++)ttq.setAndDefer(e,ttq.methods[n]);return e},ttq.load=function(e,n){var r="https://analytics.tiktok.com/i18n/pixel/events.js",o=n&&n.partner;ttq._i=ttq._i||{},ttq._i[e]=[],ttq._i[e]._u=r,ttq._t=ttq._t||{},ttq._t[e]=+new Date,ttq._o=ttq._o||{},ttq._o[e]=n||{};n=document.createElement("script") 56;n.type="text/javascript",n.async=!0,n.src=r+"?sdkid="+e+"&lib="+t;e=document.getElementsByTagName("script")[0];e.parentNode.insertBefore(n,e)}; 57ttq.load('CUKV4AJC77U0037LQ3LG'); 58ttq.page(); 59}(window, document, 'ttq'); 60</script>
60 61 <!-- TikTok Pixel Code End --> 62
62<script>var _hsp = window._hsp = window._hsp || [];window.dataLayer = window.dataLayer || [];function gtag(){dataLayer.push(arguments);} 63var useGoogleConsentModeV2 = true;var waitForUpdateMillis = 1000; 64var hsLoadGtm = function loadGtm() { if(window._hsGtmLoadOnce) { return; } 65 if (useGoogleConsentModeV2) { 66 gtag('set','developer_id.dZTQ1Zm',true); 67 gtag('consent', 'default', { 'ad_storage': 'denied', 'analytics_storage': 'denied', 'ad_user_data': 'denied', 'ad_personalization': 'denied', 'wait_for_update': waitForUpdateMillis }); 68 _hsp.push(['useGoogleConsentModeV2']) }
vendor: 344 bytes, lines 68-69
68 69 (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','
69GTM-TN3NVW6
vendor: 8 bytes, lines 69-70
69'); 70
70window._hsGtmLoadOnce = true;}; 71_hsp.push(['addPrivacyConsentListener', function(consent){ if(consent.allowed || (consent.categories && consent.categories.analytics)){ hsLoadGtm(); }}]); 72</script>
vendor: 70 bytes, lines 72-73
72 73 <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
73GTM-TN3NVW6
vendor: 85 bytes, lines 73-74
73" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> 74
74<!-- Start of HubSpot Embed Code --> 75
75<script type="text/javascript" id="hs-script-loader" async="" defer="" src="https://js.hs-scripts.com/20857872.js"></script>
75 76 <!-- End of HubSpot Embed Code --> 77 <!-- End tracking --> 78</head> 79<body> 80<div id="site-nav"></div> 81 82<header class="hero-dark"> 83 <div class="hero-bg-pixels"></div> 84 <div class="hero-bg-glow"></div> 85 <div class="hero-bg-cobalt"></div> 86 <div class="container hero-inner"> 87 <h1>Grow your business with AI built for <em>the real world</em>.</h1> 88 <p class="hero-lead">Your sign already reaches every car and customer that passes your door. Cirrus AI Solutions turn it into a marketing engine for your brick-and-mortar business: measuring real traffic, grading your content, recommending your next move, and putting the right message up at exactly the right moment.</p> 89 <div class="hero-ctas"> 90 <a class="btn btn-primary btn-lg" href="get-a-quote">Get quote</a> 91 </div> 92 </div> 93</header> 94 95<!-- ===== THE LOOP ===== --> 96<section class="section"> 97 <div class="container"> 98 <div class="section-header"> 99 <div class="eyebrow">How it works</div> 100 <h2>A marketing loop that never sleeps.</h2> 101 <p>Most small businesses guess at their marketing. Cirrus AI closes the loop: it measures who actually shows up, tells you what's working, and acts on it automatically, right on your display.</p> 102 </div> 103 <div class="loop-grid"> 104 <div class="loop-step" data-reveal> 105 <div class="ls-num">01</div> 106 <div class="feature-icon"><i data-lucide="radar"></i></div> 107 <h3>Measure</h3> 108 <p>The People Counter and Car Tracker capture real foot and vehicle traffic around your business, 24/7.</p> 109 </div> 110 <div class="loop-step" data-reveal> 111 <div class="ls-num">02</div> 112 <div class="feature-icon"><i data-lucide="brain-circuit"></i></div> 113 <h3>Understand</h3> 114 <p>AI turns raw counts into plain-language insights: your peak hours, dead zones, repeat visitors, and conversion rate.</p> 115 </div> 116 <div class="loop-step" data-reveal> 117 <div class="ls-num">03</div> 118 <div class="feature-icon"><i data-lucide="lightbulb"></i></div> 119 <h3>Improve</h3> 120 <p>The Content Grader and AI recommendations tell you exactly what to change, on your sign and in your schedule.</p> 121 </div> 122 <div class="loop-step" data-reveal> 123 <div class="ls-num">04</div> 124 <div class="feature-icon"><i data-lucide="play"></i></div> 125 <h3>Act</h3> 126 <p>Playbook runs it all on autopilot: triggered messages, weather-responsive content, and VIP recognition.</p> 127 </div> 128 </div> 129 </div> 130</section> 131 132<!-- ===== REAL-TIME VISION ===== --> 133<style> 134 .rtv-stage { position: relative; max-width: 1160px; margin: 0 auto; border-radius: 20px; overflow: hidden; box-shadow: var(--shadow-lg); background: #0a0f1c; } 135 .rtv-stage video { width: 100%; display: block; } 136 .rtv-points { display: grid; grid-template-columns: repeat(3, 1fr); gap: 18px; max-width: 1160px; margin: 22px auto 0; } 137 .rtv-point { display: flex; align-items: flex-start; gap: 14px; background: #fff; border: 1px solid var(--color-border); border-radius: 16px; padding: 22px 24px; } 138 .rtv-point .feature-icon { width: 40px; height: 40px; flex-shrink: 0; margin: 0; } 139 .rtv-point h3 { font-size: 16.5px; font-weight: 800; letter-spacing: -.01em; margin: 0 0 4px; } 140 .rtv-point p { font-size: 14px; line-height: 1.5; color: var(--ink-500); margin: 0; } 141 @media (max-width: 900px) { .rtv-points { grid-template-columns: 1fr; } } 142</style> 143<section class="section section-alt" id="real-time"> 144 <div class="container"> 145 <div class="section-header"> 146 <div class="eyebrow">Real-time response</div> 147 <h2>It sees. It learns. It responds.</h2> 148 <p>Cirrus systems watch the world around your sign, turn what they see into data, and answer with dynamic, targeted messaging the instant something happens, not next week, not tomorrow, right now.</p> 149 </div> 150 <div class="rtv-stage" data-reveal> 151 <video src="assets/video/car-tracker-hero.mp4" autoplay muted loop playsinline preload="metadata" aria-label="Cirrus Car Tracker detecting a passing vehicle and the display responding with a targeted message in real time"></video> 152 </div> 153 <div class="rtv-points"> 154 <div class="rtv-point" data-reveal> 155 <div class="feature-icon"><i data-lucide="eye"></i></div> 156 <div> 157 <h3>See the environment</h3> 158 <p>Sensors recognize what's happening around your display: vehicles passing, customers arriving, conditions changing.</p> 159 </div> 160 </div> 161 <div class="rtv-point" data-reveal> 162 <div class="feature-icon"><i data-lucide="database"></i></div> 163 <div> 164 <h3>Collect the data</h3> 165 <p>Every detection becomes structured data: make, frequency, time of day, building a live picture of your audience.</p> 166 </div> 167 </div> 168 <div class="rtv-point" data-reveal> 169 <div class="feature-icon"><i data-lucide="message-square-dot"></i></div> 170 <div> 171 <h3>Respond in the moment</h3> 172 <p>The display reacts instantly with messaging matched to who's actually there, while they're still looking at it.</p> 173 </div> 174 </div> 175 </div> 176 </div> 177</section> 178 179<!-- ===== PLAYBOOK ===== --> 180<style> 181 .pb-shot-wrap { max-width: 1060px; margin: 0 auto 56px; } 182 .pb-cards { display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px; max-width: 1060px; margin: 0 auto; } 183 .pb-flow { max-width: 1060px; margin: 72px auto 0; } 184 .pb-flow-head { text-align: center; max-width: 640px; margin: 0 auto 40px; } 185 .pb-flow-head h3 { font-size: clamp(24px, 2.6vw, 32px); font-weight: 800; letter-spacing: -.02em; color: #fff; margin: 0 0 10px; } 186 .pb-flow-head p { font-size: 16px; line-height: 1.55; color: rgba(255,255,255,.68); margin: 0; } 187 .pb-steps { display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 20px; align-items: stretch; } 188 .pb-step { display: flex; flex-direction: column; } 189 .pb-step .ps-label { display: flex; align-items: center; gap: 10px; margin-bottom: 14px; } 190 .pb-step .ps-label b { font-family: var(--font-mono); font-size: 12px; font-weight: 600; color: var(--cobalt-300); } 191 .pb-step .ps-label span { font-size: 14px; font-weight: 700; color: #fff; } 192 .pb-step .shot { flex: 1; display: flex; flex-direction: column; } 193 .pb-step .shot img { object-fit: cover; height: 100%; flex: 1; } 194 .pb-step .ps-note { font-size: 13px; line-height: 1.5; color: rgba(255,255,255,.58); margin: 12px 2px 0; } 195 @media (max-width: 1024px) { .pb-cards, .pb-steps { grid-template-columns: 1fr; } } 196</style> 197<section class="section section-dark" id="playbook"> 198 <div class="container"> 199 <div class="section-header on-dark"> 200 <div class="eyebrow on-dark">Playbook</div> 201 <h2>The backbone: marketing that runs itself.</h2> 202 <p>Playbook is where data becomes action. Build a library of plays, automated marketing moves that watch your traffic, your weather, even individual vehicles, and change what's on your sign the moment conditions are right.</p> 203 </div> 204 205 <div class="pb-shot-wrap" data-reveal> 206 <div class="shot"> 207 <div class="shot-bar"><i></i><i></i><i></i></div> 208 <img src="assets/ai/playbook.png" alt="The Playbook library in ScreenHub, showing prebuilt plays, active plays, and audiences"> 209 </div> 210 <p class="shot-caption" style="color:rgba(255,255,255,.55)">The Play Library in ScreenHub: prebuilt plays, your custom plays, and audiences, all in one place.</p> 211 </div> 212 213 <div class="pb-cards"> 214 <div class="feature" data-reveal> 215 <div class="feature-icon"><i data-lucide="library"></i></div> 216 <h3>Prebuilt plays</h3> 217 <p>Proven plays, ready to configure in minutes. Reward VIPs greets repeat vehicles with a personalized offer. Weather-Responsive switches your content for rain, snow, cold, or heat, no camera required.</p> 218 </div> 219 <div class="feature" data-reveal> 220 <div class="feature-icon"><i data-lucide="git-branch"></i></div> 221 <h3>Custom plays</h3> 222 <p>
222Build your own with simple if/then rules: pick a trigger, choose a playlist, set a schedule, launch. If a condition is met, your display reacts in real time, no one has to touch a thing.</p> 223 </div> 224 <div class="feature" data-reveal> 225 <div class="feature-icon"><i data-lucide="scan-eye"></i></div> 226 <h3>Audiences</h3> 227 <p>Define exactly who a play is for, like Teslas seen three or more times in the past three months, and trigger content the moment a vehicle in that audience is detected.</p> 228 </div> 229 </div> 230 231 <div class="pb-flow"> 232 <div class="pb-flow-head"> 233 <h3>A play in action: conquest advertising</h3> 234 <p>A car dealership wants to reach drivers of a competing brand. Here's the whole play, start to finish.</p> 235 </div> 236 <div class="pb-steps"> 237 <div class="pb-step" data-reveal> 238 <div class="ps-label"><b>STEP 1</b><span>Define the audience</span></div> 239 <div class="shot"> 240 <div class="shot-bar"><i></i><i></i><i></i></div> 241 <img src="assets/ai/playbook-audiences.png" alt="Audience filters in Playbook: time range, appearance frequency, and vehicle attributes"> 242 </div> 243 <p class="ps-note">Filter by time range, visit frequency, and vehicle attributes like make.</p> 244 </div> 245 <div class="pb-step" data-reveal> 246 <div class="ps-label"><b>STEP 2</b><span>Set the trigger</span></div> 247 <div class="shot"> 248 <div class="shot-bar"><i></i><i></i><i></i></div> 249 <img src="assets/ai/custom-play-2.png" alt="Configure Your Own Play: if vehicle make equals Honda, then play the Target Hondas playlist"> 250 </div> 251 <p class="ps-note">If a matching vehicle is detected, then play the right playlist on your display.</p> 252 </div> 253 <div class="pb-step" data-reveal> 254 <div class="ps-label"><b>STEP 3</b><span>The sign reacts</span></div> 255 <div class="shot"> 256 <div class="shot-bar"><i></i><i></i><i></i></div> 257 <img src="assets/ai/custom-play-1.png" alt="A conquest ad on the display: Is that a Honda? Ready for an upgrade?"> 258 </div> 259 <p class="ps-note">The moment the trigger fires, the targeted message takes over the screen.</p> 260 </div> 261 </div> 262 </div> 263 </div> 264</section> 265 266<!-- ===== CONTENT GRADER ===== --> 267<style> 268 .cg-compare { display: grid; grid-template-columns: 380px 1fr; gap: 28px; align-items: center; max-width: 1100px; margin: 0 auto; } 269 .cg-arrow { display: none; } 270 .cg-checks { display: grid; grid-template-columns: 1fr 1fr; gap: 12px 24px; max-width: 1100px; margin: 36px auto 0; } 271 .cg-checks li { display: flex; align-items: flex-start; gap: 10px; font-size: 15px; color: var(--ink-800); line-height: 1.5; list-style: none; } 272 .cg-checks li svg { flex-shrink: 0; margin-top: 3px; color: var(--cobalt-500); width: 18px; height: 18px; } 273 @media (max-width: 900px) { .cg-compare { grid-template-columns: 1fr; } .cg-checks { grid-template-columns: 1fr; } } 274</style> 275<section class="section section-alt" id="content-grader"> 276 <div class="container"> 277 <div class="section-header"> 278 <div class="eyebrow">Content Grader</div> 279 <h2>An art director for every slide.</h2> 280 <p>Most signs underperform because of fixable content mistakes. The Content Grader reviews what's playing on your display and hands back specific, prioritized improvements, what's wrong, why it matters, and exactly how to fix it.</p> 281 </div> 282 <div class="cg-compare"> 283 <div data-reveal> 284 <div class="shot"> 285 <div class="shot-bar"><i></i><i></i><i></i></div> 286 <img src="assets/ai/content-grader-dashboard.png" alt="A sample slide being graded: Big Sale!!! Come on in!"> 287 </div> 288 <p class="shot-caption">Your slide goes in. This one looks fine, right?</p> 289 </div> 290 <div data-reveal> 291 <div class="shot"> 292 <div class="shot-bar"><i></i><i></i><i></i></div> 293 <img src="assets/ai/content-grader-detail-1.png" alt="Content Grader recommendations: current issue and recommendation for adding the business name or offer details"> 294 </div> 295 <p class="shot-caption">Specific fixes come out: each one pairs the current issue with a concrete recommendation.</p> 296 </div> 297 </div> 298 <ul class="cg-checks" data-reveal> 299 <li><i data-lucide="zap"></i><span><b>Clarity:</b> add the business name or offer details so viewers know who the ad is for.</span></li> 300 <li><i data-lucide="image"></i><span><b>Imagery:</b> use an image that actually matches the sale instead of distracting from it.</span></li> 301 <li><i data-lucide="type"></i><span><b>Specificity:</b> replace generic copy with the product, discount, or limited-time reason to stop in.</span></li> 302 <li><i data-lucide="megaphone"></i><span><b>Call to action:</b> strengthen the next step with urgency and practical detail.</span></li> 303 </ul> 304 </div> 305</section> 306 307<!-- ===== AI RECOMMENDATIONS & WEEKLY EMAIL ===== --> 308<section class="section" id="ai-insights"> 309 <div class="container"> 310 <div class="section-header"> 311 <div class="eyebrow">AI recommendations</div> 312 <h2>Advice that reads like a consultant wrote it.</h2> 313 <p>No chart-squinting required. The AI Performance Overview studies your traffic and your schedule, then explains, in plain language, what happened and what to do next.</p> 314 </div> 315 <div class="media-row"> 316 <div data-reveal> 317 <div class="shot"> 318 <div class="shot-bar"><i></i><i></i><i></i></div> 319 <img src="assets/ai/ai-performance-1.png" alt="AI Performance Overview summarizing visitor patterns in plain language"> 320 </div> 321 </div> 322 <div class="media-row-text"> 323 <h3>It knows your quiet Mondays and your 4pm rush.</h3> 324 <p>The overview reads your foot traffic like a story: which days carry the week, when engagement peaks, and which spike is worth recreating. Every insight is tied to a number you can verify.</p> 325 <ul class="check-list"> 326 <li><i data-lucide="check"></i>Plain-language summary of your week, written from your real data</li> 327 <li><i data-lucide="check"></i>Peak and lowest times surfaced automatically</li> 328 <li><i data-lucide="check"></i>Refreshed continuously in your ScreenHub dashboard</li> 329 </ul> 330 </div> 331 </div> 332 <div class="media-row reverse"> 333 <div class="media-row-text"> 334 <h3>Then it tells you the play to run.</h3> 335 <p>Numbered, prioritized recommendations, each one tied to a specific window in your data and labeled by impact. Schedule a demo loop for your busiest hour. Fill the lunch dead zone with a countdown offer. Recreate the surge that worked.</p> 336 <p style="margin-bottom:0">Every Monday, the same intelligence lands in your inbox as a weekly foot traffic email: the high-level view, the AI insight, and what to try next, before you've had your coffee.</p> 337 </div> 338 <div data-reveal> 339 <div class="shot"> 340 <div class="shot-bar"><i></i><i></i><i></i></div> 341 <img src="assets/ai/ai-performance-2.png" alt="Numbered AI recommendations labeled high impact"> 342 </div> 343 <p class="shot-caption">Recommendations are ranked and labeled by impact, ready to act on.</p> 344 </div> 345 </div> 346 </div> 347</section> 348 349<!-- ===== PEOPLE COUNTER ===== --> 350<style> 351 .pc-stage { position: relative; border-radius: 20px; overflow: hidden; box-shadow: var(--shadow-lg); background: #0a0f1c; } 352 .pc-stage video { width: 100%; display: block; } 353 #people-counter .media-row { align-items: center; } 354 #people-counter .media-row-text h3 { color: #fff; font-size: clamp(22px, 2.4vw, 30px); font-weight: 800; letter-spacing: -.02em; margin: 0 0 14px; } 355 #people-counter .media-row-text p { color: rgba(255,255,255,.72); } 356 #people-counter .check-list li { color: rgba(255,255,255,.84); } 357 #people-counter .check-list li i, #people-counter .check-list li svg { color: var(--cobalt-300); } 358</style> 359<section class="section section-dark" id="people-counter"> 360 <div class="container"> 361 <div class="section-header on-dark"> 362 <div class="eyebrow on-dark">People Counter</div> 363 <h2>Count every visitor. Identify no one.</h2> 364 <p>The People Counter is the indoor half of the sensor suite: a discreet, ceiling-mounted unit that measures real foot traffic at your entrances and feeds it into the same AI loop as everything else, no separate dashboard, no extra login.</p> 365 </div> 366 <div class="media-row"> 367 <div data-reveal> 368 <div class="pc-stage"> 369 <video src="assets/video/people-counter.mp4" autoplay muted loop playsinline preload="metadata" aria-label="The Cirrus People Counter using computer vision to detect and count people as they cross a doorway"></video> 370 </div> 371 </div> 372 <div class="media-row-text"> 373 <h3>Counts people, never identifies them.</h3> 374 <p>An on-device AI model continually adapts to its environment, filtering out the noise: shopping carts, swinging doors, pets. It cannot see, recognize, or remember any specific individual. It simply detects the general presence of a person as they cross the threshold.</p> 375 <ul class="check-list"> 376 <li><i data-lucide="check"></i>Entry and exit patterns, tracked in real time</li> 377 <li><i data-lucide="check"></i>Dwell time, so you can tune layouts, promotions, and staffing</li> 378 <li><i data-lucide="check"></i>Daily and weekly peak-hour reports, straight to ScreenHub</li> 379 </ul> 380 </div> 381 </div> 382 </div> 383</section> 384 385<!-- ===== SENSORS & REPORTS ===== --> 386<style> 387 .sensor-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 24px; } 388 .sensor-card { background: #fff; border: 1px solid var(--color-border); border-radius: 18px; overflow: hidden; display: flex; flex-direction: column; } 389 .sensor-card > img { width: 100%; aspect-ratio: 16/8; object-fit: cover; } 390 .sensor-card .sn-body { padding: 30px 30px 26px; } 391 .sensor-card .sn-body h3 { font-size: 22px; font-weight: 800; letter-spacing: -.015em; margin: 0 0 8px; } 392 .sensor-card .sn-body p { font-size: 15px; line-height: 1.55; color: var(--ink-500); margin: 0; } 393 .sensor-card .sn-shot { padding: 0 22px 24px; margin-top: auto; } 394 .sensor-card .sn-stats { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 16px; } 395 .sensor-card .sn-stats span { font-family: var(--font-mono); font-size: 12px; font-weight: 500; color: var(--ink-700); background: var(--ink-50); border: 1px solid var(--color-border); border-radius: 999px; padding: 5px 11px; } 396 @media (max-width: 900px) { .sensor-grid { grid-template-columns: 1fr; } } 397</style> 398<section class="section section-alt" id="sensors"> 399 <div class="container"> 400 <div class="section-header"> 401 <div class="eyebrow">The data layer</div> 402 <h2>Two sensors feed the whole system.</h2> 403 <p>Every insight, grade, and play starts with real-world measurement. Add a People Counter, a Car Tracker, or both to any Cirrus screen.</p> 404 </div> 405 <div class="sensor-grid"> 406 <div class="sensor-card" data-reveal> 407 <img src="assets/ext/ec7c429039.webp" alt="Cirrus People Counter"> 408 <div class="sn-body"> 409 <h3>People Counter</h3> 410 <p>Discreet, highly accurate foot traffic tracking: entries, exits, dwell time, and live occupancy, with key metrics charted across any date range.</p> 411 <div class="sn-stats"><span>visitors/day</span><span>dwell time</span><span>peak hours</span><span>live activity</span></div> 412 </div> 413 <div class="sn-shot"> 414 <div class="shot"> 415 <div class="shot-bar"><i></i><i></i><i></i></div> 416 <img src="assets/ai/pc-dashboard-2.png" alt="People Counter key metrics: average daily visitors, dwell time, peak enter time, and total visitors chart"> 417 </div> 418 </div> 419 </div> 420 <div class="sensor-card" data-reveal> 421 <img src="assets/ext/54d9c18805.webp" alt="Cirrus Car Tracker"> 422 <div class="sn-body"> 423 <h3>Car Tracker</h3> 424 <p>Real-time vehicle analytics outside your display: impressions, visits, conversion rate, repeat visitors, and an hour-by-hour traffic heatmap.</p> 425 <div class="sn-stats"><span>impressions</span><span>visits</span><span>conversion</span><span>repeat rate</span><span>heatmap</span></div> 426 </div> 427 <div class="sn-shot"> 428 <div class="shot"> 429 <div class="shot-bar"><i></i><i></i><i></i></div> 430 <img src="assets/ai/car-tracker-1.png" alt="Car Tracker report: total impressions, unique impressions, visits, and conversion rate"> 431 </div> 432 </div> 433 </div> 434 </div> 435 <div style="max-width:1100px;margin:24px auto 0" data-reveal> 436 <div class="shot"> 437 <div class="shot-bar"><i></i><i></i><i></i></div> 438 <video src="assets/video/traffic-reports.mp4" autoplay muted loop playsinline preload="metadata" aria-label="Car Tracker and People Counter reports in ScreenHub: impressions, visits, conversion, and the hour-by-hour traffic heatmap"></video> 439 </div> 440 <p class="shot-caption">The reports in motion: impressions, visits, conversion, and an hour-by-hour heatmap that shows exactly when your audience drives by, so your best content runs when it counts.</p> 441 </div> 442 <div class="tier-note" data-reveal> 443 <i data-lucide="layers" style="width:16px;height:16px;color:var(--cobalt-500)"></i>
444 <span>Feature availability depends on your subscription.</span> 445 </div> 446 </div> 447</section> 448 449<section class="section" style="padding-top:0;margin-top:96px"> 450 <div class="container"> 451 <div class="cta-band"> 452 <div class="cta-band-glow"></div> 453 <div class="cta-band-inner"> 454 <div><h2>Put your sign to work.</h2><p>Pair a Cirrus display with AI Solutions and turn the traffic you already have into customers you keep.</p></div> 455 <div class="cta-band-ctas"><a class="btn btn-primary btn-lg" href="get-a-quote">Get quote</a></div> 456 </div> 457 </div> 458 </div> 459</section> 460 461<div id="site-footer"></div>
462<script>window.SITE_BASE="";</script>
vendor: 1 bytes, line 462
462
463<script src="assets/js/site.js"></script>
vendor: 1 bytes, line 463
463
464<script> 465 // Play looping videos only while on screen 466 (function () { 467 var vids = document.querySelectorAll('video[loop]'); 468 if (!('IntersectionObserver' in window)) return; 469 var io = new IntersectionObserver(function (entries) { 470 entries.forEach(function (e) { 471 if (e.isIntersecting) { e.target.play().catch(function () {}); } 472 else { e.target.pause(); } 473 }); 474 }, { threshold: 0.2 }); 475 vids.forEach(function (v) { io.observe(v); }); 476 })(); 477</script>
477 478</body> 479</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.