← Back to the work

LAPPYPULSE / WINDOWS → ANDROID · PERSONAL UTILITY

LappyPulse

I wanted to check on a long-running task without going back to my desk. LappyPulse sends laptop readings to an Android dashboard and home-screen widget, with timestamps that show how recent each reading is. Built with Go, Kotlin, Jetpack Compose and Cloudflare.

LappyPulse / A closer look01 / 05
Laptop readings on my phone, 5 October 2026.

Why I built it

I run local agents and language models on my laptop, then step away while they keep working. I wanted to know what the machine was doing without returning to the desk or opening a remote desktop. Thermals were part of that worry. I started with CPU, GPU, memory and disk readings on my phone.

What it does

The Android dashboard and home-screen widget receive Windows readings. The screen distinguishes fresh, stale, warming, unsupported and unavailable values, and the process list shows which programs are using resources when that view is open.

How I approached it

I designed the monitor around the age and state of a reading, so an old value does not look live. The dashboard and widget distinguish a real zero from missing or warming-up data.

A missing reading must never look like zero.

Zero usage, a sensor that is still warming up and a broken connection mean different things. I keep those states separate.

Keep the age of the sample on the widget.

The last reading can outlive the app process that collected it. Its timestamp lets me judge it when I glance at the home screen, instead of mistaking a saved value for live activity.

Spend resources only when they help.

The dashboard and widget share one connection. Process details are requested while their screen is open, and the socket closes when the screen is off. The monitor should not create unnecessary work for the machine I’m trying to watch.

IN PRACTICE

Uses and technology.

Where it can help

  • Glance at laptop resource use while a local agent keeps working.
  • Check which process is using resources without a remote desktop.
  • Judge whether the widget’s saved reading is recent enough to be useful.

Built with

  • Go
  • Kotlin
  • Jetpack Compose
  • Cloudflare
  • TypeScript
Go / Windows
Portable collector for laptop measurements.
Kotlin / Compose
Android dashboard, charts and process view.
Android RemoteViews
Home-screen widget using the shared session.
Cloudflare Worker / Durable Object
TypeScript relay over outbound HTTPS and WSS.

TLS protects each connection, but ends at the relay, which can read transit telemetry. This is not end-to-end encryption and there is no cloud history.

LappyPulse widget with four resource graphs using illustrative readings.
Widget layout with illustrative resource readings. Select to see the full image.
LappyPulse phone dashboard with laptop resource readings and longer CPU, GPU, memory and disk graphs.
Another phone capture from 5 October, showing the dashboard’s resource history. Select to see the full image.
LappyPulse dashboard with resource graphs.
LappyPulse dashboard view. Select to see the full image.
LappyPulse home-screen widget.
LappyPulse widget view. Select to see the full image.