尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證Caregiver app
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗No one should carry care alone. JOSIA Care is one warm, shared place where a
Care Circle of family and helpers looks after someone together. Its first care
journey, Little Steps, is for families caring for a
baby or toddler who came home from the NICU. See docs/BUILD_BRIEF.pdf for the
product and docs/little-steps-prototype.html for every Little Steps screen,
word and behavior.
Build status: step 9 of 9, ready for the pilot; Stripe subscriptions come after it. Done: data model, sign in, families,
invitations, roles and family separation (step 1); visits with true weekly
recurrence and the Home week view (step 2); the diary and the Home tiles
(step 3); the journey, with the growth chart and wins (step 4); helpers,
practice at home, medicines, settings and the child's photo (step 5); questions to ask and the
visit sheet, ready to show, print or copy (step 6); AI capture of a nurse
text, a therapy handoff or a doctor visit summary, always checked by a person
before it saves (step 7); reminders on each person's phone for visits and the
night feed, and the app can be added to the home screen (step 8); the JOSIA
Care name, Care Circles and care journeys, with Little Steps as the first; and
the everyday essentials for a baby's life: corrected age, medicine times with a
"Medicines today" checklist, an emergency card, a pumping log, and equipment and
supplies with reorder dates; and ready for the pilot (step 9): invite-only
sign-up with pilot codes, a Getting started checklist for a new owner, private
feedback to the JOSIA Care team, plain privacy and terms pages, and guides for
putting the app online (docs/DEPLOY.md) and running the pilot
(docs/PILOT.md). Everything updates live for everyone in the Care Circle.
A Care Circle is a families row in the database, and the person receiving
care is a children row; the screens use the new words, the tables keep their
names. The database enforces separation, not the app code. supabase/migrations holds the rules:
family_id. A signed-in person reaches a family's records
only through their row in family_members.(child_id, family_id) together, so a record
can never name another family's child.family_id can never change, so someone in two families cannot
move data between them.audit_log with who did it. Only
owners can read it, and nobody can edit it.delete_child() permanently removes a child, every record about them, and
their audit history, leaving one note that a deletion happened.<family_id>/<child_id>/, are shown
through signed links that expire after an hour, and a child's record can only
point at a photo in that child's own folder.tests/db proves all of this with invented families (the Riveras and the
Okafors): one family cannot read, add to, change or delete anything of
another's, and each role can do exactly what it should.
Needs Node 22, pnpm and Docker.
pnpm install
pnpm dlx supabase start # Postgres, Auth, Storage, local mail viewer; applies migrations and the demo seed
cp .env.example .env.local # fill in the publishable key that `supabase start` prints, and an Anthropic API key if you have one
pnpm dev
Sign in as [email protected] (Owner), [email protected] (Family) or
[email protected] (Helper) and open the sign-in link from the mail viewer at
http://127.0.0.1:54324. The demo child is Josiah; everything else about him is
invented.
pnpm lint && pnpm typecheck && pnpm test # unit tests
pnpm test:db # database tests against `supabase start`
pnpm test:db:local # same tests on plain Postgres in Docker, when Supabase can't start
pnpm test:e2e # browser tests: needs `supabase start` and the app on :3000
Weekly visits are one rule in visit_series (start date, every N weeks, end
date). Dates are worked out from it (src/lib/visits.ts); a row in visits
exists for a series date only when it has its own notes, a new day or time, or
was cancelled.
Diary moments share one table, moments, with a type and the fields for that
type in details. The kinds, their fields and words come from the prototype's
LOG config and live in src/lib/moments.ts, which also checks submitted
values and works out the night feed total.
The journey (src/lib/journey.ts) compares the child only to themself: weight
over time with the gain since each weigh-in, and wins as stars along the chart.
It never uses percentiles or growth standards, and a test keeps it that way.
The visit sheet (src/lib/visit-sheet.ts) gathers what a helper should know
before a visit: medicines, recent weight, meals and night feeds, what to keep an
eye on, what other helpers said, practice at home and the questions meant for
that helper. It only includes what the person opening it is allowed to see.
AI capture (src/lib/capture.ts, src/lib/claude.ts) follows the brief's rules:
ANTHROPIC_API_KEY from
the server's environment. Claude gets only the pasted words or photo,
nothing else about the family. Photos are shrunk in the browser, passed straight through
and never stored.tests/e2e/mock-claude.ts).Reminders (src/lib/reminders.ts, src/app/api/reminders/route.ts) are turned
on by each person, phone by phone, in Settings: the evening before a visit
(from 7 PM), about an hour before, and the night feed at a time they pick until
someone logs it. Reminders show the kind of visit and the time, never notes.
On iPhone they work once JOSIA Care is added to the Home Screen.
To send them, set the VAPID keys and REMINDER_SECRET (see .env.example),
add the secret's hash to the database once:
insert into private.reminder_sender (secret_hash) values (sha256(convert_to('<REMINDER_SECRET>', 'UTF8')));
and have a scheduler call /api/reminders every five minutes with the header
Authorization: Bearer <REMINDER_SECRET>. Supabase Cron can do it:
select cron.schedule('little-steps-reminders', '*/5 * * * *', $$
select net.http_get('https://<your app>/api/reminders', headers := jsonb_build_object('Authorization', 'Bearer <REMINDER_SECRET>'))
$$);
The everyday essentials, for a baby home from the NICU:
correctedAgeText in src/lib/dates.ts), until age 3.src/lib/medicines-today.ts). Doses and the medicine list change
only by hand, never by AI.src/lib/emergency-card.ts): allergies, conditions,
medicines, equipment, the plan, the preferred hospital and the care team on
one page, with Call 911 and Copy card. Owners and family fill it in; everyone
in the Care Circle can read it, with only the parts they may see.supplies, under the medicines care area): the
feeding pump, oxygen, tube sizes and formula, with who to call and a gentle
"Reorder by" reminder (src/lib/supplies.ts). Equipment shows on the
emergency card and the visit sheet.Care journeys (src/lib/journeys.ts) are the start of JOSIA Care: each person
receiving care follows one journey (children.journey), which decides the Home
tiles, the diary kinds, the visit types, the visit sheet and how AI capture
describes the person. Only Little Steps is built so far, and everyone is in it;
its settings are exactly what the app did before, and a test keeps them so.
Everyday Progress and Care Together come later. Risky migrations come with an
undo script in supabase/rollbacks, which the database tests run.
test:db:local uses tests/db/supabase-shim.sql to stand in for Supabase's
auth and storage schemas. CI runs the database tests against real Supabase.
From the brief: the child comes first; no percentiles or comparison with other children; warm words ("Meals", "Keep an eye on", "Josiah's helpers", "Not yet"), using the child's name rather than pronouns; no alarm red except on delete; AI only drafts and a person always saves; AI never edits medicines; the Claude API is called only from the server; never use real patient data in development or tests.