[{"data":1,"prerenderedAt":794},["ShallowReactive",2],{"docs-navigation":3,"doc-\u002Fdev\u002Fgit\u002Fgit-cheat-sheet":186,"surround-\u002Fdev\u002Fgit\u002Fgit-cheat-sheet":640,"notes-index":645},[4,62,127,138,149,160,175],{"title":5,"path":6,"stem":7,"children":8},"Dev","\u002Fdev","1.dev",[9,12,26,36,46,52],{"title":10,"path":6,"stem":11},"Development","1.dev\u002Findex",{"title":13,"path":14,"stem":15,"children":16},"Laravel","\u002Fdev\u002Flaravel","1.dev\u002F1.laravel\u002Findex",[17,18,22],{"title":13,"path":14,"stem":15},{"title":19,"path":20,"stem":21},"Eloquent Relationships","\u002Fdev\u002Flaravel\u002Feloquent-relationships","1.dev\u002F1.laravel\u002F1.eloquent-relationships",{"title":23,"path":24,"stem":25},"Laravel Homestead","\u002Fdev\u002Flaravel\u002Flaravel-homestead","1.dev\u002F1.laravel\u002F2.laravel-homestead",{"title":27,"path":28,"stem":29,"children":30},"Bash","\u002Fdev\u002Fbash","1.dev\u002F13.bash\u002Findex",[31,32],{"title":27,"path":28,"stem":29},{"title":33,"path":34,"stem":35},"My Bash RC","\u002Fdev\u002Fbash\u002Fbash-rc","1.dev\u002F13.bash\u002F2.bash-rc",{"title":37,"path":38,"stem":39,"children":40},"Clean Code","\u002Fdev\u002Fclean-code","1.dev\u002F15.clean-code\u002Findex",[41,42],{"title":37,"path":38,"stem":39},{"title":43,"path":44,"stem":45},"Naming Things","\u002Fdev\u002Fclean-code\u002Fnaming-things","1.dev\u002F15.clean-code\u002F1.naming-things",{"title":47,"path":48,"stem":49,"children":50},"AI Prompting","\u002Fdev\u002Fai-prompting","1.dev\u002F17.ai-prompting\u002Findex",[51],{"title":47,"path":48,"stem":49},{"title":53,"path":54,"stem":55,"children":56},"Git","\u002Fdev\u002Fgit","1.dev\u002F9.git\u002Findex",[57,58],{"title":53,"path":54,"stem":55},{"title":59,"path":60,"stem":61},"Git Cheat Sheet","\u002Fdev\u002Fgit\u002Fgit-cheat-sheet","1.dev\u002F9.git\u002F1.git-cheat-sheet",{"title":63,"path":64,"stem":65,"children":66},"Teaching","\u002Fteaching","2.teaching",[67,69],{"title":63,"path":64,"stem":68},"2.teaching\u002Findex",{"title":70,"path":71,"stem":72,"children":73},"AppsDev","\u002Fteaching\u002Fapps-dev","2.teaching\u002F1.apps-dev\u002Findex",[74,75,93,107,117],{"title":70,"path":71,"stem":72},{"title":76,"path":77,"stem":78,"children":79},"Lesson Plans","\u002Fteaching\u002Fapps-dev\u002Flesson-plans","2.teaching\u002F1.apps-dev\u002F1.lesson-plans\u002Findex",[80,81,85,89],{"title":76,"path":77,"stem":78},{"title":82,"path":83,"stem":84},"Coding with AI","\u002Fteaching\u002Fapps-dev\u002Flesson-plans\u002Fcoding-with-ai","2.teaching\u002F1.apps-dev\u002F1.lesson-plans\u002F1.coding-with-ai",{"title":86,"path":87,"stem":88},"Coding with AI: Prompts & Reading JavaScript","\u002Fteaching\u002Fapps-dev\u002Flesson-plans\u002Fprompts-and-reading-js","2.teaching\u002F1.apps-dev\u002F1.lesson-plans\u002F2.prompts-and-reading-js",{"title":90,"path":91,"stem":92},"JavaScript for Beginners","\u002Fteaching\u002Fapps-dev\u002Flesson-plans\u002Fjavascript-for-beginners","2.teaching\u002F1.apps-dev\u002F1.lesson-plans\u002F3.javascript-for-beginners",{"title":94,"path":95,"stem":96,"children":97},"Activities","\u002Fteaching\u002Fapps-dev\u002Factivities","2.teaching\u002F1.apps-dev\u002F2.activities\u002Findex",[98,99,103],{"title":94,"path":95,"stem":96},{"title":100,"path":101,"stem":102},"Dynamic Portfolio Website","\u002Fteaching\u002Fapps-dev\u002Factivities\u002Fdynamic-portfolio-website","2.teaching\u002F1.apps-dev\u002F2.activities\u002F2.dynamic-portfolio-website",{"title":104,"path":105,"stem":106},"Mini Product Store","\u002Fteaching\u002Fapps-dev\u002Factivities\u002Fmini-product-store","2.teaching\u002F1.apps-dev\u002F2.activities\u002F3.mini-product-store",{"title":108,"path":109,"stem":110,"children":111},"Exercises","\u002Fteaching\u002Fapps-dev\u002Fexercises","2.teaching\u002F1.apps-dev\u002F4.exercises\u002Findex",[112,113],{"title":108,"path":109,"stem":110},{"title":114,"path":115,"stem":116},"Read & Predict","\u002Fteaching\u002Fapps-dev\u002Fexercises\u002Fread-and-predict","2.teaching\u002F1.apps-dev\u002F4.exercises\u002F1.read-and-predict",{"title":118,"path":119,"stem":120,"children":121},"AI Prompts","\u002Fteaching\u002Fapps-dev\u002Fai-prompts","2.teaching\u002F1.apps-dev\u002F7.ai-prompts\u002Findex",[122,123],{"title":118,"path":119,"stem":120},{"title":124,"path":125,"stem":126},"Prompt Flow","\u002Fteaching\u002Fapps-dev\u002Fai-prompts\u002Fbasic-prompting","2.teaching\u002F1.apps-dev\u002F7.ai-prompts\u002F1.basic-prompting",{"title":128,"path":129,"stem":130,"children":131},"Snippets","\u002Fsnippets","3.snippets",[132,134],{"title":128,"path":129,"stem":133},"3.snippets\u002Findex",{"title":135,"path":136,"stem":137},"Debounce and Throttle","\u002Fsnippets\u002Fdebounce-and-throttle","3.snippets\u002F1.debounce-and-throttle",{"title":139,"path":140,"stem":141,"children":142},"Cheat Sheets","\u002Fcheat-sheets","4.cheat-sheets",[143,145],{"title":139,"path":140,"stem":144},"4.cheat-sheets\u002Findex",{"title":146,"path":147,"stem":148},"Vim Cheat Sheet","\u002Fcheat-sheets\u002Fvim-cheat-sheet","4.cheat-sheets\u002F1.vim-cheat-sheet",{"title":150,"path":151,"stem":152,"children":153},"Templates","\u002Ftemplates","5.templates",[154,156],{"title":150,"path":151,"stem":155},"5.templates\u002Findex",{"title":157,"path":158,"stem":159},"Pull Request Template","\u002Ftemplates\u002Fpull-request-template","5.templates\u002F1.pull-request-template",{"title":161,"path":162,"stem":163,"children":164},"Meta","\u002Fmeta","6.meta",[165,167,171],{"title":161,"path":162,"stem":166},"6.meta\u002Findex",{"title":168,"path":169,"stem":170},"Authoring Guide","\u002Fmeta\u002Fauthoring-guide","6.meta\u002F1.authoring-guide",{"title":172,"path":173,"stem":174},"Markdown Showcase","\u002Fmeta\u002Fmarkdown-showcase","6.meta\u002F2.markdown-showcase",{"title":176,"path":177,"stem":178,"children":179},"Troubleshooting","\u002Ftroubleshooting","7.troubleshooting",[180,182],{"title":176,"path":177,"stem":181},"7.troubleshooting\u002Findex",{"title":183,"path":184,"stem":185},"Fixing CORS Errors","\u002Ftroubleshooting\u002Fcors-errors","7.troubleshooting\u002F1.cors-errors",{"id":187,"title":59,"body":188,"category":53,"createdAt":619,"description":620,"draft":621,"extension":622,"featured":623,"keywords":624,"links":632,"meta":633,"navigation":623,"path":60,"readingTime":229,"seo":634,"stem":61,"tags":635,"updatedAt":619,"__hash__":639},"docs\u002F1.dev\u002F9.git\u002F1.git-cheat-sheet.md",{"type":189,"value":190,"toc":611},"minimark",[191,195,200,285,289,349,353,374,463,467,518,522,535,564,568,601,607],[192,193,194],"p",{},"The 20% of Git that covers 80% of the work — plus the handful of recovery\ncommands that turn \"I broke everything\" into a two-minute fix.",[196,197,199],"h2",{"id":198},"everyday-flow","Everyday flow",[201,202,207],"pre",{"className":203,"code":204,"language":205,"meta":206,"style":206},"language-bash shiki shiki-themes material-theme-lighter vitesse-light vitesse-dark","git status                      # what's changed\ngit add -p                      # stage hunks interactively\ngit commit -m \"feat: add search\"\ngit pull --rebase               # avoid noisy merge commits\ngit push\n","bash","",[208,209,210,227,242,263,277],"code",{"__ignoreMap":206},[211,212,215,219,223],"span",{"class":213,"line":214},"line",1,[211,216,218],{"class":217},"sYn-s","git",[211,220,222],{"class":221},"sTbE_"," status",[211,224,226],{"class":225},"s9Tkl","                      # what's changed\n",[211,228,230,232,235,239],{"class":213,"line":229},2,[211,231,218],{"class":217},[211,233,234],{"class":221}," add",[211,236,238],{"class":237},"sz9Cv"," -p",[211,240,241],{"class":225},"                      # stage hunks interactively\n",[211,243,245,247,250,253,257,260],{"class":213,"line":244},3,[211,246,218],{"class":217},[211,248,249],{"class":221}," commit",[211,251,252],{"class":237}," -m",[211,254,256],{"class":255},"sbYkP"," \"",[211,258,259],{"class":221},"feat: add search",[211,261,262],{"class":255},"\"\n",[211,264,266,268,271,274],{"class":213,"line":265},4,[211,267,218],{"class":217},[211,269,270],{"class":221}," pull",[211,272,273],{"class":237}," --rebase",[211,275,276],{"class":225},"               # avoid noisy merge commits\n",[211,278,280,282],{"class":213,"line":279},5,[211,281,218],{"class":217},[211,283,284],{"class":221}," push\n",[196,286,288],{"id":287},"branching","Branching",[290,291,292,305],"table",{},[293,294,295],"thead",{},[296,297,298,302],"tr",{},[299,300,301],"th",{},"Command",[299,303,304],{},"Does",[306,307,308,319,329,339],"tbody",{},[296,309,310,316],{},[311,312,313],"td",{},[208,314,315],{},"git switch -c feature\u002Fx",[311,317,318],{},"Create and switch to a branch",[296,320,321,326],{},[311,322,323],{},[208,324,325],{},"git switch main",[311,327,328],{},"Switch back",[296,330,331,336],{},[311,332,333],{},[208,334,335],{},"git branch -d feature\u002Fx",[311,337,338],{},"Delete a merged branch",[296,340,341,346],{},[311,342,343],{},[208,344,345],{},"git branch -D feature\u002Fx",[311,347,348],{},"Force-delete an unmerged branch",[196,350,352],{"id":351},"undoing-things","Undoing things",[354,355,356],"warning",{},[192,357,358,359,362,363,366,367,370,371,373],{},"The difference between ",[208,360,361],{},"--soft",", ",[208,364,365],{},"--mixed"," and ",[208,368,369],{},"--hard"," is what happens to your\nchanges. ",[208,372,369],{}," throws work away — be sure before you run it.",[201,375,377],{"className":203,"code":376,"language":205,"meta":206,"style":206},"git commit --amend               # fix the last commit message or add staged files\ngit restore --staged file.ts     # unstage, keep changes\ngit restore file.ts              # discard uncommitted changes to a file\ngit reset --soft HEAD~1          # undo last commit, keep changes staged\ngit reset --mixed HEAD~1         # undo last commit, keep changes unstaged\ngit reset --hard HEAD~1          # undo last commit AND discard changes\n",[208,378,379,391,407,418,434,448],{"__ignoreMap":206},[211,380,381,383,385,388],{"class":213,"line":214},[211,382,218],{"class":217},[211,384,249],{"class":221},[211,386,387],{"class":237}," --amend",[211,389,390],{"class":225},"               # fix the last commit message or add staged files\n",[211,392,393,395,398,401,404],{"class":213,"line":229},[211,394,218],{"class":217},[211,396,397],{"class":221}," restore",[211,399,400],{"class":237}," --staged",[211,402,403],{"class":221}," file.ts",[211,405,406],{"class":225},"     # unstage, keep changes\n",[211,408,409,411,413,415],{"class":213,"line":244},[211,410,218],{"class":217},[211,412,397],{"class":221},[211,414,403],{"class":221},[211,416,417],{"class":225},"              # discard uncommitted changes to a file\n",[211,419,420,422,425,428,431],{"class":213,"line":265},[211,421,218],{"class":217},[211,423,424],{"class":221}," reset",[211,426,427],{"class":237}," --soft",[211,429,430],{"class":221}," HEAD~1",[211,432,433],{"class":225},"          # undo last commit, keep changes staged\n",[211,435,436,438,440,443,445],{"class":213,"line":279},[211,437,218],{"class":217},[211,439,424],{"class":221},[211,441,442],{"class":237}," --mixed",[211,444,430],{"class":221},[211,446,447],{"class":225},"         # undo last commit, keep changes unstaged\n",[211,449,451,453,455,458,460],{"class":213,"line":450},6,[211,452,218],{"class":217},[211,454,424],{"class":221},[211,456,457],{"class":237}," --hard",[211,459,430],{"class":221},[211,461,462],{"class":225},"          # undo last commit AND discard changes\n",[196,464,466],{"id":465},"stashing","Stashing",[201,468,470],{"className":203,"code":469,"language":205,"meta":206,"style":206},"git stash                # shelve changes\ngit stash pop            # bring them back\ngit stash list           # see the stack\ngit stash -u             # include untracked files\n",[208,471,472,482,494,506],{"__ignoreMap":206},[211,473,474,476,479],{"class":213,"line":214},[211,475,218],{"class":217},[211,477,478],{"class":221}," stash",[211,480,481],{"class":225},"                # shelve changes\n",[211,483,484,486,488,491],{"class":213,"line":229},[211,485,218],{"class":217},[211,487,478],{"class":221},[211,489,490],{"class":221}," pop",[211,492,493],{"class":225},"            # bring them back\n",[211,495,496,498,500,503],{"class":213,"line":244},[211,497,218],{"class":217},[211,499,478],{"class":221},[211,501,502],{"class":221}," list",[211,504,505],{"class":225},"           # see the stack\n",[211,507,508,510,512,515],{"class":213,"line":265},[211,509,218],{"class":217},[211,511,478],{"class":221},[211,513,514],{"class":237}," -u",[211,516,517],{"class":225},"             # include untracked files\n",[196,519,521],{"id":520},"the-panic-button-reflog","The panic button: reflog",[523,524,525],"tip",{},[192,526,527,530,531,534],{},[208,528,529],{},"git reflog"," records every position ",[208,532,533],{},"HEAD"," has been at, even after a \"destructive\"\nreset. Almost nothing is truly lost for ~90 days.",[201,536,538],{"className":203,"code":537,"language":205,"meta":206,"style":206},"git reflog                       # find the SHA you were at before the mistake\ngit reset --hard abc1234         # jump back to it\n",[208,539,540,550],{"__ignoreMap":206},[211,541,542,544,547],{"class":213,"line":214},[211,543,218],{"class":217},[211,545,546],{"class":221}," reflog",[211,548,549],{"class":225},"                       # find the SHA you were at before the mistake\n",[211,551,552,554,556,558,561],{"class":213,"line":229},[211,553,218],{"class":217},[211,555,424],{"class":221},[211,557,457],{"class":237},[211,559,560],{"class":221}," abc1234",[211,562,563],{"class":225},"         # jump back to it\n",[196,565,567],{"id":566},"rewriting-history-local-branches-only","Rewriting history (local branches only)",[201,569,571],{"className":203,"code":570,"language":205,"meta":206,"style":206},"git rebase -i HEAD~3             # squash, reorder or reword the last 3 commits\ngit cherry-pick abc1234         # copy a single commit onto the current branch\n",[208,572,573,589],{"__ignoreMap":206},[211,574,575,577,580,583,586],{"class":213,"line":214},[211,576,218],{"class":217},[211,578,579],{"class":221}," rebase",[211,581,582],{"class":237}," -i",[211,584,585],{"class":221}," HEAD~3",[211,587,588],{"class":225},"             # squash, reorder or reword the last 3 commits\n",[211,590,591,593,596,598],{"class":213,"line":229},[211,592,218],{"class":217},[211,594,595],{"class":221}," cherry-pick",[211,597,560],{"class":221},[211,599,600],{"class":225},"         # copy a single commit onto the current branch\n",[602,603,604],"caution",{},[192,605,606],{},"Never rewrite history that others have already pulled. Rebasing a shared branch\nforces everyone else into a painful recovery.",[608,609,610],"style",{},"html pre.shiki code .sYn-s, html code.shiki .sYn-s{--shiki-light:#E2931D;--shiki-default:#59873A;--shiki-dark:#80A665}html pre.shiki code .sTbE_, html code.shiki .sTbE_{--shiki-light:#91B859;--shiki-default:#B56959;--shiki-dark:#C98A7D}html pre.shiki code .s9Tkl, html code.shiki .s9Tkl{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#A0ADA0;--shiki-default-font-style:inherit;--shiki-dark:#758575DD;--shiki-dark-font-style:inherit}html pre.shiki code .sz9Cv, html code.shiki .sz9Cv{--shiki-light:#91B859;--shiki-default:#A65E2B;--shiki-dark:#C99076}html pre.shiki code .sbYkP, html code.shiki .sbYkP{--shiki-light:#39ADB5;--shiki-default:#B5695977;--shiki-dark:#C98A7D77}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":206,"searchDepth":244,"depth":244,"links":612},[613,614,615,616,617,618],{"id":198,"depth":229,"text":199},{"id":287,"depth":229,"text":288},{"id":351,"depth":229,"text":352},{"id":465,"depth":229,"text":466},{"id":520,"depth":229,"text":521},{"id":566,"depth":229,"text":567},"2026-07-17","The Git commands I actually use day to day, plus how to undo things safely.",false,"md",true,[625,626,627,628,629,630,631],"rebase","stash","reset","reflog","amend","cherry-pick","undo",[],{},{"title":59,"description":620},[218,636,637,638],"cli","version-control","cheat-sheet","Gxe_EnhPHCZ7ueW-eNkDW6r9dqCqh9Ce-8h252oXyUg",[641,643],{"title":53,"path":54,"stem":55,"description":642,"children":-1},"Version control — everyday commands and getting out of trouble.",{"title":63,"path":64,"stem":68,"description":644,"children":-1},"Lesson plans, activities, rubrics and student references.",[646,653,659,662,667,670,677,680,683,685,687,690,697,701,706,709,717,721,724,730,733,737,740,742,744,750,753,758,761,767,770,777,782,785,791],{"path":20,"title":19,"description":647,"tags":648,"category":13,"featured":621,"updatedAt":619,"createdAt":619,"readingTime":214,"draft":621},"The core Eloquent relationship types with examples and the N+1 trap to avoid.",[649,650,651,652],"laravel","eloquent","database","orm",{"path":24,"title":23,"description":654,"tags":655,"category":13,"featured":621,"updatedAt":619,"createdAt":619,"readingTime":214,"draft":621},"My quick reference for setting up and using Laravel Homestead during development.",[649,656,657,658],"homestead","vagrant","virtualbox",{"path":14,"title":13,"description":660,"tags":661,"category":13,"featured":621,"updatedAt":619,"createdAt":619,"readingTime":214,"draft":621},"The PHP framework for web artisans — Eloquent, routing, queues and more.",[],{"path":34,"title":33,"description":663,"tags":664,"category":27,"featured":621,"updatedAt":619,"createdAt":619,"readingTime":229,"draft":621},"Personal Bash aliases and helper functions that streamline my Laravel and Homestead development workflow.",[205,665,666,656,649],"bashrc","git bash",{"path":28,"title":27,"description":668,"tags":669,"category":27,"featured":621,"updatedAt":619,"createdAt":619,"readingTime":214,"draft":621},"Shell scripting and a faster life on the command line.",[],{"path":44,"title":43,"description":671,"tags":672,"category":37,"featured":623,"updatedAt":619,"createdAt":619,"readingTime":214,"draft":621},"Practical rules for naming variables, functions and types so code reads like prose.",[673,674,675,676],"clean-code","naming","readability","craft",{"path":38,"title":37,"description":678,"tags":679,"category":37,"featured":621,"updatedAt":619,"createdAt":619,"readingTime":214,"draft":621},"Writing code that other people (and future you) can read.",[],{"path":48,"title":47,"description":681,"tags":682,"category":47,"featured":621,"updatedAt":619,"createdAt":619,"readingTime":214,"draft":621},"Getting reliable, useful results out of language models.",[],{"path":60,"title":59,"description":620,"tags":684,"category":53,"featured":623,"updatedAt":619,"createdAt":619,"readingTime":229,"draft":621},[218,636,637,638],{"path":54,"title":53,"description":642,"tags":686,"category":53,"featured":621,"updatedAt":619,"createdAt":619,"readingTime":214,"draft":621},[],{"path":6,"title":10,"description":688,"tags":689,"category":10,"featured":621,"updatedAt":619,"createdAt":619,"readingTime":214,"draft":621},"Languages, frameworks and the craft of building software.",[],{"path":83,"title":82,"description":691,"tags":692,"category":63,"featured":621,"updatedAt":619,"createdAt":619,"readingTime":265,"draft":621},"An introduction to AI-assisted software development, modern development workflows, and the mindset needed to use AI responsibly throughout the course.",[693,694,695,696],"ai","software development","prompt engineering","beginners",{"path":87,"title":86,"description":698,"tags":699,"category":63,"featured":621,"updatedAt":619,"createdAt":619,"readingTime":265,"draft":621},"Learn how to write effective AI prompts and read JavaScript code confidently. This lesson teaches students how to direct AI instead of blindly copying its output.",[693,700,695,696],"javascript",{"path":91,"title":90,"description":702,"tags":703,"category":63,"featured":621,"updatedAt":619,"createdAt":619,"readingTime":244,"draft":621},"Introduction to the fundamentals of JavaScript, from variables and functions to loops, DOM manipulation, and events. This lesson prepares students for the Mini Product Store activity.",[700,696,704,705],"programming","web development",{"path":77,"title":76,"description":707,"tags":708,"category":76,"featured":621,"updatedAt":619,"createdAt":619,"readingTime":214,"draft":621},"Session-by-session plans with objectives, timing and materials.",[],{"path":101,"title":100,"description":710,"tags":711,"category":94,"featured":621,"updatedAt":619,"createdAt":619,"readingTime":244,"draft":621},"Build a personal portfolio website using JavaScript arrays, loops, and DOM manipulation instead of hardcoded HTML.",[712,713,700,714,715,716],"teaching","activity","portfolio","dom","loops",{"path":105,"title":104,"description":718,"tags":719,"category":94,"featured":621,"updatedAt":619,"createdAt":619,"readingTime":244,"draft":621},"A JavaScript activity where students build a simple product store using arrays, loops, functions, DOM manipulation, and event listeners.",[712,713,700,715,720,716],"arrays",{"path":95,"title":94,"description":722,"tags":723,"category":94,"featured":621,"updatedAt":619,"createdAt":619,"readingTime":214,"draft":621},"In-class activities that get students doing, not just listening.",[],{"path":115,"title":114,"description":725,"tags":726,"category":94,"featured":621,"updatedAt":619,"createdAt":619,"readingTime":229,"draft":621},"Practice reading JavaScript code, predicting its output, and verifying your understanding before running the program.",[712,713,700,727,728,729],"functions","if-statement","debugging",{"path":109,"title":108,"description":731,"tags":732,"category":108,"featured":621,"updatedAt":619,"createdAt":619,"readingTime":214,"draft":621},"Practice problems that build skill through repetition.",[],{"path":125,"title":124,"description":734,"tags":735,"category":118,"featured":621,"updatedAt":619,"createdAt":619,"readingTime":265,"draft":621},"A structured workflow for working with AI that emphasizes planning, review, and understanding before implementation.",[693,695,736],"workflow",{"path":119,"title":118,"description":738,"tags":739,"category":118,"featured":621,"updatedAt":619,"createdAt":619,"readingTime":214,"draft":621},"Prompt templates for teaching with and about AI.",[],{"path":71,"title":70,"description":644,"tags":741,"category":63,"featured":621,"updatedAt":619,"createdAt":619,"readingTime":214,"draft":621},[],{"path":64,"title":63,"description":644,"tags":743,"category":63,"featured":621,"updatedAt":619,"createdAt":619,"readingTime":214,"draft":621},[],{"path":136,"title":135,"description":745,"tags":746,"category":128,"featured":621,"updatedAt":619,"createdAt":619,"readingTime":214,"draft":621},"Two tiny functions to control how often a handler runs — with the difference explained.",[700,747,748,749],"performance","snippets","events",{"path":129,"title":128,"description":751,"tags":752,"category":128,"featured":621,"updatedAt":619,"createdAt":619,"readingTime":214,"draft":621},"Small, copy-ready fragments you reach for again and again.",[],{"path":147,"title":146,"description":754,"tags":755,"category":139,"featured":621,"updatedAt":619,"createdAt":619,"readingTime":214,"draft":621},"The essential Vim motions and commands to get productive and get out.",[756,757,638,636],"vim","editor",{"path":140,"title":139,"description":759,"tags":760,"category":139,"featured":621,"updatedAt":619,"createdAt":619,"readingTime":214,"draft":621},"Dense, scannable references for commands and syntax.",[],{"path":158,"title":157,"description":762,"tags":763,"category":150,"featured":621,"updatedAt":619,"createdAt":619,"readingTime":214,"draft":621},"A reusable PR description template that makes reviews faster and kinder.",[218,764,765,766],"github","template","collaboration",{"path":151,"title":150,"description":768,"tags":769,"category":150,"featured":621,"updatedAt":619,"createdAt":619,"readingTime":214,"draft":621},"Reusable starting points for files, configs and docs.",[],{"path":169,"title":168,"description":771,"tags":772,"category":161,"featured":621,"updatedAt":619,"createdAt":619,"readingTime":229,"draft":621},"The frontmatter and markdown conventions every note in this knowledge base follows.",[773,774,775,776],"meta","conventions","markdown","authoring",{"path":173,"title":172,"description":778,"tags":779,"category":161,"featured":621,"updatedAt":619,"createdAt":619,"readingTime":229,"draft":621},"Every formatting feature this knowledge base supports, on one page — a living reference and rendering test.",[775,780,781],"mdc","reference",{"path":162,"title":161,"description":783,"tags":784,"category":161,"featured":621,"updatedAt":619,"createdAt":619,"readingTime":214,"draft":621},"How this knowledge base itself is built and maintained.",[],{"path":184,"title":183,"description":786,"tags":787,"category":176,"featured":621,"updatedAt":619,"createdAt":619,"readingTime":214,"draft":621},"What a CORS error actually means and how to fix it — on the server, where it belongs.",[788,789,790,729],"cors","http","apis",{"path":177,"title":176,"description":792,"tags":793,"category":176,"featured":621,"updatedAt":619,"createdAt":619,"readingTime":214,"draft":621},"Symptoms, causes and fixes for problems worth remembering.",[],1784276796049]