Mirobody
The canonical registry of human health — roughly two thousand standardized indicators, clinical and lifestyle, resolved into one language.
Oura Care turns the nights and weeks your ring records into a clear, private report your doctor can read in a minute, with your consent.
HealthTypeScript · CSSGitHub @benzybertOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗Member health platform built on the Oura ring, with three views over the same data and explicit consent as the foundation.
| View | Route | Who | Sees |
|---|---|---|---|
| Member | /member | the member | heart watch with alerts to family (email, text, call, siren), challenges with family and friends, own data in tabs (sleep, recovery, activity, heart and breathing, workouts, ring), rewards, self-set goals and treats, what is shared, who looked |
| Family circle | /family/<token> | a person the member added | read-only heart status and open alerts, and "I'm on it"; no account, until the member removes them |
| Care team | /care | assigned nurse / doctor | only members who consented: trends, alerts to review |
| Organization | /org | employer / provider admin | anonymous group means, hidden below a minimum group size |
| Doctor link | /share/<token> | a doctor the member sent a link to | read-only dashboard of the member's last 30/60/90 days, until the link expires or is revoked |
There is deliberately no per-person view for HR or employers. See docs/PRIVACY.md.
Next.js (App Router, TypeScript) · Postgres + Drizzle ORM · Oura API v2 (OAuth2) · Vercel (hosting + daily cron) · Vitest.
| Branch | Vercel environment | Purpose |
|---|---|---|
main | Production | stable, real data only |
dev | Preview (stable branch URL) | integration, demos, DEMO_AUTH=true and synthetic data |
Work happens on feature branches, merged into dev by pull request, and dev is merged into main to release. CI (.github/workflows/ci.yml) runs typecheck, tests and build on every PR and push to either branch.
Requires Node 22+ and any Postgres 14+.
npm install
cp .env.example .env.local # fill in DATABASE_URL, SESSION_SECRET, TOKEN_ENCRYPTION_KEY, CRON_SECRET
set -a; source .env.local; set +a
npm run db:migrate # applies drizzle/*.sql
DEMO_AUTH=true npm run dev # http://localhost:3000
npm run db:seed # 24 synthetic members, 42 days (add --reset to wipe first)
Then open / and use the demo sign-in buttons. DEMO_AUTH must never be on where real member data exists.
| Script | What it does |
|---|---|
npm run dev / build / start | Next.js |
npm run typecheck | tsc --noEmit |
npm test | unit tests (alerts, consent, rewards, self-rewards, crypto, Oura mapping) |
npm run db:generate | create a new SQL migration after editing src/db/schema.ts |
npm run db:migrate | apply migrations to DATABASE_URL |
npm run db:seed | load synthetic demo data |
src/app/ pages (member, care, org), server actions, API routes
src/db/ Drizzle schema + connection
src/lib/ pure logic (alerts, consent, rewards, summary) and server helpers
src/lib/oura/ OAuth client, API mapping, sync
scripts/seed.ts synthetic data
drizzle/ generated SQL migrations
docs/ architecture, privacy, setup
Done and verified: schema and migration (applied to a real Postgres 16), consent model with revocation, alert rules, bedtime-consistency rewards, member self-rewards, token encryption, org group threshold, audit log, the three views, role guards, daily-sync route with secret, CI. Verified with unit tests, a seeded database, and a browser run (acknowledge an alert, revoke and re-grant consent, phone-width layout).
Not done / not verified (details in docs/ARCHITECTURE.md):
docs/ARCHITECTURE.md#sign-in). Email links only reach the Resend account owner until a sending domain is verified in Resend; no SSO yet.