safeeyes
Protect your eyes from eye strain using this simple and beautiful, yet extensible break reminder
翻訳待ち
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 ↗Small Moves. Powerful Change.
Jess Move AI — Your Daily Movement and Body-Balance Operating System. An AI-powered micro-movement, food intelligence and healthy-lifestyle platform, ages 10 to 100.
Meeting a weekly exercise target does not cancel the risk of spending the rest of the day sitting. That gap is the product. Jess Move ingests a person's schedule, context, capability and history and answers one question no existing platform answers well:
Given everything true about this human right now, what is the single best two-minute movement they will actually do in the next 45 minutes — and how do I make them want to?
| Surface | Name |
|---|---|
| Platform / operating system | JESS MOVE |
| Consumer app | Jess Move |
| AI coach persona | MOVA — Movement Optimisation and Vitality Assistant |
| Atomic unit | a micro-movement (90–300 seconds), delivered as a mission |
| Mode | Ages | Built to solve |
|---|---|---|
| Explorer | 10–12 | Adventure, not health. Screen-break missions, coordination, classroom-safe play |
| Teen | 13–17 | Autonomy and identity. Revision resets, gaming recovery, private crews |
| Momentum | 18–39 | Hybrid work, commuting, early parenting. Meeting recovery and stress resets |
| Balance | 40–64 | Stiffness prevention, joint-friendly strength, sustainable weight management |
| Independence | 65–79 | Balance, lower-limb strength, grip and gait — staying independent |
| Vitality | 80–100 | Dignity and simplicity. Seated, carer-assisted, voice-operated |
Mode is derived from a verified age band plus a capability profile. It is never chosen freely, because it governs safeguarding rules rather than preferences.
jessmove/
├─ apps/
│ ├─ backend/ @jessmove/backend — NestJS API + agent runtime
│ └─ frontend/ @jessmove/frontend — Next.js 14 (App Router) site & consoles
├─ packages/
│ ├─ shared/ @jessmove/shared — domain model, contracts, design tokens
│ ├─ body-command/ @jessmove/body-command — BodyCommand AI: pathways, guardian, ACU maths
│ └─ foodlens/ @jessmove/foodlens — FoodLens 360°: evidence and confidence
├─ db/
│ ├─ migrations/ Postgres schema — invariants enforced in the database
│ └─ test/ constraint tests: every rule proven to reject bad writes
└─ docs/
├─ JESS-MOVE-SPEC.md — the production specification (v1.0, JS-01)
└─ BODY-BALANCE-AI.md — BodyCommand AI (C6 resolved: scoped carve-out)
On C6 and body metrics. The OS serves children and adults from one engine. Charter rule C6 is scoped by audience, not removed: never surfaced under 18 in any mode under any consent; opt-in and never competitive for adults.
bodySurfacePolicyis the single gate and does not consult the consent flag below 18. Seedocs/BODY-BALANCE-AI.md§0.
packages/shared is the single source of truth. Both applications compile against it, so a
contract change breaks the build on both sides rather than at runtime.
pnpm install
cp .env.example .env # fill in at least one AI provider key
pnpm build # shared → backend → frontend
pnpm dev # backend :4000 · frontend :3000
Node ≥ 20.11, pnpm 10.
pnpm build:shared
pnpm build:backend
pnpm build:frontend
pnpm typecheck # across the workspace
pnpm --filter @jessmove/backend test # the Charter CI gate
One interface, three providers. Agents never talk to a vendor SDK directly — the gateway owns provider selection, the fallback chain, prompt redaction, the per-agent ACU cost ceiling, the request timeout and the decision log.
| Provider | Package | Mid-tier default | Frontier default |
|---|---|---|---|
| Anthropic | @anthropic-ai/sdk | claude-sonnet-5 | claude-opus-5 |
| OpenAI | openai | gpt-4.1-mini | gpt-4.1 |
| Google Gemini | @google/genai | gemini-2.5-flash | gemini-2.5-pro |
Routing follows the agent registry: each of the 28 agents declares a modelClass, so
CLIN and STUDIO route to the frontier tier while CTX stays on-device and NUDGE is a
contextual bandit rather than a language model at all.
AI_DEFAULT_PROVIDER=anthropic
AI_FALLBACK_ORDER=anthropic,openai,gemini
Unconfigured providers are skipped rather than failing. If a provider declines a request
(stop_reason: refusal on Anthropic, content_filter on OpenAI, SAFETY on Gemini) the
gateway walks to the next link in the chain. When every provider fails it throws
AiGatewayError, and the caller falls back to the cached prescription plan — the user must
never see a broken app because a model is slow.
Adding a fourth provider means implementing ModelProvider and registering it. No call site
anywhere else in the platform changes.
Base path /{API_PREFIX} (default /api). Every response is wrapped in the standard envelope
and carries the signature line.
| Method | Path | Purpose |
|---|---|---|
GET | /health | Liveness plus AI-gateway status |
GET | /system | The operating system's invariants, machine-readable |
GET | /ai/providers | Provider configuration and resolved models |
POST | /ai/complete | Gateway completion, agent-scoped |
GET | /movements · /movements/gate | Library and the publishing contract |
POST | /movements/:id/check · /publish | Gate dry-run and publish attempt |
POST | /prescriptions/next | The core call — the next best Snap |
POST | /body/assess · /body/plan | Pathway, safety and the daily plan (all ages) |
GET | /body/pathways · /scorecard · /agents | The nine pathways, the weighting, the nineteen agents |
GET | /acu/policy · POST /acu/quote | Published economics; price an action before running it |
POST | /acu/wallets/:id/spend | Cost Governor — 4× rule, bucket precedence, hard stop |
This is the beginning of the README. Read the rest at the original. Read the full README ↗