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<title>What we do · duallo</title> 7<meta name="description" content="Walkdown video in. Findings report out. Under 2 hours. No special hardware, no new routines. duallo fits between routine walkdowns and formal MI." /> 8<link rel="canonical" href="https://duallo.ai/what-we-do.html" /> 9<meta property="og:type" content="website" /> 10<meta property="og:url" content="https://duallo.ai/what-we-do.html" /> 11<meta property="og:title" content="How duallo works · walkdown video to findings" /> 12<meta property="og:description" content="A short walk becomes a report full of findings. Five steps from hitting record to a findings report on a model you can explore." /> 13<meta property="og:image" content="https://duallo.ai/assets/og-image.png" /> 14<meta name="twitter:card" content="summary_large_image" /> 15<meta name="twitter:title" content="How duallo works" /> 16<meta name="twitter:description" content="A short walk becomes a report full of findings. See the five steps." /> 17<meta name="twitter:image" content="https://duallo.ai/assets/og-image.png" /> 18<link rel="preconnect" href="https://fonts.googleapis.com" /> 19<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin /> 20<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" rel="stylesheet" /> 21<link rel="stylesheet" href="assets/duallo-tokens.css" /> 22<link rel="stylesheet" href="assets/site.css" /> 23<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@mdi/[email protected]/css/materialdesignicons.min.css" /> 24<link rel="icon" type="image/png" href="assets/duallo-mark.png" />
25<script>(function(){try{if(!window.matchMedia("(prefers-reduced-motion: reduce)").matches)document.documentElement.classList.add("motion");}catch(e){}})();</script>
25 26<style> 27 /* "What duallo isn't" â clean divided rows for scannability */ 28 #not .disambig { padding: clamp(22px, 3vw, 34px); } 29 #not .disambig ul { margin: 0; gap: 0; } 30 #not .disambig li { 31 display: grid; 32 grid-template-columns: auto 1fr; 33 gap: 14px; 34 align-items: start; 35 padding: 18px 0; 36 border-top: 1px solid var(--line-soft); 37 } 38 #not .disambig li:first-child { border-top: 0; padding-top: 0; } 39 #not .disambig li:last-child { padding-bottom: 0; } 40 #not .disambig li::before { margin-top: 1px; } 41 #not .dis-text { display: grid; gap: 4px; min-width: 0; } 42 #not .dis-claim { font-weight: var(--fw-semibold); color: var(--fg-1); line-height: 1.4; } 43 #not .dis-desc { color: var(--fg-2); font-size: 0.94rem; line-height: 1.5; } 44</style> 45 <!-- Instantly (Leadsy) visitor tag --> 46
46<script id="vtag-ai-js" async src="https://r2.leadsy.ai/tag.js" data-pid="r1rsEPCbXoReTh6Y" data-version="062024"></script>
46 47</head> 48<body data-page="what"> 49 50<main> 51 52 <!-- HERO --> 53 <section class="hero" data-screen-label="What we do, Hero"> 54 <div class="container"> 55 <div style="max-width:900px;"> 56 <span class="eyebrow">What we do</span> 57 <h1 class="hero-title" style="margin-top:18px; max-width:18ch;"> 58 A short walk becomes a report full of <em>findings</em>. 59 </h1> 60 <p class="hero-lede" style="margin-top:20px; max-width:62ch;"> 61 No special hardware. No new routines. No change to who walks or when. Here's exactly how, step by step. 62 </p> 63 </div> 64 </div> 65 </section> 66 67 <!-- ============================================================ 68 END-TO-END WALKTHROUGH · visual pipeline, ending in the live model 69 ============================================================ --> 70 <section class="block" id="process"> 71 <div class="container"> 72 <div style="display:grid; gap:14px; max-width:760px; margin-bottom:clamp(36px,5vw,56px);"> 73 <span class="eyebrow">From walk to action</span> 74 <h2 class="section-title">Five steps. <br>No scanning rig, no site visit, no change to the walk.</h2> 75 <p class="section-lede">Here's exactly what happens after your team hits record.</p> 76 </div> 77 78 <div class="walk-story"> 79 80 <!-- 01 · Film --> 81 <div class="wbeat" data-reveal> 82 <div class="wbeat-node">01</div> 83 <div class="wbeat-inner"> 84 <div class="wbeat-visual walk-view"> 85 <video class="walk-view-vid" src="assets/walk-clip.mp4" autoplay muted loop playsinline preload="metadata" poster="assets/hero-walk.webp"></video> 86 <div class="walk-view-veil"></div> 87 <span class="walk-rec"><span class="walk-rec-dot"></span> REC</span> 88 <span class="walk-time">00:50</span> 89 <span class="walk-cap">Compressor walkdown · iPhone</span> 90 </div> 91 <div class="wbeat-text"> 92 <span class="wbeat-kick">On site</span> 93 <h3>Your team films the walk</h3> 94 <p>A routine walkdown on a phone or GoPro. Anywhere from 45 seconds to a couple of minutes is plenty. No special protocol, no new training, no kit to carry.</p> 95 </div> 96 </div> 97 </div> 98 99 <!-- 02 · Upload --> 100 <div class="wbeat" data-reveal> 101 <div class="wbeat-node">02</div> 102 <div class="wbeat-inner"> 103 <div class="wbeat-visual walk-pad"> 104 <div class="walk-up2"> 105 <div class="wu-drop"> 106 <i class="mdi mdi-tray-arrow-up" aria-hidden="true"></i> 107 <span>Drop walkdown footage</span> 108 </div> 109 <div class="wu-file"><i class="mdi mdi-file-video-outline" aria-hidden="true"></i></div> 110 <div class="wu-card"> 111 <div class="walk-up-file"> 112 <i class="mdi mdi-file-video-outline" aria-hidden="true"></i> 113 <div class="walk-up-meta"><strong>compressor_walkdown.mp4</strong><span>142 MB · 50s</span></div> 114 <i class="mdi mdi-check-circle walk-up-done wu-done" aria-hidden="true"></i> 115 </div> 116 <div class="wu-bar"><span class="wu-fill"></span></div> 117 <div class="walk-up-foot"><i class="mdi mdi-lock-outline" aria-hidden="true"></i> Encrypted · uploaded via secure link</div> 118 </div> 119 </div> 120 </div> 121 <div class="wbeat-text"> 122 <span class="wbeat-kick">Upload</span> 123 <h3>Footage uploads through your browser</h3> 124 <p>Secure, encrypted, in-browser. No IT involvement, no site access from us, no scanning equipment. The walk goes straight up and it's on its way.</p> 125 </div> 126 </div> 127 </div> 128 129 <!-- 03 · Reconstruct --> 130 <div class="wbeat" data-reveal> 131 <div class="wbeat-node">03</div> 132 <div class="wbeat-inner"> 133 <div class="wbeat-visual walk-scan walk-rebuild"> 134 <div class="walk-rb-frame is-on" style="background-image:url('assets/frames/frame-1.webp')"></div> 135 <div class="walk-rb-frame" style="background-image:url('assets/frames/frame-2.webp')"></div> 136 <div class="walk-rb-frame" style="background-image:url('assets/frames/frame-3.webp')"></div> 137 <div class="walk-rb-frame" style="background-image:url('assets/frames/frame-4.webp')"></div> 138 <div class="walk-rb-frame" style="background-image:url('assets/frames/frame-5.webp')"></div> 139 <div class="walk-scan-veil"></div> 140 <div class="walk-scan-line"></div>
141 <span class="walk-cap walk-rb-cap">Reconstructing · frame 1 / 5</span> 142 </div> 143 <div class="wbeat-text"> 144 <span class="wbeat-kick">What duallo does</span> 145 <h3>duallo rebuilds the walk and reviews every frame</h3> 146 <p>The footage becomes a navigable visual record, and every frame is checked for leaks, corrosion and hazards. The things easy to walk straight past.</p> 147 </div> 148 </div> 149 </div> 150 151 <!-- 04 · Findings ready --> 152 <div class="wbeat" data-reveal> 153 <div class="wbeat-node">04</div> 154 <div class="wbeat-inner"> 155 <div class="wbeat-visual walk-pad"> 156 <div class="walk-found"> 157 <div class="walk-toast"> 158 <i class="mdi mdi-bell-ring-outline" aria-hidden="true"></i> 159 <div><strong>Findings ready</strong><span>24 findings · 50s walkdown</span></div> 160 </div> 161 <div class="wf-feed"> 162 <div class="wf-track"> 163 <div class="report-mock-row is-flagged"><span class="sev sev-hi">High</span><span class="label">Potential oil leak</span><span class="meta">00:02 · visible staining</span></div> 164 <div class="report-mock-row"><span class="sev sev-hi">High</span><span class="label">Leaking temporary joint</span><span class="meta">00:06 · staining at joint</span></div> 165 <div class="report-mock-row"><span class="sev sev-med">Med</span><span class="label">Trip hazard</span><span class="meta">00:24 · temporary tubing</span></div> 166 <div class="report-mock-row"><span class="sev sev-med">Med</span><span class="label">Surface corrosion</span><span class="meta">00:31 · support bracket</span></div> 167 <div class="report-mock-row"><span class="sev sev-low">Low</span><span class="label">Missing insulation</span><span class="meta">00:44 · pipe run</span></div> 168 <div class="report-mock-row is-flagged" aria-hidden="true"><span class="sev sev-hi">High</span><span class="label">Potential oil leak</span><span class="meta">00:02 · visible staining</span></div> 169 <div class="report-mock-row" aria-hidden="true"><span class="sev sev-hi">High</span><span class="label">Leaking temporary joint</span><span class="meta">00:06 · staining at joint</span></div> 170 <div class="report-mock-row" aria-hidden="true"><span class="sev sev-med">Med</span><span class="label">Trip hazard</span><span class="meta">00:24 · temporary tubing</span></div> 171 <div class="report-mock-row" aria-hidden="true"><span class="sev sev-med">Med</span><span class="label">Surface corrosion</span><span class="meta">00:31 · support bracket</span></div> 172 <div class="report-mock-row" aria-hidden="true"><span class="sev sev-low">Low</span><span class="label">Missing insulation</span><span class="meta">00:44 · pipe run</span></div> 173 </div> 174 </div> 175 </div> 176 </div> 177 <div class="wbeat-text"> 178 <span class="wbeat-kick">Same day findings</span> 179 <h3>A structured findings report lands</h3> 180 <p>Each finding carries the moment in the walk it was seen and visual context, ready to route into your CMMS or work-order flow.</p> 181 </div> 182 </div> 183 </div> 184 185 <!-- 05 · Review the model (live) --> 186 <div class="wbeat wbeat-final" data-reveal> 187 <div class="wbeat-node">05</div> 188 <div class="wbeat-text wbeat-final-head"> 189 <span class="wbeat-kick">The payoff</span> 190 <h3>You review the finished model, every finding pinned in place</h3> 191 <p>This is the actual output from the 50-second walk above. Spin the model, zoom in, and tap any pin to jump to the exact frame it came from.</p> 192 </div> 193 194 <div class="modelviewer" data-model-viewer data-ply="assets/model-250k.ply" data-markers="assets/Markers.json" data-poster="assets/hero-walk.webp"> 195 <div class="mv-stage"> 196 <div class="mv-poster" style="background-image:url('assets/hero-walk.webp')"> 197 <div class="mv-poster-veil"></div> 198 <p class="mv-poster-sub">Reconstructed from 50 seconds of walkdown footage · drag to rotate, scroll to zoom</p> 199 </div> 200 <div class="mv-tip" aria-hidden="true"></div> 201 <div class="mv-badge" hidden>Demo geometry · drop your <code>.ply</code> at <code>assets/model.ply</code></div> 202 </div> 203 <div class="mv-footer"> 204 <div class="mv-legend">
205 <span class="mv-leg"><span class="mv-dot" style="color:var(--status-warning); background:var(--status-warning)"></span>Anomaly</span> 206 </div> 207 <span class="mv-hint"><i class="mdi mdi-rotate-3d-variant"></i> Drag to rotate · scroll or pinch to zoom · tap a pin</span> 208 </div> 209 </div> 210 </div> 211 212 </div> 213 214 <div class="process-cta" style="margin-top: clamp(40px,5vw,64px); display:grid; gap:18px; justify-items:center; text-align:center;"> 215 <p class="section-lede" style="max-width:48ch;">That's the whole pipeline. Send one walk and get your own findings on a model like this.</p> 216 <div class="hero-actions" style="margin-top:0; justify-content:center;"> 217 <a class="btn btn-lg btn-arrow" href="get-started.html">Get your findings</a> 218 <a class="btn-link" href="https://calendly.com/nick-i4m/20-minute-meeting" target="_blank" rel="noopener">Book a 20-minute call</a> 219 </div> 220 </div> 221 </div> 222 </section> 223 224 <!-- HOW FINDINGS ARE DETECTED · model flags, people verify, your team decides --> 225 <section class="block-tight band" id="how-detected" data-screen-label="What we do, How findings are detected"> 226 <div class="container"> 227 <div style="display:grid; gap:14px; max-width:760px; margin-bottom:36px;"> 228 <span class="eyebrow">How findings are detected</span> 229 <h2 class="section-title" style="font-size:clamp(1.4rem, 2.4vw, 1.9rem);">Computer vision flags. 230People verify. 231Your team decides.</h2> 232 <p class="section-lede">duallo isn't a black box that emails you raw AI output. Every finding passes a person before it reaches you. That's the part that makes it usable.</p> 233 </div> 234 <div class="grid grid-3"> 235 <div class="card"> 236 <span class="kicker">01 · The model</span> 237 <h3 style="font-size:1.1rem; font-weight:600; margin-top:6px;">Computer vision flags</h3> 238 <p class="muted" style="margin-top:10px;">Models trained on industrial walkdown footage watch every frame and surface potential issues: leaks, corrosion, CUI risk markers, missed inspection points.</p> 239 </div> 240 <div class="card card-accent-stripe"> 241 <span class="kicker">02 · The people</span> 242 <h3 style="font-size:1.1rem; font-weight:600; margin-top:6px;">A reviewer verifies every flag</h3> 243 <p class="muted" style="margin-top:10px;">Before anything reaches your team, a trained reviewer checks each flagged candidate and clears the noise, so you're never handed raw model output to sort through.</p> 244 </div> 245 <div class="card"> 246 <span class="kicker">03 · Your call</span> 247 <h3 style="font-size:1.1rem; font-weight:600; margin-top:6px;">Your team decides</h3> 248 <p class="muted" style="margin-top:10px;">Findings arrive as leads, not conclusions. What matters and what gets actioned stays with your inspectors and maintenance team.</p> 249 </div> 250 </div> 251 <p class="muted" style="margin-top:24px; max-width:72ch;">That human-in-the-loop step is why we call the output leads, not conclusions. The model catches what's easy to miss, a person confirms it's real, and the judgement stays with you.</p> 252 </div> 253 </section> 254 255 <!-- FITS YOUR EXISTING WORKFLOWS · self-contained overview + role pointer --> 256 <section class="block"> 257 <div class="container"> 258 <div style="display:grid; gap:14px; max-width:760px; margin-bottom:32px;"> 259 <span class="eyebrow">How it fits your workflows</span> 260 <h2 class="section-title">It plugs into the work your team already does.</h2> 261 <p class="section-lede">No new routine to adopt. duallo feeds the cycles and systems you already run.</p> 262 </div> 263 <div class="grid grid-4"> 264 <div class="card"> 265 <h3 style="font-size:1.05rem; font-weight:600;">Routine walkdowns</h3> 266 <p class="muted" style="margin-top:8px; font-size:0.95rem;">Your team films the walks they already do. No change to routes, schedules, or who walks.</p> 267 </div> 268 <div class="card"> 269 <h3 style="font-size:1.05rem; font-weight:600;">MI inspection prep</h3> 270 <p class="muted" style="margin-top:8px; font-size:0.95rem;">Visual evidence of plant state between formal API 510 / 570 / 653 cycles.</p> 271 </div> 272 <div class="card"> 273 <h3 style="font-size:1.05rem; font-weight:600;">PHA, MoC & RCM</h3> 274 <p class="muted" style="margin-top:8px; font-size:0.95rem;">What's actually on the plant right now, not what was on last cycle's drawings.</p> 275 </div> 276 <div class="card"> 277 <h3 style="font-size:1.05rem; font-weight:600;">CMMS work orders</h3> 278 <p class="muted" style="margin-top:8px; font-size:0.95rem;">Findings export in a structure that flows into your existing system.</p> 279 </div> 280 </div> 281 <a class="btn-link" href="for-your-team.html" style="margin-top:28px; display:inline-block;">What duallo means for your role </a> 282 </div> 283 </section> 284 285 <!-- WHAT THIS ISN'T, high prominence to disarm wrong mental models --> 286 <section class="block band" id="not"> 287 <div class="container"> 288 <div class="grid" style="grid-template-columns: 1fr 1.4fr; gap:48px; align-items:center;"> 289 <div>
290 <span class="eyebrow">What duallo isn't</span> 291 <h2 class="section-title" style="margin-top:16px;">If you've been pitched LiDAR or digital twins, this isn't that.</h2> 292 <p class="muted" style="margin-top:14px; max-width:42ch;"> 293 duallo is a findings tool, not a scanning or documentation tool. The visual record is the mechanism, findings are the product. 294 </p> 295 </div> 296 <div class="disambig"> 297 <ul> 298 <li><div class="dis-text"><span class="dis-claim">Not a 3D scan, point cloud, or digital twin.</span><span class="dis-desc">duallo doesn't replace LiDAR vendors or scanning services.</span></div></li> 299 <li><div class="dis-text"><span class="dis-claim">Not a documentation system.</span><span class="dis-desc">Doesn't update P&IDs, PFDs, or schematics.</span></div></li> 300 <li><div class="dis-text"><span class="dis-claim">Not a replacement for certified MI inspections.</span><span class="dis-desc">duallo lives between routine walkdowns and formal MI cycles, not in the place of them.</span></div></li> 301 <li><div class="dis-text"><span class="dis-claim">No specialised hardware.</span><span class="dis-desc">A phone or GoPro is enough. No drones, no scanners, no scheduled capture missions.</span></div></li> 302 </ul> 303 </div> 304 </div> 305 </div> 306 </section> 307 308 <!-- CTA --> 309 <section class="block-tight" style="padding-bottom:0;"> 310 <div class="container"> 311 <div class="closer-split"> 312 <div> 313 <span class="eyebrow">See it for real</span> 314 <h2 class="closer-title" style="margin-top:14px;">That's the process. The interesting part is what it finds.</h2> 315 <p class="closer-sub" style="margin-top:12px;">Send a short walkthrough from a single unit and get your own findings back. No commitment, and the outputs are yours to keep.</p> 316 </div> 317 <div class="closer-do"> 318 <a class="btn btn-lg btn-arrow" href="get-started.html">Get your findings</a> 319 <a class="btn-link" href="https://calendly.com/nick-i4m/20-minute-meeting" target="_blank" rel="noopener">Book a 20-minute call</a> 320 </div> 321 </div> 322 </div> 323 </section> 324 325</main> 326
327<script src="assets/site.js"></script>
vendor: 1 bytes, line 327
327
328<script src="assets/model-viewer.js"></script>
vendor: 1 bytes, line 328
328
329<script> 330/* Beat 03 · frame-by-frame rebuild â cross-fade through the uploaded frames, 331 scan overlay sweeping on each. Degrades to a static first frame on reduced-motion. */ 332(function () { 333 var rb = document.querySelector(".walk-rebuild"); 334 if (!rb) return; 335 var frames = Array.prototype.slice.call(rb.querySelectorAll(".walk-rb-frame")); 336 if (frames.length < 2) return; 337 var cap = rb.querySelector(".walk-rb-cap"); 338 var reduce = window.matchMedia && window.matchMedia("(prefers-reduced-motion: reduce)").matches; 339 var i = 0; 340 function show(n) { 341 for (var k = 0; k < frames.length; k++) frames[k].classList.toggle("is-on", k === n); 342 if (cap) cap.textContent = "Reconstructing \u00b7 frame " + (n + 1) + " / " + frames.length; 343 } 344 show(0); 345 if (reduce) return; 346 setInterval(function () { i = (i + 1) % frames.length; show(i); }, 2200); 347})(); 348</script>
vendor: 1 bytes, line 348
348
349<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"466ceb27ff88495398ac4ac6ed7464b9","r":1,"spa":2}' crossorigin="anonymous"></script>
349 350</body> 351</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.