Recovery, strain and sleep scores for your Fitbit Air

Open source and self-hosted. Pulse turns your Google Health data into daily scores, on a server you own.

Pulse on a laptop. Home: the Sleep, Recovery and Strain dials, the Health and Stress Monitor cards and the day's activities
Pulse on a phone. Recovery: today's score and its contributors (HRV, resting heart rate, breathing, sleep, skin temperature) against your baselines

Three numbers each morning

Sleep, Recovery and Strain open the home screen, each scored against your own baselines.

Example values. Each score has its own page with its inputs, weights and limits.

Made for the phone in your pocket

Pulse is a web app you add to your home screen from the browser. Screens from demo mode, with generated data.

On a laptop, the whole picture at once

  1. My Dashboard

    Choose which metrics sit on Home and in what order: heart rate variability first and steps last, or the other way round.

    Pulse on a laptop. My Dashboard: choose the metrics on Home and their order
  2. Trends

    Recovery, sleep, activity and body metrics by week, month, six months or year, each with averages to compare against.

    Pulse on a laptop. Trends: Recovery by day over the past month, with weekly and monthly averages
  3. Health Monitor

    Last night's vitals against your normal range, ECG readings and irregular rhythm notifications, weight and body fat.

    Pulse on a laptop. Health Monitor: last night's vitals against your normal range, heart rhythm and measurements
  4. Journal

    Log your day, check in each evening, and see which habits move the next morning's Recovery.

    Pulse on a laptop. Journal: the week strip, the Log for water, food, weight and mood, and the evening check-in

18 scores, each explained in full

Inputs, weights, bands, limits and sources for every number Pulse shows. Browse the metrics

How your data gets to Pulse

  1. Fitbit AirRecords heart rate, sleep and nightly vitals, and syncs to your phone.
  2. Google Health appHolds the band's data in your Google account, as it always has.
  3. Google Health APIPulse reads it with an OAuth client from your own Google Cloud project.
  4. Your serverOne Docker container scores every day and keeps the history in SQLite.
  5. Your browserOpen it on your phone or laptop, and install it like an app.

Your health data stays on a machine you control.

No Pulse account
You sign in with your own Google account, to your own instance. There is no Pulse service to sign up for.
No analytics in the app
The app talks to Google's sign-in and Health API, and nothing else.
One owner per instance
Only the Google account you name can sign in. Nobody else's data is on your server, and yours is on nobody else's.
Leave whenever you like
Disconnecting removes Pulse's access in your Google account. The database is one SQLite file you can back up or delete.

Get started

Try the demo on your laptop in a few commands, then point it at your own data. You need Node 24 and pnpm for the demo, Docker for a server.

Try the demo

git clone https://github.com/adityaongit/pulse.git
cd pulse
pnpm install
cp .env.example .env
pnpm dev

Open localhost:3000 and choose Continue with demo data.

Run it on a server

# in .env: Google OAuth client, OWNER_EMAIL, TZ
docker compose up -d --build
docker compose logs -f pulse

Put a tunnel or HTTPS reverse proxy in front, then open it on your phone.

Read the setup guide

About this project

Pulse is made by one independent developer, for the community, and it is free. There is no company behind it, and no intention of competing with WHOOP or anyone else.

It uses no WHOOP device, data, code or assets. Every score is computed from your own Google Health data, with methods published in full. The interface takes design inspiration from apps the developer admires.

WHOOP and the other names on this site are trademarks of their owners, and Pulse is not affiliated with or endorsed by them. If you represent WHOOP or any other company and have a concern, please email work.adityajindal@gmail.com and it will be changed or taken down.

Questions

Something else? Ask on GitHub.

Is Pulse free?

Yes, for personal and other noncommercial use, under the PolyForm Noncommercial 1.0.0 license. Selling it, or putting it inside a commercial product, is not allowed.

What do I need to run it?

A Fitbit Air paired with the Google Health app, a Google Cloud project for the OAuth client, and any machine that runs Docker: a home server, a NAS or a small cloud VM. To reach it from your phone, give it an HTTPS address with a tunnel or reverse proxy. The setup guide covers each step.

Can I try it before connecting my Google account?

Yes. Demo mode generates 180 days of realistic data on your laptop, with no Google account and nothing sent anywhere.

Where does my data go?

From Google Health to your own server, and nowhere else. The app talks only to Google's sign-in and Health API. There is no Pulse account, no Pulse cloud and no analytics in the app.

Does it work with other Fitbit devices?

Pulse is built and tested with the Fitbit Air. It reads from the Google Health API, so other devices that sync to the Google Health app may work, but the scores are tuned to the data the Air records.

The old Fitbit Web API is shutting down. Does that affect Pulse?

No. Pulse uses the newer Google Health API from the start, with your own Google OAuth client.

Can several people share one Pulse?

No. Each instance belongs to one owner, set by the Google account allowed to sign in. Everyone runs their own, so nobody's health data sits on someone else's server.

Are the scores medical advice?

No. Pulse is a wellness tool, not a medical device. Every score is an estimate from a wrist sensor, and each metric page lists its limits.

Is Pulse affiliated with a wearable company?

No. Pulse is a free project by one independent developer, with no intention of competing with WHOOP or any other company. It uses no WHOOP device, data, code or assets, and every score comes from your own Google Health data. The interface takes design inspiration from apps the developer admires. If you represent WHOOP or any other company and have a concern, please email work.adityajindal@gmail.com and it will be changed or taken down.