針對 0–6 歲兒童的六大腦部發展領域,提供十分鐘里程碑檢測,附有留念報告與居家活動。
AI 翻譯
A ten-minute milestone check for children aged 0–6, across six areas of brain development, with a keepsake report and activities to do at home.
健康TypeScript · JavaScriptGitHub @mois-khan上線中營運者未確認
試用過了嗎? 點一下就好,不需要登入。
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
A proof of concept for a parent-led developmental screening tool for children
aged 0–6. A parent enters their child's details, answers around seventy short
questions, and gets a report showing how each of six areas is developing, plus
activities to do at home.
Built to demonstrate design, flow and experience. The milestone content is
real and sourced from public-domain instruments, but it is a working
placeholder — see Content and licensing.
No credentials, no database setup. Assessments persist to localStorage.
To look at a finished report without answering seventy questions:檢視完整 README ↗A proof of concept for a parent-led developmental screening tool for children aged 0–6. A parent enters their child's details, answers around seventy short questions, and gets a report showing how each of six areas is developing, plus activities to do at home.
Built to demonstrate design, flow and experience. The milestone content is real and sourced from public-domain instruments, but it is a working placeholder — see Content and licensing.
npm install
npm run dev
No credentials, no database setup. Assessments persist to localStorage.
npm test # 33 tests over the scoring engine and item bank
npm run build # production build
To look at a finished report without answering seventy questions:
npx tsx scripts/seed-demo.ts
Paste the JSON it prints into localStorage under the key
kaushalya.assessments.v1, then open /report/demo.
Three decisions carry the whole thing.
Asking a 26-month-old only the 25–30 month questions tells you that something is wrong without telling you where the child actually is — which is the one thing a parent needs in order to act. So each domain is assessed across a window: the band below the child's age, the band at it, and the band above.
There are thirteen bands across 0–72 months, narrow in infancy where development moves fastest. Each band's upper bound is a CDC checkpoint age, so every item traces to a validated anchor.
If the child does not master the lowest band they were asked, we do not know where they are — the estimate is pinned to wherever we happened to start. So the assessment reaches down a band at a time until they master one, and up one band if they top out.
This matters more than it sounds. An earlier version only reached down on a
near-zero score, which left a cliff: a child at 74% of the 19–24 month band
scored a developmental age of 14 months, while one at 75% scored 24. Ten months
on a one percent difference. tests/scoring.test.ts pins this.
"Three months behind" is serious at nine months old and noise at five years. Each domain produces a developmental age, and the status comes from the ratio:
DQ = (developmental age in months ÷ age in months) × 100
| DQ | Status | What it means |
|---|---|---|
| 90+ | On track | At or ahead of expectation |
| 75–89 | Emerging | A little behind; targeted play, recheck in 3 months |
| 60–74 | Needs focus | Meaningfully behind; daily activity, mention to the doctor |
| < 60 | Worth a closer look | Suggest a developmental paediatrician |
Two corrections the maths needs:
One more rule worth knowing: a single weak domain is never averaged away. Five strong domains and one at 55 average to a comfortable 88, and that child needs attention — so the overall status is pulled down, and the report says which domain did it rather than showing a healthy number beside a cautious label.
app/ landing → intake → assessment → report
components/ UI pieces and the hand-rolled SVG charts
content/ domains, age bands, 300 items, 108 activities ← the data
lib/scoring.ts the engine: pure, no I/O, fully tested
lib/narrative.ts every sentence a parent can receive
lib/store.ts persistence — the only file Supabase changes
supabase/migrations/ the schema this is shaped around
tests/ 33 tests, incl. hand-worked example children
lib/scoring.ts is a pure function with no I/O, so it can be validated against
hand-worked children before any family sees it. The example cases are typical,
advanced, one weak domain, globally behind, preterm, and under four months.
Report wording is template-driven, never model-generated at runtime. This report tells some parents something frightening about their child, and every sentence they can receive should be reviewable in advance.
| Source | Items | Status |
|---|---|---|
| CDC Learn the Signs. Act Early. (2021) | 157 | US federal government, public domain |
| NIDCD/NIH hearing & communication checklist | 41 | US federal government, public domain |
| WHO motor milestone windows (2006) | 3 | Freely reproducible with attribution |
| Authored for this project | 99 | Vision strand, the 61–72 month band, gaps |
ASQ-3 and Denver II are commercial licensed instruments. Their items are not used here and must not be pasted in. The Trivandrum Development Screening Chart (TDSC 0–6) is the closest validated Indian equivalent — 51 items, validated against Denver, 84.6% sensitivity and 90.8% specificity — and is worth licensing if Kaushalya wants an India-normed instrument. The bank is structured so its items could replace these directly.
None of the above requires a code change. It is all data in content/.
supabase/migrations/0001_init.sql is the schema this is already shaped
around. The migration is:
content/ into the content tables.lib/store.ts with Supabase queries.scoreAssessment to a server action and persist domain_scores and
results, so reports are immutable snapshots.Two things are built in from the start because retrofitting them is painful:
item text is stored as { en, hi, kn } JSON, and every assessment records the
item bank version that produced it, so an old report still renders after the
questions are rewritten.
Until then, reports live in one browser — a report link will not open on another device. That needs the database.
item_activities is unused. Activities are currently selected per domain
at the child's developmental stage, which is already better than generic age
advice — a four-year-old with 30-month language gets 30-month language play.
Per-item mapping is the next refinement.This is a screening tool, not a diagnostic one. It is based on parent report and cannot diagnose any condition. Nothing in it should be presented to families as a diagnosis.