Componentize system in use
← Back to Work ↗ View Live Site
Interaction Systems · Developer Tooling · 2023 — Present

Componentize

A modular web component library that connects hardware and browser interfaces through reusable, real-time modules.

ESP32 WebSockets BLE PyScript JavaScript System Architecture

Building interactive systems that connect hardware to browser interfaces is repetitive by default. Every project requires rewriting communication logic from scratch — BLE pairing, serial handling, WebSocket channels, input routing. None of it carries over.

Componentize is a modular web component library built at Tufts CEEO that encapsulates each of those capabilities into a reusable, composable unit. BLE, Serial, Channel, Webcam, Speech, and Plotly each exist as a standalone component with a standardized interface — inputs, outputs, and events — that can be dropped into any project and wired together in minutes.

The result is a working library used in research, education, and rapid prototyping. It changes the question from "how do I connect this hardware to a browser?" to "which components do I need?"

Each component wraps a single capability and exposes a consistent interface. Components communicate through shared WebSocket channels, keeping the browser and hardware synchronized in real time. The data flow is straightforward:

Input (sensor / user / device) → component → channel → UI or hardware output

Combining components is what makes the system useful. A webcam component feeds into a channel component which streams to a remote display. A serial component reads sensor data and pipes it to a Plotly component for live visualization. Speech input triggers a channel event that controls a connected device. Each combination is a working system built from parts that already exist.

I designed and implemented the modular component architecture and built out the core component set: BLE, Serial, Channel, Webcam, Speech, and Plotly. Each component required designing a standardized interface — inputs, outputs, event callbacks — that works consistently whether the component is used alone or in combination with others.

Beyond individual components, I built combined demo systems to validate that cross-component communication actually worked under real conditions: webcam streaming through a channel to a remote display, serial sensor data piped into live Plotly charts, speech input controlling connected hardware. I also integrated PyScript to enable Python-in-browser execution, which opened the system to a wider audience of students and researchers who work primarily in Python.

A significant portion of the work was making the system usable — not just functional. That meant building documentation, refining the developer experience, and iterating on interfaces based on how non-expert users actually interacted with the components.

The component library includes a built-in AI assistant that understands the system's structure. Rather than giving generic answers, it references the actual available components, their inputs, outputs, and events, and suggests how to assemble them for a given task. It's file-aware and provides minimal, targeted edits rather than full rewrites.

This was possible because the component interfaces were designed to be machine-readable from the start — standardized naming, consistent structure, and a component manifest that the assistant queries at runtime. The assistant doesn't replace understanding the system; it reduces the time between having an idea and having a working prototype.

Modular systems reduce development time not by doing less work, but by making sure the same work doesn't get done twice. Standardized interfaces are what make components composable — without them, every connection is a custom integration problem.

The AI assistant reinforced this: it only works because the interfaces are consistent enough to be interpretable. Designing for reuse and designing for machine legibility turned out to be the same decision. That changed how I think about system architecture generally — the abstractions you choose early determine what the system can become later.

Hardware & Systems

  • ESP32
  • BLE / Serial / UART
  • WebSocket
  • Embedded Integration

Software

  • JavaScript
  • PyScript
  • Python
  • MicroPython

Design

  • System Architecture
  • API Design
  • Developer UX
  • Interaction Design
Previous Project ← SOCIALIGHT
Next Project MAILBOX PAIRING SYSTEM →