← All work

Observability · React Native · Node

logstream

Watch one real user's console, network calls and crashes live in the browser while they reproduce a bug.

streaming to the browser
Live
streaming to the browser
logs stored
0
logs stored
device watched at a time
1
device watched at a time
server dependencies
0
server dependencies

The problem

“It doesn’t work on my phone” bugs are the hardest to fix. Crash and error dashboards show totals across all users, but not what happened on one person’s phone. We needed to see that one session live, while the user reproduced the problem.

What I built

Support picks a device→Push arms that device→SDK sends logs→Server keeps them in memory→Live view in the browser
  • SDK (JavaScript + native Android and iOS): captures console output, network calls, JavaScript errors and native crashes. It stays silent until the server marks that device as watched.
  • Push to arm: a push notification turns logging on for one device only, so nothing runs for everyone else.
  • Server and dashboard: a zero-dependency Node server keeps recent logs in memory and streams them to the browser with server-sent events. It runs as one container on Cloud Run behind an admin login.
  • Privacy by design: nothing is written to disk, and a restart clears everything.
  • Shipped as an npm package used by both the customer app and the partner app.

What I learned

  • Make debugging opt-in per device. It keeps costs near zero and avoids collecting data nobody needs.
  • Keep the server boring: no database and no dependencies means almost nothing to patch or maintain.