[{"data":1,"prerenderedAt":744},["ShallowReactive",2],{"docs-navigation":3,"doc-\u002Fdev\u002Fclean-code\u002Fnaming-things":186,"surround-\u002Fdev\u002Fclean-code\u002Fnaming-things":590,"notes-index":595},[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":43,"body":188,"category":37,"createdAt":572,"description":573,"draft":574,"extension":575,"featured":289,"keywords":576,"links":581,"meta":582,"navigation":289,"path":44,"readingTime":217,"seo":583,"stem":45,"tags":584,"updatedAt":572,"__hash__":589},"docs\u002F1.dev\u002F15.clean-code\u002F1.naming-things.md",{"type":189,"value":190,"toc":565},"minimark",[191,195,200,203,342,346,364,423,427,514,518,547,551,561],[192,193,194],"p",{},"There are two hard things in computer science; this note is about one of them.\nGood names are the cheapest documentation you'll ever write.",[196,197,199],"h2",{"id":198},"reveal-intent","Reveal intent",[192,201,202],{},"A name should answer why something exists and how it's used — without a comment.",[204,205,210],"pre",{"className":206,"code":207,"language":208,"meta":209,"style":209},"language-js shiki shiki-themes material-theme-lighter vitesse-light vitesse-dark","\u002F\u002F Unclear\nconst d = 30\nconst list = users.filter(u => u.a)\n\n\u002F\u002F Clear\nconst maxRetryDelaySeconds = 30\nconst activeUsers = users.filter(user => user.isActive)\n","js","",[211,212,213,222,241,284,291,297,309],"code",{"__ignoreMap":209},[214,215,218],"span",{"class":216,"line":217},"line",1,[214,219,221],{"class":220},"s9Tkl","\u002F\u002F Unclear\n",[214,223,225,229,233,237],{"class":216,"line":224},2,[214,226,228],{"class":227},"s5Kfy","const",[214,230,232],{"class":231},"sSC40"," d",[214,234,236],{"class":235},"soVBu"," =",[214,238,240],{"class":239},"s7CZa"," 30\n",[214,242,244,246,249,251,254,257,261,265,269,273,276,278,281],{"class":216,"line":243},3,[214,245,228],{"class":227},[214,247,248],{"class":231}," list",[214,250,236],{"class":235},[214,252,253],{"class":231}," users",[214,255,256],{"class":235},".",[214,258,260],{"class":259},"sljsM","filter",[214,262,264],{"class":263},"snCua","(",[214,266,268],{"class":267},"sqOPj","u",[214,270,272],{"class":271},"sIOqK"," =>",[214,274,275],{"class":231}," u",[214,277,256],{"class":235},[214,279,280],{"class":231},"a",[214,282,283],{"class":263},")\n",[214,285,287],{"class":216,"line":286},4,[214,288,290],{"emptyLinePlaceholder":289},true,"\n",[214,292,294],{"class":216,"line":293},5,[214,295,296],{"class":220},"\u002F\u002F Clear\n",[214,298,300,302,305,307],{"class":216,"line":299},6,[214,301,228],{"class":227},[214,303,304],{"class":231}," maxRetryDelaySeconds",[214,306,236],{"class":235},[214,308,240],{"class":239},[214,310,312,314,317,319,321,323,325,327,330,332,335,337,340],{"class":216,"line":311},7,[214,313,228],{"class":227},[214,315,316],{"class":231}," activeUsers",[214,318,236],{"class":235},[214,320,253],{"class":231},[214,322,256],{"class":235},[214,324,260],{"class":259},[214,326,264],{"class":263},[214,328,329],{"class":267},"user",[214,331,272],{"class":271},[214,333,334],{"class":231}," user",[214,336,256],{"class":235},[214,338,339],{"class":231},"isActive",[214,341,283],{"class":263},[196,343,345],{"id":344},"booleans-read-as-yesno-questions","Booleans read as yes\u002Fno questions",[192,347,348,349,352,353,352,356,359,360,363],{},"Prefix with ",[211,350,351],{},"is",", ",[211,354,355],{},"has",[211,357,358],{},"can"," or ",[211,361,362],{},"should"," so conditions read naturally.",[204,365,367],{"className":206,"code":366,"language":208,"meta":209,"style":209},"if (user.isVerified && cart.hasItems && payment.canProceed) {\n  \u002F\u002F ...\n}\n",[211,368,369,413,418],{"__ignoreMap":209},[214,370,371,375,378,380,382,385,389,392,394,397,399,402,404,407,410],{"class":216,"line":217},[214,372,374],{"class":373},"siDh9","if",[214,376,377],{"class":263}," (",[214,379,329],{"class":231},[214,381,256],{"class":235},[214,383,384],{"class":231},"isVerified",[214,386,388],{"class":387},"sVsLi"," &&",[214,390,391],{"class":231}," cart",[214,393,256],{"class":235},[214,395,396],{"class":231},"hasItems",[214,398,388],{"class":387},[214,400,401],{"class":231}," payment",[214,403,256],{"class":235},[214,405,406],{"class":231},"canProceed",[214,408,409],{"class":263},")",[214,411,412],{"class":235}," {\n",[214,414,415],{"class":216,"line":224},[214,416,417],{"class":220},"  \u002F\u002F ...\n",[214,419,420],{"class":216,"line":243},[214,421,422],{"class":235},"}\n",[196,424,426],{"id":425},"functions-are-verbs-values-are-nouns","Functions are verbs; values are nouns",[428,429,430,446],"table",{},[431,432,433],"thead",{},[434,435,436,440,443],"tr",{},[437,438,439],"th",{},"Kind",[437,441,442],{},"Style",[437,444,445],{},"Example",[447,448,449,466,482,498],"tbody",{},[434,450,451,455,458],{},[452,453,454],"td",{},"Function",[452,456,457],{},"verb phrase",[452,459,460,352,463],{},[211,461,462],{},"calculateTotal",[211,464,465],{},"sendInvite",[434,467,468,471,474],{},[452,469,470],{},"Boolean",[452,472,473],{},"predicate",[452,475,476,352,479],{},[211,477,478],{},"isEmpty",[211,480,481],{},"hasAccess",[434,483,484,487,490],{},[452,485,486],{},"Collection",[452,488,489],{},"plural noun",[452,491,492,352,495],{},[211,493,494],{},"orders",[211,496,497],{},"activeUsers",[434,499,500,503,506],{},[452,501,502],{},"Single value",[452,504,505],{},"singular noun",[452,507,508,352,511],{},[211,509,510],{},"order",[211,512,513],{},"currentUser",[196,515,517],{"id":516},"avoid-noise-words","Avoid noise words",[519,520,521],"tip",{},[192,522,523,352,526,352,529,352,532,535,536,539,540,543,544,256],{},[211,524,525],{},"Manager",[211,527,528],{},"Data",[211,530,531],{},"Info",[211,533,534],{},"Object"," and ",[211,537,538],{},"Helper"," usually add length without\nmeaning. ",[211,541,542],{},"UserData"," is rarely clearer than ",[211,545,546],{},"User",[196,548,550],{"id":549},"match-the-length-to-the-scope","Match the length to the scope",[552,553,554],"note",{},[192,555,556,557,560],{},"A loop index living for two lines can be ",[211,558,559],{},"i",". A module-level constant that other\nfiles import deserves a full, descriptive name. Short scope, short name; long\nscope, long name.",[562,563,564],"style",{},"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 .s5Kfy, html code.shiki .s5Kfy{--shiki-light:#9C3EDA;--shiki-default:#AB5959;--shiki-dark:#CB7676}html pre.shiki code .sSC40, html code.shiki .sSC40{--shiki-light:#90A4AE;--shiki-default:#B07D48;--shiki-dark:#BD976A}html pre.shiki code .soVBu, html code.shiki .soVBu{--shiki-light:#39ADB5;--shiki-default:#999999;--shiki-dark:#666666}html pre.shiki code .s7CZa, html code.shiki .s7CZa{--shiki-light:#F76D47;--shiki-default:#2F798A;--shiki-dark:#4C9A91}html pre.shiki code .sljsM, html code.shiki .sljsM{--shiki-light:#6182B8;--shiki-default:#59873A;--shiki-dark:#80A665}html pre.shiki code .snCua, html code.shiki .snCua{--shiki-light:#90A4AE;--shiki-default:#999999;--shiki-dark:#666666}html pre.shiki code .sqOPj, html code.shiki .sqOPj{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#B07D48;--shiki-default-font-style:inherit;--shiki-dark:#BD976A;--shiki-dark-font-style:inherit}html pre.shiki code .sIOqK, html code.shiki .sIOqK{--shiki-light:#9C3EDA;--shiki-default:#999999;--shiki-dark:#666666}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);}html pre.shiki code .siDh9, html code.shiki .siDh9{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#1E754F;--shiki-default-font-style:inherit;--shiki-dark:#4D9375;--shiki-dark-font-style:inherit}html pre.shiki code .sVsLi, html code.shiki .sVsLi{--shiki-light:#39ADB5;--shiki-default:#AB5959;--shiki-dark:#CB7676}",{"title":209,"searchDepth":243,"depth":243,"links":566},[567,568,569,570,571],{"id":198,"depth":224,"text":199},{"id":344,"depth":224,"text":345},{"id":425,"depth":224,"text":426},{"id":516,"depth":224,"text":517},{"id":549,"depth":224,"text":550},"2026-07-17","Practical rules for naming variables, functions and types so code reads like prose.",false,"md",[577,578,579,580],"naming conventions","intention-revealing","booleans","functions",[],{},{"title":43,"description":573},[585,586,587,588],"clean-code","naming","readability","craft","klYBQ5xqXLNLNH9svKtrS5InZBI1YFpDRfo4iOI87PU",[591,593],{"title":37,"path":38,"stem":39,"description":592,"children":-1},"Writing code that other people (and future you) can read.",{"title":47,"path":48,"stem":49,"description":594,"children":-1},"Getting reliable, useful results out of language models.",[596,603,609,612,618,621,623,625,627,634,637,640,647,651,656,659,667,671,674,679,682,686,689,692,694,700,703,708,711,717,720,727,732,735,741],{"path":20,"title":19,"description":597,"tags":598,"category":13,"featured":574,"updatedAt":572,"createdAt":572,"readingTime":217,"draft":574},"The core Eloquent relationship types with examples and the N+1 trap to avoid.",[599,600,601,602],"laravel","eloquent","database","orm",{"path":24,"title":23,"description":604,"tags":605,"category":13,"featured":574,"updatedAt":572,"createdAt":572,"readingTime":217,"draft":574},"My quick reference for setting up and using Laravel Homestead during development.",[599,606,607,608],"homestead","vagrant","virtualbox",{"path":14,"title":13,"description":610,"tags":611,"category":13,"featured":574,"updatedAt":572,"createdAt":572,"readingTime":217,"draft":574},"The PHP framework for web artisans — Eloquent, routing, queues and more.",[],{"path":34,"title":33,"description":613,"tags":614,"category":27,"featured":574,"updatedAt":572,"createdAt":572,"readingTime":224,"draft":574},"Personal Bash aliases and helper functions that streamline my Laravel and Homestead development workflow.",[615,616,617,606,599],"bash","bashrc","git bash",{"path":28,"title":27,"description":619,"tags":620,"category":27,"featured":574,"updatedAt":572,"createdAt":572,"readingTime":217,"draft":574},"Shell scripting and a faster life on the command line.",[],{"path":44,"title":43,"description":573,"tags":622,"category":37,"featured":289,"updatedAt":572,"createdAt":572,"readingTime":217,"draft":574},[585,586,587,588],{"path":38,"title":37,"description":592,"tags":624,"category":37,"featured":574,"updatedAt":572,"createdAt":572,"readingTime":217,"draft":574},[],{"path":48,"title":47,"description":594,"tags":626,"category":47,"featured":574,"updatedAt":572,"createdAt":572,"readingTime":217,"draft":574},[],{"path":60,"title":59,"description":628,"tags":629,"category":53,"featured":289,"updatedAt":572,"createdAt":572,"readingTime":224,"draft":574},"The Git commands I actually use day to day, plus how to undo things safely.",[630,631,632,633],"git","cli","version-control","cheat-sheet",{"path":54,"title":53,"description":635,"tags":636,"category":53,"featured":574,"updatedAt":572,"createdAt":572,"readingTime":217,"draft":574},"Version control — everyday commands and getting out of trouble.",[],{"path":6,"title":10,"description":638,"tags":639,"category":10,"featured":574,"updatedAt":572,"createdAt":572,"readingTime":217,"draft":574},"Languages, frameworks and the craft of building software.",[],{"path":83,"title":82,"description":641,"tags":642,"category":63,"featured":574,"updatedAt":572,"createdAt":572,"readingTime":286,"draft":574},"An introduction to AI-assisted software development, modern development workflows, and the mindset needed to use AI responsibly throughout the course.",[643,644,645,646],"ai","software development","prompt engineering","beginners",{"path":87,"title":86,"description":648,"tags":649,"category":63,"featured":574,"updatedAt":572,"createdAt":572,"readingTime":286,"draft":574},"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.",[643,650,645,646],"javascript",{"path":91,"title":90,"description":652,"tags":653,"category":63,"featured":574,"updatedAt":572,"createdAt":572,"readingTime":243,"draft":574},"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.",[650,646,654,655],"programming","web development",{"path":77,"title":76,"description":657,"tags":658,"category":76,"featured":574,"updatedAt":572,"createdAt":572,"readingTime":217,"draft":574},"Session-by-session plans with objectives, timing and materials.",[],{"path":101,"title":100,"description":660,"tags":661,"category":94,"featured":574,"updatedAt":572,"createdAt":572,"readingTime":243,"draft":574},"Build a personal portfolio website using JavaScript arrays, loops, and DOM manipulation instead of hardcoded HTML.",[662,663,650,664,665,666],"teaching","activity","portfolio","dom","loops",{"path":105,"title":104,"description":668,"tags":669,"category":94,"featured":574,"updatedAt":572,"createdAt":572,"readingTime":243,"draft":574},"A JavaScript activity where students build a simple product store using arrays, loops, functions, DOM manipulation, and event listeners.",[662,663,650,665,670,666],"arrays",{"path":95,"title":94,"description":672,"tags":673,"category":94,"featured":574,"updatedAt":572,"createdAt":572,"readingTime":217,"draft":574},"In-class activities that get students doing, not just listening.",[],{"path":115,"title":114,"description":675,"tags":676,"category":94,"featured":574,"updatedAt":572,"createdAt":572,"readingTime":224,"draft":574},"Practice reading JavaScript code, predicting its output, and verifying your understanding before running the program.",[662,663,650,580,677,678],"if-statement","debugging",{"path":109,"title":108,"description":680,"tags":681,"category":108,"featured":574,"updatedAt":572,"createdAt":572,"readingTime":217,"draft":574},"Practice problems that build skill through repetition.",[],{"path":125,"title":124,"description":683,"tags":684,"category":118,"featured":574,"updatedAt":572,"createdAt":572,"readingTime":286,"draft":574},"A structured workflow for working with AI that emphasizes planning, review, and understanding before implementation.",[643,645,685],"workflow",{"path":119,"title":118,"description":687,"tags":688,"category":118,"featured":574,"updatedAt":572,"createdAt":572,"readingTime":217,"draft":574},"Prompt templates for teaching with and about AI.",[],{"path":71,"title":70,"description":690,"tags":691,"category":63,"featured":574,"updatedAt":572,"createdAt":572,"readingTime":217,"draft":574},"Lesson plans, activities, rubrics and student references.",[],{"path":64,"title":63,"description":690,"tags":693,"category":63,"featured":574,"updatedAt":572,"createdAt":572,"readingTime":217,"draft":574},[],{"path":136,"title":135,"description":695,"tags":696,"category":128,"featured":574,"updatedAt":572,"createdAt":572,"readingTime":217,"draft":574},"Two tiny functions to control how often a handler runs — with the difference explained.",[650,697,698,699],"performance","snippets","events",{"path":129,"title":128,"description":701,"tags":702,"category":128,"featured":574,"updatedAt":572,"createdAt":572,"readingTime":217,"draft":574},"Small, copy-ready fragments you reach for again and again.",[],{"path":147,"title":146,"description":704,"tags":705,"category":139,"featured":574,"updatedAt":572,"createdAt":572,"readingTime":217,"draft":574},"The essential Vim motions and commands to get productive and get out.",[706,707,633,631],"vim","editor",{"path":140,"title":139,"description":709,"tags":710,"category":139,"featured":574,"updatedAt":572,"createdAt":572,"readingTime":217,"draft":574},"Dense, scannable references for commands and syntax.",[],{"path":158,"title":157,"description":712,"tags":713,"category":150,"featured":574,"updatedAt":572,"createdAt":572,"readingTime":217,"draft":574},"A reusable PR description template that makes reviews faster and kinder.",[630,714,715,716],"github","template","collaboration",{"path":151,"title":150,"description":718,"tags":719,"category":150,"featured":574,"updatedAt":572,"createdAt":572,"readingTime":217,"draft":574},"Reusable starting points for files, configs and docs.",[],{"path":169,"title":168,"description":721,"tags":722,"category":161,"featured":574,"updatedAt":572,"createdAt":572,"readingTime":224,"draft":574},"The frontmatter and markdown conventions every note in this knowledge base follows.",[723,724,725,726],"meta","conventions","markdown","authoring",{"path":173,"title":172,"description":728,"tags":729,"category":161,"featured":574,"updatedAt":572,"createdAt":572,"readingTime":224,"draft":574},"Every formatting feature this knowledge base supports, on one page — a living reference and rendering test.",[725,730,731],"mdc","reference",{"path":162,"title":161,"description":733,"tags":734,"category":161,"featured":574,"updatedAt":572,"createdAt":572,"readingTime":217,"draft":574},"How this knowledge base itself is built and maintained.",[],{"path":184,"title":183,"description":736,"tags":737,"category":176,"featured":574,"updatedAt":572,"createdAt":572,"readingTime":217,"draft":574},"What a CORS error actually means and how to fix it — on the server, where it belongs.",[738,739,740,678],"cors","http","apis",{"path":177,"title":176,"description":742,"tags":743,"category":176,"featured":574,"updatedAt":572,"createdAt":572,"readingTime":217,"draft":574},"Symptoms, causes and fixes for problems worth remembering.",[],1784276795996]