Pedometer
Lightweight pedometer app for Android using the hardware step sensor
Read Android Health Connect on-device and forward it to a server you control. Self-hosted, privacy-first.
HealthJavaScript · KotlinGitHub @MarvelloOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Own your health data. Android app that reads Health Connect on-device and syncs the metrics you choose to a server you control. Ships a self-hosted Backend receiver with a private dashboard and charts. No cloud middleman, no Google Sheets, no CSV exports.
Taken from the repository README
Loading the full README.
Read the full README ↗Own your health data. Vitalix reads your Health Connect records on-device and forwards them as JSON to a server you control. It ships with a self-hosted receiver that stores your health data in your own Postgres and shows it back to you on a private dashboard — no Google Sheets, no CSV; your records live on infrastructure you own.
Project page: marvello.xyz/vitalix
List of data that we export and store can be check on Data Coverage
┌──────────────┐ reads ┌───────────────┐ POST /api/health ┌──────────────────┐
│ Health │ ─────────► │ Vitalix app │ ───────────────────► │ Vitalix receiver │
│ Connect │ on-device │ (Android) │ Bearer <token> │ (your server) │
└──────────────┘ └───────────────┘ └──────────────────┘
Postgres + dashboard
| Path | What it is |
|---|---|
android/ | The Vitalix Android app (com.android.vitalix). Reads Health Connect, forwards JSON. |
web/ | The Vitalix receiver — a self-hosted Node/Express + Postgres server that ingests, stores, and charts the data. |
android/healthexport/ | Upstream reference clone. Read-only; not shipped. |
docs/ | Architecture, database ERD, data coverage, branding — see docs/README.md. |
android/)Reads Health Connect on-device and forwards only the metrics you enable to your server. Highlights:
EncryptedSharedPreferences.Build:
cd android
./gradlew installDebug # build + install to a connected device/emulator
./gradlew testDebugUnitTest # JVM unit tests
Requires a device/emulator with Health Connect installed. minSdk 30, compileSdk 36, Java 11.
web/)A small Express app that authenticates the app, ingests the JSON payload at POST /api/health, stores per-day rows in Postgres, and serves a private dashboard.
POST /api/health (ingest, bearer-auth), GET /api/days (query), GET /healthz (liveness).node-pg-migrate.cd web
cp .env.example .env # set DATABASE_URL, JWT_SECRET, APP_BASE_URL
docker compose up # app + Postgres, migrations run on start
Or without Docker (needs a running Postgres):
cd web
npm ci
npm run migrate up
npm run create-admin # create your first account
npm start # listens on :3000
npm test # unit tests
Point the Android app's server URL at https://<your-host>/api/health and paste the token from your account.
Pushes to main (and v* tags) run the tests and publish a Docker image to GitHub Container Registry via .github/workflows/web.yml:
ghcr.io/<owner>/<repo>-web:latest
Deploy that image anywhere that runs containers, supplying the same env vars as .env.example and a DATABASE_URL pointing at your Postgres. To publish, ensure GitHub Actions has package-write permission (Settings → Actions → General → Workflow permissions → Read and write).
web/.env.example documents every variable. The essentials:
| Variable | Purpose |
|---|---|
DATABASE_URL | Postgres connection string. |
JWT_SECRET | Long random string — signs session/auth tokens. Change this. |
APP_BASE_URL | Public URL of the receiver (used in reset/invite links). |
SMTP_*, MAIL_FROM | Optional. If unset, reset/invite links are logged to the server console. |
PolyForm Noncommercial License 1.0.0: free to use, modify, and share for any noncommercial purpose. Commercial use requires a separate paid license - contact [email protected] to arrange one. See LICENSE for the full text.
The upstream android/healthexport/ clone is included for reference only and is not covered by this license.