Skip to content

skeptrunedev/telemetry

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

37 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Telemetry

CI

A single-user, mobile-first PWA for tracking body recomposition — weight, body circumferences, progress photos, and daily nutrition adherence — with optional hardware auto-capture and zero third-party cloud in the data path. Built to deploy on Cloudflare.

Stack

  • React 19 + Vite 6, installable PWA (vite-plugin-pwa, offline shell)
  • Hono API on a single Cloudflare Worker (serves the SPA + /api/*)
  • Cloudflare D1 (SQLite) + Drizzle ORM
  • Cloudflare R2 for progress photos
  • Auth via Cloudflare Access (the scale-ingest endpoint uses a service token)

Optional hardware capture

  • Weight — an Etekcity ESF-551 BLE scale read locally by a small Python listener that POSTs to /api/ingest/weight. No vendor app/cloud.
  • Circumferences — a RENPHO RF-BMF01 BLE tape measure read in-browser via the Web Bluetooth API (Android/Chromium/Linux). No vendor app/cloud.

Body fat % (BIA) is captured when available but treated as a noisy, trend-only signal — weight (weekly average) and circumferences are the metrics that matter.

Develop

npm install
npm run dev              # http://localhost:5173
npm run build
npm run typecheck
npm run db:generate      # generate a D1 migration from src/db/schema.ts
npm run db:migrate:local # apply migrations to the local D1

API & OpenAPI

The HTTP API is documented in-code: each route carries an @openapi JSDoc comment (in src/worker/index.ts), and the shared data models live as @openapi component comments next to the Drizzle tables (src/db/schema.ts). A build step assembles them into a single OpenAPI 3.1 document.

npm run openapi:gen      # comments -> src/worker/openapi.gen.json (also runs on prebuild)
npm run openapi:lint     # quobix vacuum, gated at a perfect 100/100 score

The generated spec is served by the Worker at /openapi.json (live). CI regenerates the spec, fails if the committed copy drifted from the comments, and holds the vacuum score at 100.

CLI

A terminal client lives in packages/cli and ships to npm as @skeptrune/telemetry-cli (plus standalone binaries on each GitHub Release). It authenticates with browser SSO through Cloudflare Access — no API key.

npm install -g @skeptrune/telemetry-cli
telemetry login
telemetry status
telemetry weight log 158.2 --note "morning, fasted"
telemetry meal describe "chicken breast + toum, skipped the salad"

Deploy (Cloudflare)

npx wrangler login
npx wrangler d1 create telemetry-db   # paste the database_id into wrangler.jsonc
npm run db:migrate:remote
npm run deploy

License

MIT

About

Mobile PWA for tracking body recomposition (weight, circumferences, photos, nutrition) on Cloudflare, with local BLE hardware capture and no third-party cloud.

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors