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.