Projects Echoes

Echoes From the Shadows

An ESP32 camera, a custom dashboard, and a deliberate argument about who surveillance is designed for.

Role
Hardware and software developer
Context
Society 5.0
Duration
Sprint-based team project
  • ESP32-CAM
  • JavaScript
  • TCP streaming
  • Embedded
  • Design ethics
  • 320×240

    the resolution that stopped the lag

    Found by testing configurations against a 5V supply and a mobile hotspot until quality and latency balanced.

  • 2interfaces

    Light and Dark, same hardware

    One designed around transparency and consent, one designed to disappear.

  • Most

    participants never found the camera

    Even though it was positioned in clear view during the user test.

The Echoes camera dashboard, showing active streams, a network scanner, saved hosts, an LED intensity slider and a Switch to Dark Mode button
The custom dashboard. The button top-right does not change the theme — it changes the ethics.

Getting a picture out of it

The objective was a dashboard that could fetch and display live video from an ESP32-CAM module over a TCP connection, with audio recording through an attached microphone.

The camera itself was the straightforward half — the ESP32-CAM has extensive documentation and community support, so configuring it and experimenting with streaming settings went smoothly. At compile time you specify the network the camera will broadcast on; we used a 5G mobile hotspot. Power it up, it joins the network and starts streaming on an assigned IP.

Then the lag showed up. Extensive testing across resolutions landed on 320×240 as the point where image quality and latency balanced out. The ceiling was set by network quality and the module's 5V supply, not by the code.

Why I replaced the default dashboard

The stock ESP32 dashboard is a single live feed and not much else. I built a custom one to make it actually usable: multiple simultaneous streams, and a built-in network scanner that detects IP and MAC addresses on the local network so a camera's MAC address can be saved to a favourites list for quick access to its settings and streams.

I also implemented a basic face-recognition algorithm that detects faces and clothing from captured images — which turned out to matter more for the argument than for the demo.

The user test that went wrong, usefully

We observed participants without their awareness and used the reveal as a shock factor to start a conversation. Two questionnaires, one before and one after, were prepared to capture how opinions shifted.

Most participants could not locate the camera even though it sat in clear view. The test did not go fully to plan, but it produced the thing we actually needed: real reactions to being watched, and a divide in the responses. Some participants felt safer for the surveillance. Others felt anxious and self-conscious. That split became the project.

A separate lesson landed on day one of Society 5.0: we had assumed the danger of surveillance equipment would generate interest on its own. It did not. We rebuilt the front-end visuals and added posters overnight, and day two drew significantly more people and more feedback.

Two designs, one device

After the second sprint the narrative was still unclear to the client. The intervention that fixed it was sharpening the focus onto the ethical dilemma itself — shifting from warning about unethical behaviour to demonstrating the difference between ethical and unethical surveillance. We built both.

The Light design is built around consent: an LED indicator whenever the camera is active, an obvious way to disable the system, and a route to request deletion of personal data. The Dark design is built around invisibility — hardware that blends into its surroundings, recordings running silently in the background, and no indicator at all.

The point is that the difference between them is a handful of deliberate developer decisions. Technically it is trivial to make a red light turn on while a camera records. In the Dark version we chose not to program it. That choice is the whole argument: the same hardware, optimised purely for the observer, quietly reduces the observed to data objects.

What a Light design actually requires

The Light side is where Privacy by Design stops being a slogan. Instead of streaming all audio to a server continuously, the device analyses sound locally and only transmits when a keyword or safety risk is detected — edge computing that minimises both the data collected and the blast radius of a leak.

For transparency we went below the software layer. A software-controlled indicator light can be disabled by whoever writes the software. An LED wired physically in series with the microphone cannot: if power reaches the microphone, the LED is on. That makes covert listening technically impossible regardless of what the code says.

What no design solves is the human factor. Someone can still place a perfectly ethical device somewhere it has no business being. Design can make misuse harder; it cannot make it impossible without removing the function entirely.

What I took away

Technically: combining hardware and software into one working system, and finding out where the real constraints live — usually in power, network and physics rather than in the algorithm.

Beyond that: our central assumption changed during the project. Awareness alone is not enough; activation is. And a well-prepared, interactive presentation influences how people respond to a project at least as much as the prototype does.

References

  • Cavoukian, A. (2009). Privacy by Design.
  • Nissenbaum, H. (2004). Privacy as Contextual Integrity.

Next

Another project

Read the MolKet case study
Bar chart comparing wall-clock runtime of SQD, ED and DMRG on a logarithmic scale

MolKet · Multi-month team project

MolKet

Four ground-state solvers, one CO₂ molecule, and a very wide spread of runtimes.

A multi-month benchmark comparing SQD, ED, VQE and DMRG on the ground-state energy of CO₂. SQD converged in 3.24 seconds; a full DMRG run would have taken an estimated 72 years.

Project lead · VQE and Exact Diagonalization author

  • Quantum computing
  • Qiskit
  • Python
  • IBM Quantum
  • Project leadership
Read the StackTools case study
The StackTools home page, showing the three sections: developer tools, code snippets, and tips and playbook

Live, in active development

StackTools

451 snippets I kept needing, 51 tools that run in the browser, and the first website I ever put online.

A free developer site at stacktools.org. It started as somewhere to keep the snippets I kept having to look up again — including 24 PowerShell snippets for Active Directory, the kind that are genuinely hard to find — and grew into 451 snippets, 51 browser-only tools and a written playbook.

Designer, developer and maintainer

  • React
  • TypeScript
  • PowerShell
  • Client-side only
  • Cloudflare
  • Product design