smooth-app
전 세계 식품의 성분·영양·정보를 자유롭게 협업하고 공개하는 데이터베이스
0~6세 아동을 위한 10분 발달 점검, 뇌 발달 6 영역 평가, 기념 보고서와 가정 활동 제공
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를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기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.