Mirobody
The canonical registry of human health — roughly two thousand standardized indicators, clinical and lifestyle, resolved into one language.
翻訳待ち
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.