
Productive Robotics
Welding UI Vue 3 Rewrite
Ground-up rewrite of the OB7 welding tablet interface from Vue 2.6 to Vue 3 — approximately 150 files across pages, components, stores, services, and composables. Replaced this.$root global state with Pinia stores, Options API mixins with composables, and built a dedicated ROS service layer with auto-reconnect, bidirectional unit conversion (mm/s ↔ IPM), and Miller Electric branded dark industrial theme.
Architected the complete Vue 3 application from scratch: Pinia state management replacing Vue 2's this.$root global state pattern, composables replacing Options API mixins, and a dedicated ROS WebSocket service layer with 1-second auto-reconnect and configurable topic throttle rates (50–100ms per topic). The programStore manages the full program lifecycle — CRUD operations, recipe management, clipboard with shift-paste using FK/IK coordinate transforms, and undo history. Clean subscription lifecycle: subscribe on connect, unsubscribe on disconnect, no leaked listeners — directly addressing the memory leak pattern discovered in the WebSocket bug fix project.
Built a bidirectional unit conversion pipeline (programTranslator.js) at the ROS service boundary: stores and components work in operator-facing display units while all ROS messages use SI internally. Speed conversion: mm/s → cm/min (×6) or → IPM (×60/25.4). Length conversion: mm → inches (÷25.4). User preference persisted in localStorage. A bug in this pipeline would show 10 cm/min as 10 IPM — a 2.5× error that would destroy the workpiece — so the translation layer is tested at the boundary, not scattered through 150 files.
Implemented IntelliSet — a guided parameter selection workflow that replaces manual weld parameter tuning: operators select base material, wire type/diameter, material thickness, and joint type, then the system looks up recommended voltage, wire feed speed, and travel speed from Miller's data tables. Reduces weld setup from minutes of expert parameter tuning to a 30-second guided selection accessible to any operator. Also built the full component library: BaseButton, BaseModal (overlay with focus trap), BaseParameter (numeric with units and increment/decrement), BaseSwitch, and BaseTabs.
Designed the industrial dark theme matching Miller Electric's product branding — dark backgrounds reduce glare in welding shop environments, high-contrast text for readability with welding helmets up, Miller blue accents for active states, and large touch targets throughout for operators wearing heavy welding gloves. Motion controls use press-and-hold with stop-on-release safety: pointerdown starts motion, pointerup/pointerleave/pointercancel/blur/visibility-change all trigger stop — redundant handlers ensure the robot stops even if a Bluetooth disconnect, OS gesture, or tab switch causes the primary pointerup to be missed.