
| Role | Interaction Design · Working Prototypes · Design Engineering · AI-assisted Coding |
| Project Type | Iterative Prototyping & Integration |
| Platform | Web (browser-based 3D prototypes built with three.js / R3F) |
| Timeline | Feb – Aug 2026 |
| My Contribution | 1. Independently designed and built LidarLab 3D and five focused interaction demos; |
<aside>
</aside>
Scanat’s core interactions happen directly inside 3D models. Drag targets, camera motion, spatial orientation, occlusion, and conflicts between multiple tools are difficult to evaluate in Figma alone.
Starting in Feb 2026, I used AI-assisted coding to build working 3D prototypes: first creating focused demos to validate interaction feel and geometric logic, then consolidating the validated features into 3D Studio in August to test state and interaction conflicts in a shared product environment.
My contribution: I independently implemented the prototypes and, during integration, clarified code responsibilities, unified picking, standardized feature registration, and defined basic testing rules.

Scanat users measure, annotate, and edit directly inside 3D models. Figma can communicate interface structure, but it cannot reliably show whether drag targets are easy to hit, whether controls stay stable as the camera moves, whether spatial orientation feels correct, or how animation and occlusion behave in a running environment.
I therefore brought working prototypes into the design process and used the browser to test these behaviors directly.
Focused demos were effective for isolated problems, but in the real product, notes, measurements, Gizmos, camera controls, and model scaling all operate in the same scene. As the demos grew, I needed to validate shared pointer events, cross-tool state, coordinate changes, and visual hierarchy.
That became the main reason to build a consolidated prototype.
3D Studio was not planned as a platform from the beginning. It emerged gradually from real project needs.
In Feb 2026, I built LidarLab 3D to test whether point-cloud loading, distance measurement, and volume visualization were feasible in the browser. Some later visualization work for Scanat Volume directly reused findings from these experiments.
This version was intentionally a one-off validation tool rather than an extensible platform. At this stage, the priority was to quickly verify 3D feasibility and interaction behavior; building a full architecture before the requirements stabilized would only have added maintenance cost.

From May to Jul 2026, new 3D interaction needs emerged. Rather than extending the old prototype, I created a separate demo for each problem. Each demo contained only the minimum functionality required for that validation, keeping existing states and interactions from interfering with the test.
| Demo | Time | What It Validated |
|---|---|---|
| scale-transition | 2026-05 | How the camera should compensate visually after model scale changes |
| cube-gizmo | 2026-06 ~ | How the Gizmo should move, rotate, and respond to hit targets across touch and mouse input |
| measure-copy | 2026-07 | How copied measurements should be repositioned, including drag-magnifier behavior |
| reset-view | 2026-07 | How the camera should smoothly return to the default view from any state |
| note-text-display | 2026-07 | How anchors, leader lines, and labels should remain stable during camera movement |
Each demo addressed one problem, making it faster to tune the interaction and isolate edge cases.

By Aug 2026, enough isolated interaction problems had accumulated that I reorganized the earlier prototypes and moved validated behaviors into 3D Studio, a workspace closer to the real Scanat product environment.
Focused demos remained useful for fast single-problem testing, while 3D Studio was used to evaluate interaction, state, and performance when features coexisted.

The two prototype types served different purposes:
| Focused Demo | 3D Studio | |
|---|---|---|
| Primary purpose | Validate a single interaction | Check for conflicts when multiple features coexist |
| Scope of change | Small; optimized for rapid iteration | Must account for existing features and product state |
| Best for observing | Drag feel, geometry, and local edge cases | Cross-feature state, visual hierarchy, pointer conflicts, and end-to-end flow |
Complex interactions could still be validated quickly in a focused demo first, then moved into 3D Studio to test coexistence in a product-like environment.
When integration began, the core LidarViewer.tsx file had grown to 3,543 lines, with components, algorithms, and panel UI mixed together. Adding more focused demos on top of that would have made future issues difficult to isolate.
I first separated responsibilities into:
core/: geometry and algorithms;viewer/: foundational 3D capabilities such as scene and camera;features/: isolated directories for individual features.After the refactor, the main file dropped to about 1,559 lines and primarily handled scene composition and shell-level state.

As notes, measurements, Gizmos, and other features began sharing the same 3D scene, the question was no longer whether each demo worked in isolation, but whether the tools interfered with one another. A single click, for example, could trigger multiple tools or cause features to compete for the same interaction.
I first defined shared input rules: the active task and tool state determine which feature responds to an interaction, preventing multiple features from processing the same input. Once the rule was clear, I implemented it in the working prototype with AI assistance.
Feature entry points: place them based on when they are needed. Some tools are used continuously, while others only make sense after an object is selected. I placed entry points in the toolbar, side panel, or selection actions based on task state instead of flattening every feature into the same hierarchy. With AI assistance, I then turned this into a reusable feature-registration pattern.

Validation approach: verify logic first, then interaction feel. 3D interactions such as Gizmos involve both spatial computation and hands-on behavior. Mixing the two makes it difficult to tell whether an issue comes from the interaction model or the implementation. I first validated movement, rotation, and other core logic with AI assistance, then tested hit areas, drag feel, and behavior from different viewpoints in the browser.
Integration also surfaced visibility-state and browser-runtime issues that static designs could not reveal. For complex 3D interactions, working prototypes therefore became more than a presentation artifact—they were a way to expose edge cases during the design process itself.
3D Studio Integrated Workspace
Runs multiple 3D features together in a product-like interface to inspect cross-tool state and interaction conflicts.
https://res.cloudinary.com/v7b2p5ho/video/upload/v1787649476/crxau7l9ekh7wlxir1r6.mov
Focused Demo Entry Points
Each feature still keeps its own standalone page. When a single interaction needs refinement, I can test it quickly in the focused demo and then sync the validated version back into 3D Studio.
https://res.cloudinary.com/v7b2p5ho/video/upload/v1787649478/bgya5ih3ruhn73wy071d.mov
Prototype output: From Feb to Aug 2026, I built LidarLab 3D, five focused demos, and the consolidated 3D Studio.
Product application: Several visual and interaction explorations were carried into production specifications and parameter handoff—especially volume measurement, the cube Gizmo, and scale changes—reducing design–engineering back-and-forth. These features have since shipped, with interaction and animation behavior remaining close to the prototypes.
Internal feedback: Animation and interaction parameters from the cube Gizmo, reset-view, and scale-change prototypes were applied directly in production. Engineers reported that this reduced implementation time and trial-and-error.