Skip to content

Instantly share code, notes, and snippets.

@alancnet
Last active October 6, 2024 22:18
Show Gist options
  • Save alancnet/5acc67d403d0491d9d90f95deb80f318 to your computer and use it in GitHub Desktop.
Save alancnet/5acc67d403d0491d9d90f95deb80f318 to your computer and use it in GitHub Desktop.
CDC Development Milestones

Milestone Tracker for Childhood Development

This project provides a Google Sheets script that creates a user-friendly interface to track childhood development milestones based on data from the CDC as of October 2024. The script generates individual sheets for each age group, automatically organizing milestones into categories with checkboxes for tracking progress and notes for additional information.

Source: CDC Milestone Moments Checklist

Setup Instructions

  1. Prepare the Google Sheet:

    • Open a new or existing Google Sheet.
    • Click on Extensions -> Apps Script to open the Google Apps Script editor.
  2. Copy the Script:

    • Copy the provided Google Apps Script code from Code.gs into the Apps Script editor.
    • The JSON file URL is already embedded in the code, so no changes are necessary.
  3. Run the Script:

    • Save the script by clicking 💾 or pressing Ctrl + S.
    • Click ▶️ to run the script.
function setupMilestoneSheets() {
const url = 'https://gist.githubusercontent.com/alancnet/5acc67d403d0491d9d90f95deb80f318/raw/fbee1801d68f0d0d2ef4d30106cf8b2ab617bccc/milestones.json'; // Replace with the URL to your JSON file.
const response = UrlFetchApp.fetch(url);
const jsonData = JSON.parse(response.getContentText());
const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
// Clear existing sheets and reset
const existingSheets = spreadsheet.getSheets();
existingSheets.forEach(sheet => {
if (sheet.getName() !== 'Sheet1') { // Keep one empty default sheet to avoid issues
spreadsheet.deleteSheet(sheet);
}
});
// Create individual sheets for each age group
jsonData.ages.forEach(ageGroup => {
const age = ageGroup.age;
const sheetName = `Age ${age} Months`;
// Create a new sheet for the age group
let sheet = spreadsheet.getSheetByName(sheetName);
if (!sheet) {
sheet = spreadsheet.insertSheet(sheetName);
} else {
sheet.clear();
}
// Set up the H1 header for the age
sheet.getRange('A1').setValue(`Milestones for Age ${age} Months`)
.setFontSize(24).setFontWeight('bold');
sheet.getRange('A1:E1').merge();
let currentRow = 3; // Start below the header row
// Iterate through each category and create a table of milestones
for (const categoryKey in ageGroup.categories) {
const categoryData = ageGroup.categories[categoryKey];
const categoryName = categoryData.name;
const milestones = categoryData.milestones;
// Add a category header
sheet.getRange(currentRow, 1).setValue(categoryName)
.setFontSize(18).setFontWeight('bold').setBackground('#f0f0f0');
sheet.getRange(currentRow, 1, 1, 5).merge();
currentRow++;
// Add table headers
sheet.getRange(currentRow, 1, 1, 4).setValues([['Milestone', 'Status', 'Notes', '']]);
sheet.getRange(currentRow, 1, 1, 4).setFontWeight('bold').setBackground('#e0e0e0');
currentRow++;
// Add each milestone with a checkbox and notes area
milestones.forEach(milestone => {
sheet.getRange(currentRow, 1).setValue(milestone);
sheet.getRange(currentRow, 2).insertCheckboxes(); // Checkbox for status
sheet.getRange(currentRow, 3).setValue(''); // Placeholder for notes
sheet.setRowHeight(currentRow, 40); // Make row taller for notes
currentRow++;
});
currentRow += 1; // Add some space before the next category
}
// Remove gridlines to make it look less like a spreadsheet
sheet.setHiddenGridlines(true);
// Adjust column widths for a better layout
sheet.setColumnWidth(1, 300); // Column for Milestone
sheet.setColumnWidth(2, 100); // Column for Status
sheet.setColumnWidth(3, 300); // Column for Notes
sheet.setColumnWidth(4, 20); // Spacer column
// Freeze the header and category rows
sheet.setFrozenRows(2);
});
// Remove default "Sheet1" if it exists
const defaultSheet = spreadsheet.getSheetByName('Sheet1');
if (defaultSheet) {
spreadsheet.deleteSheet(defaultSheet);
}
// Display a success message
SpreadsheetApp.getUi().alert('Milestone sheets have been successfully created!');
}
{
"ages": [
{
"age": 2,
"categories": {
"social_emotional": {
"name": "Social/Emotional",
"milestones": [
"Calms down when spoken to or picked up",
"Looks at your face",
"Seems happy to see you when you walk up to her",
"Smiles when you talk to or smile at her"
]
},
"language_communication": {
"name": "Language/Communication",
"milestones": [
"Makes sounds other than crying",
"Reacts to loud sounds"
]
},
"cognitive": {
"name": "Cognitive",
"milestones": [
"Watches you as you move",
"Looks at a toy for several seconds"
]
},
"movement_physical": {
"name": "Movement/Physical",
"milestones": [
"Holds head up when on tummy",
"Moves both arms and both legs",
"Opens hands briefly"
]
}
}
},
{
"age": 4,
"categories": {
"social_emotional": {
"name": "Social/Emotional",
"milestones": [
"Smiles on his own to get your attention",
"Chuckles when you try to make her laugh",
"Looks at you, moves, or makes sounds to get or keep your attention"
]
},
"language_communication": {
"name": "Language/Communication",
"milestones": [
"Makes sounds like 'oooo', 'aahh' (cooing)",
"Makes sounds back when you talk to him",
"Turns head towards the sound of your voice"
]
},
"cognitive": {
"name": "Cognitive",
"milestones": [
"If hungry, opens mouth when she sees breast or bottle",
"Looks at his hands with interest"
]
},
"movement_physical": {
"name": "Movement/Physical",
"milestones": [
"Holds head steady without support when you are holding her",
"Holds a toy when you put it in his hand",
"Uses her arm to swing at toys",
"Brings hands to mouth",
"Pushes up onto elbows/forearms when on tummy"
]
}
}
},
{
"age": 6,
"categories": {
"social_emotional": {
"name": "Social/Emotional",
"milestones": [
"Knows familiar people",
"Likes to look at himself in a mirror",
"Laughs"
]
},
"language_communication": {
"name": "Language/Communication",
"milestones": [
"Takes turns making sounds with you",
"Blows raspberries (sticks tongue out and blows)",
"Makes squealing noises"
]
},
"cognitive": {
"name": "Cognitive",
"milestones": [
"Puts things in her mouth to explore them",
"Reaches to grab a toy he wants",
"Closes lips to show she doesn\u2019t want more food"
]
},
"movement_physical": {
"name": "Movement/Physical",
"milestones": [
"Rolls from tummy to back",
"Pushes up with straight arms when on tummy",
"Leans on hands to support himself when sitting"
]
}
}
},
{
"age": 9,
"categories": {
"social_emotional": {
"name": "Social/Emotional",
"milestones": [
"Is shy, clingy, or fearful around strangers",
"Shows several facial expressions, like happy, sad, angry, and surprised",
"Looks when you call her name",
"Reacts when you leave (looks, reaches for you, or cries)",
"Smiles or laughs when you play peek-a-boo"
]
},
"language_communication": {
"name": "Language/Communication",
"milestones": [
"Makes different sounds like 'mamamama' and 'babababa'",
"Lifts arms up to be picked up"
]
},
"cognitive": {
"name": "Cognitive",
"milestones": [
"Looks for objects when dropped out of sight (like his spoon or toy)",
"Bangs two things together"
]
},
"movement_physical": {
"name": "Movement/Physical",
"milestones": [
"Gets to a sitting position by herself",
"Moves things from one hand to her other hand",
"Uses fingers to 'rake' food towards himself",
"Sits without support"
]
}
}
},
{
"age": 12,
"categories": {
"social_emotional": {
"name": "Social/Emotional",
"milestones": [
"Plays games with you, like pat-a-cake"
]
},
"language_communication": {
"name": "Language/Communication",
"milestones": [
"Waves 'bye-bye'",
"Calls a parent 'mama' or 'dada'",
"Understands 'no' (pauses briefly or stops when you say it)"
]
},
"cognitive": {
"name": "Cognitive",
"milestones": [
"Puts something in a container, like a block in a cup",
"Looks for things he sees you hide, like a toy under a blanket"
]
},
"movement_physical": {
"name": "Movement/Physical",
"milestones": [
"Pulls up to stand",
"Walks, holding on to furniture",
"Drinks from a cup without a lid, as you hold it",
"Picks things up between thumb and pointer finger, like small bits of food"
]
}
}
},
{
"age": 15,
"categories": {
"social_emotional": {
"name": "Social/Emotional",
"milestones": [
"Copies other children while playing",
"Shows you an object she likes",
"Claps when excited",
"Hugs stuffed doll or toy",
"Shows you affection"
]
},
"language_communication": {
"name": "Language/Communication",
"milestones": [
"Tries to say one or two words besides 'mama' or 'dada'",
"Looks at a familiar object when you name it",
"Follows directions with a gesture and words"
]
},
"cognitive": {
"name": "Cognitive",
"milestones": [
"Tries to use things the right way, like a phone, cup, or book",
"Stacks at least two small objects, like blocks"
]
},
"movement_physical": {
"name": "Movement/Physical",
"milestones": [
"Takes a few steps on his own",
"Uses fingers to feed herself some food"
]
}
}
},
{
"age": 18,
"categories": {
"social_emotional": {
"name": "Social/Emotional",
"milestones": [
"Moves away from you, but looks to make sure you are close",
"Points to show you something interesting",
"Puts hands out for you to wash them",
"Looks at a few pages in a book with you",
"Helps you dress him by pushing arm through sleeve or lifting up foot"
]
},
"language_communication": {
"name": "Language/Communication",
"milestones": [
"Tries to say three or more words besides 'mama' or 'dada'",
"Follows one-step directions without any gestures"
]
},
"cognitive": {
"name": "Cognitive",
"milestones": [
"Copies you doing chores, like sweeping with a broom",
"Plays with toys in a simple way, like pushing a toy car"
]
},
"movement_physical": {
"name": "Movement/Physical",
"milestones": [
"Walks without holding on to anyone",
"Scribbles",
"Drinks from a cup without a lid",
"Feeds herself with fingers",
"Tries to use a spoon",
"Climbs on and off a couch or chair without help"
]
}
}
},
{
"age": 24,
"categories": {
"social_emotional": {
"name": "Social/Emotional",
"milestones": [
"Notices when others are hurt or upset",
"Looks at your face to see how to react in a new situation"
]
},
"language_communication": {
"name": "Language/Communication",
"milestones": [
"Points to things in a book",
"Says at least two words together",
"Points to at least two body parts",
"Uses more gestures than just waving and pointing"
]
},
"cognitive": {
"name": "Cognitive",
"milestones": [
"Holds something in one hand while using the other",
"Tries to use switches, knobs, or buttons on a toy",
"Plays with more than one toy at the same time"
]
},
"movement_physical": {
"name": "Movement/Physical",
"milestones": [
"Kicks a ball",
"Runs",
"Walks up a few stairs with or without help",
"Eats with a spoon"
]
}
}
},
{
"age": 30,
"categories": {
"social_emotional": {
"name": "Social/Emotional",
"milestones": [
"Plays next to other children and sometimes plays with them",
"Shows you what she can do by saying 'Look at me!'",
"Follows simple routines when told"
]
},
"language_communication": {
"name": "Language/Communication",
"milestones": [
"Says about 50 words",
"Says two or more words together",
"Names things in a book",
"Says words like 'I', 'me', or 'we'"
]
},
"cognitive": {
"name": "Cognitive",
"milestones": [
"Uses things to pretend",
"Shows simple problem-solving skills",
"Follows two-step instructions",
"Shows he knows at least one color"
]
},
"movement_physical": {
"name": "Movement/Physical",
"milestones": [
"Uses hands to twist things",
"Takes some clothes off by himself",
"Jumps off the ground with both feet",
"Turns book pages one at a time"
]
}
}
},
{
"age": 36,
"categories": {
"social_emotional": {
"name": "Social/Emotional",
"milestones": [
"Calms down within 10 minutes after you leave",
"Notices other children and joins them to play"
]
},
"language_communication": {
"name": "Language/Communication",
"milestones": [
"Talks with you in conversation using at least two back-and-forth exchanges",
"Asks 'who', 'what', 'where', or 'why' questions",
"Says first name",
"Talks well enough for others to understand"
]
},
"cognitive": {
"name": "Cognitive",
"milestones": [
"Draws a circle",
"Avoids touching hot objects when warned"
]
},
"movement_physical": {
"name": "Movement/Physical",
"milestones": [
"Strings items together",
"Puts on some clothes by himself",
"Uses a fork"
]
}
}
},
{
"age": 48,
"categories": {
"social_emotional": {
"name": "Social/Emotional",
"milestones": [
"Pretends to be something else during play (teacher, superhero, dog)",
"Asks to play with other children",
"Comforts others who are hurt or sad",
"Avoids danger",
"Likes to be a 'helper'"
]
},
"language_communication": {
"name": "Language/Communication",
"milestones": [
"Says sentences with four or more words",
"Says some words from a song, story, or nursery rhyme",
"Talks about at least one thing that happened during his day",
"Answers simple questions"
]
},
"cognitive": {
"name": "Cognitive",
"milestones": [
"Names a few colors",
"Tells what comes next in a well-known story",
"Draws a person with three or more body parts"
]
},
"movement_physical": {
"name": "Movement/Physical",
"milestones": [
"Catches a large ball most of the time",
"Serves himself food or pours water with supervision",
"Unbuttons some buttons",
"Holds crayon or pencil between fingers and thumb"
]
}
}
},
{
"age": 60,
"categories": {
"social_emotional": {
"name": "Social/Emotional",
"milestones": [
"Follows rules or takes turns when playing games",
"Sings, dances, or acts for you",
"Does simple chores at home"
]
},
"language_communication": {
"name": "Language/Communication",
"milestones": [
"Tells a story with at least two events",
"Answers simple questions about a book or story",
"Keeps a conversation going with more than three back-and-forth exchanges",
"Uses or recognizes simple rhymes"
]
},
"cognitive": {
"name": "Cognitive",
"milestones": [
"Counts to 10",
"Names some numbers between 1 and 5",
"Uses words about time like 'yesterday', 'tomorrow', 'morning', or 'night'",
"Pays attention for 5 to 10 minutes during activities",
"Writes some letters in her name",
"Names some letters when you point to them"
]
},
"movement_physical": {
"name": "Movement/Physical",
"milestones": [
"Buttons some buttons",
"Hops on one foot"
]
}
}
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment