PageSourceSearch

https://duallo.ai/what-we-do.html

html duallo.ai collected 2026-10-03 18:16:06 UTC 21,393 bytes, 351 lines download raw bytes

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 &middot; 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 &middot; 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 &middot; 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 &middot; 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 &middot; 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 &middot; 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 &middot; 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 &middot; 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 &middot; 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 &middot; 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 &middot; 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 &middot; 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 &middot; 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 &middot; 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 &middot; 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 &middot; 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 &middot; 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 &middot; scroll or pinch to zoom &middot; 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 &middot; 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 &middot; 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 &middot; 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 &amp; 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&amp;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.