[{"data":1,"prerenderedAt":860},["ShallowReactive",2],{"docs-navigation":3,"doc-\u002Fteaching\u002Fapps-dev\u002Fai-prompts\u002Fbasic-prompting":186,"surround-\u002Fteaching\u002Fapps-dev\u002Fai-prompts\u002Fbasic-prompting":703,"notes-index":708},[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":124,"body":188,"category":118,"createdAt":685,"description":686,"draft":687,"extension":688,"featured":687,"keywords":689,"links":694,"meta":695,"navigation":696,"path":125,"readingTime":697,"seo":698,"stem":126,"tags":699,"updatedAt":685,"__hash__":702},"docs\u002F2.teaching\u002F1.apps-dev\u002F7.ai-prompts\u002F1.basic-prompting.md",{"type":189,"value":190,"toc":661},"minimark",[191,200,203,209,212,215,220,522,526,537,541,574,578,604,608,612,618,620,624,630,632,636,642,646],[192,193,194,195,199],"p",{},"This is the workflow used throughout my classes whenever working with AI. The\ngoal is ",[196,197,198],"strong",{},"not"," to get code as quickly as possible. The goal is to produce\nsoftware that you understand and can confidently explain.",[192,201,202],{},"Most beginners ask AI to:",[204,205,206],"blockquote",{},[192,207,208],{},"\"Build my app.\"",[192,210,211],{},"Then they receive hundreds of lines of code they don't understand.",[192,213,214],{},"Instead, we build software one step at a time.",[216,217,219],"h2",{"id":218},"the-prompt-flow","The Prompt Flow",[221,222,224,229,232,235,248,251,256,261,264,268,271,274,279,282,284,288,291,294,308,311,316,318,322,325,327,332,335,355,358,360,364,367,370,384,387,389,393,396,399,404,407,410,427,430,432,436,439,442,445,459,462,464,468,471,473,487,490,492,496,499,502,519],"steps",{"level":223},"2",[225,226,228],"h3",{"id":227},"_1-define-the-goal","1. Define the Goal",[192,230,231],{},"Start by explaining the problem, not the code.",[192,233,234],{},"Describe:",[236,237,238,242,245],"ul",{},[239,240,241],"li",{},"Who the users are.",[239,243,244],{},"What problem you're solving.",[239,246,247],{},"What success looks like.",[192,249,250],{},"Avoid asking for implementation details immediately.",[192,252,253],{},[196,254,255],{},"Example",[204,257,258],{},[192,259,260],{},"I want to create a simple inventory system for a school canteen where students can browse products and staff can manage inventory.",[262,263],"hr",{},[225,265,267],{"id":266},"_2-improve-the-prompt","2. Improve the Prompt",[192,269,270],{},"Before asking AI to solve the problem, ask it to improve your prompt.",[192,272,273],{},"Example:",[204,275,276],{},[192,277,278],{},"Act as a prompt engineer. Review and improve my prompt without changing my original goal.",[192,280,281],{},"A better prompt almost always produces a better answer.",[262,283],{},[225,285,287],{"id":286},"_3-review-the-improved-prompt","3. Review the Improved Prompt",[192,289,290],{},"Read the improved prompt carefully.",[192,292,293],{},"Ask yourself:",[236,295,296,299,302,305],{},[239,297,298],{},"Is anything missing?",[239,300,301],{},"Did the AI misunderstand my idea?",[239,303,304],{},"Is there unnecessary complexity?",[239,306,307],{},"Does it still match my original goal?",[192,309,310],{},"Remember:",[192,312,313],{},[196,314,315],{},"You review the prompt. AI doesn't know your project better than you do.",[262,317],{},[225,319,321],{"id":320},"_4-create-a-development-plan","4. Create a Development Plan",[192,323,324],{},"Before requesting code, ask for a plan.",[192,326,273],{},[204,328,329],{},[192,330,331],{},"Create a step-by-step implementation plan. Do not write any code yet.",[192,333,334],{},"The plan should include:",[236,336,337,340,343,346,349,352],{},[239,338,339],{},"Features",[239,341,342],{},"Folder structure",[239,344,345],{},"Architecture",[239,347,348],{},"Components",[239,350,351],{},"Database design",[239,353,354],{},"Development milestones",[192,356,357],{},"A good plan prevents messy code later.",[262,359],{},[225,361,363],{"id":362},"_5-review-the-plan","5. Review the Plan",[192,365,366],{},"Never execute a plan you haven't read.",[192,368,369],{},"Check:",[236,371,372,375,378,381],{},[239,373,374],{},"Is the architecture reasonable?",[239,376,377],{},"Can anything be simplified?",[239,379,380],{},"Are important features missing?",[239,382,383],{},"Is the order logical?",[192,385,386],{},"Revise the plan before moving forward.",[262,388],{},[225,390,392],{"id":391},"_6-implement-one-feature-at-a-time","6. Implement One Feature at a Time",[192,394,395],{},"Now begin writing code.",[192,397,398],{},"Instead of asking:",[204,400,401],{},[192,402,403],{},"Build the entire application.",[192,405,406],{},"Break the project into small tasks.",[192,408,409],{},"Examples:",[236,411,412,415,418,421,424],{},[239,413,414],{},"Build authentication.",[239,416,417],{},"Create the navigation bar.",[239,419,420],{},"Implement product listing.",[239,422,423],{},"Build the shopping cart.",[239,425,426],{},"Add validation.",[192,428,429],{},"Small prompts produce cleaner code and are much easier to debug.",[262,431],{},[225,433,435],{"id":434},"_7-review-the-code","7. Review the Code",[192,437,438],{},"Do not immediately copy and paste.",[192,440,441],{},"Read the code.",[192,443,444],{},"Ask AI questions such as:",[236,446,447,450,453,456],{},[239,448,449],{},"Explain this line.",[239,451,452],{},"Why did you use this approach?",[239,454,455],{},"Is there a cleaner solution?",[239,457,458],{},"Can this be more reusable?",[192,460,461],{},"If you can't explain the code, don't use it yet.",[262,463],{},[225,465,467],{"id":466},"_8-test-the-feature","8. Test the Feature",[192,469,470],{},"Run the application.",[192,472,369],{},[236,474,475,478,481,484],{},[239,476,477],{},"Does it work?",[239,479,480],{},"Are there bugs?",[239,482,483],{},"Does it match the plan?",[239,485,486],{},"Can edge cases break it?",[192,488,489],{},"Testing is part of development, not something you do at the end.",[262,491],{},[225,493,495],{"id":494},"_9-iterate","9. Iterate",[192,497,498],{},"Software is never finished in one prompt.",[192,500,501],{},"Repeat the cycle:",[236,503,504,507,510,513,516],{},[239,505,506],{},"Improve",[239,508,509],{},"Review",[239,511,512],{},"Build",[239,514,515],{},"Test",[239,517,518],{},"Refine",[192,520,521],{},"Each iteration should leave the project in a better state than before.",[216,523,525],{"id":524},"visual-workflow","Visual Workflow",[527,528,534],"pre",{"className":529,"code":531,"language":532,"meta":533},[530],"language-text","Idea\n │\n ▼\nDefine the Goal\n │\n ▼\nImprove the Prompt\n │\n ▼\nReview the Prompt\n │\n ▼\nCreate a Development Plan\n │\n ▼\nReview the Plan\n │\n ▼\nBuild One Feature\n │\n ▼\nReview the Code\n │\n ▼\nTest\n │\n ▼\nImprove\n │\n └──────────────┐\n                ▼\n            Repeat\n","text","",[535,536,531],"code",{"__ignoreMap":533},[216,538,540],{"id":539},"why-this-workflow","Why This Workflow?",[542,543,544,551,554,557,571],"note",{},[192,545,546,547,550],{},"This workflow keeps ",[196,548,549],{},"you"," in control.",[192,552,553],{},"AI is excellent at writing code.",[192,555,556],{},"Humans are responsible for deciding:",[236,558,559,562,565,568],{},[239,560,561],{},"what to build,",[239,563,564],{},"why to build it,",[239,566,567],{},"whether the solution is correct,",[239,569,570],{},"and whether the code is maintainable.",[192,572,573],{},"Never let AI skip those decisions for you.",[216,575,577],{"id":576},"common-mistakes","Common Mistakes",[579,580,581,584],"warning",{},[192,582,583],{},"Avoid these habits:",[236,585,586,589,592,595,598,601],{},[239,587,588],{},"Asking AI to build the whole application in one prompt.",[239,590,591],{},"Copying code without understanding it.",[239,593,594],{},"Skipping the planning stage.",[239,596,597],{},"Never reviewing AI output.",[239,599,600],{},"Never testing the generated code.",[239,602,603],{},"Assuming AI is always correct.",[216,605,607],{"id":606},"recommended-prompt-templates","Recommended Prompt Templates",[225,609,611],{"id":610},"improve-a-prompt","Improve a Prompt",[527,613,616],{"className":614,"code":615,"language":532,"meta":533},[530],"Act as a prompt engineer.\n\nReview my prompt and improve it.\n\nRequirements:\n\n- Preserve my original goal.\n- Remove ambiguity.\n- Add missing technical details.\n- Improve clarity.\n- Do not change the project's purpose.\n\nMy Prompt:\n\n[paste prompt]\n",[535,617,615],{"__ignoreMap":533},[262,619],{},[225,621,623],{"id":622},"generate-a-plan","Generate a Plan",[527,625,628],{"className":626,"code":627,"language":532,"meta":533},[530],"Act as a senior software engineer.\n\nBefore writing any code, create a complete implementation plan.\n\nInclude:\n\n- Architecture\n- Folder structure\n- Components\n- Services\n- Database\n- Development phases\n- Best practices\n\nDo not generate code yet.\n",[535,629,627],{"__ignoreMap":533},[262,631],{},[225,633,635],{"id":634},"implement-a-feature","Implement a Feature",[527,637,640],{"className":638,"code":639,"language":532,"meta":533},[530],"Act as a senior software engineer.\n\nImplement only this feature.\n\nRequirements:\n\n- Follow clean code principles.\n- Reuse existing components.\n- Explain important decisions.\n- Do not modify unrelated files.\n",[535,641,639],{"__ignoreMap":533},[216,643,645],{"id":644},"the-golden-rule","The Golden Rule",[647,648,649,652,655,658],"tip",{},[192,650,651],{},"Never ask AI to replace your thinking.",[192,653,654],{},"Ask AI to accelerate your thinking.",[192,656,657],{},"The best developers are not the ones who write the most code.",[192,659,660],{},"They're the ones who make the best decisions before the first line of code is ever written.",{"title":533,"searchDepth":662,"depth":662,"links":663},3,[664,676,677,678,679,684],{"id":218,"depth":665,"text":219,"children":666},2,[667,668,669,670,671,672,673,674,675],{"id":227,"depth":662,"text":228},{"id":266,"depth":662,"text":267},{"id":286,"depth":662,"text":287},{"id":320,"depth":662,"text":321},{"id":362,"depth":662,"text":363},{"id":391,"depth":662,"text":392},{"id":434,"depth":662,"text":435},{"id":466,"depth":662,"text":467},{"id":494,"depth":662,"text":495},{"id":524,"depth":665,"text":525},{"id":539,"depth":665,"text":540},{"id":576,"depth":665,"text":577},{"id":606,"depth":665,"text":607,"children":680},[681,682,683],{"id":610,"depth":662,"text":611},{"id":622,"depth":662,"text":623},{"id":634,"depth":662,"text":635},{"id":644,"depth":665,"text":645},"2026-07-17","A structured workflow for working with AI that emphasizes planning, review, and understanding before implementation.",false,"md",[690,691,692,693],"prompt flow","ai workflow","prompt engineering","coding with ai",[],{},true,4,{"title":124,"description":686},[700,692,701],"ai","workflow","OdsZapHgHDWHFjWtRpNlpFVEt4JzqZbmEvZP7-6sn2Q",[704,706],{"title":118,"path":119,"stem":120,"description":705,"children":-1},"Prompt templates for teaching with and about AI.",{"title":128,"path":129,"stem":133,"description":707,"children":-1},"Small, copy-ready fragments you reach for again and again.",[709,717,723,726,732,735,742,745,748,755,758,761,766,770,775,778,786,790,793,799,802,804,806,809,811,817,819,824,827,833,836,843,848,851,857],{"path":20,"title":19,"description":710,"tags":711,"category":13,"featured":687,"updatedAt":685,"createdAt":685,"readingTime":716,"draft":687},"The core Eloquent relationship types with examples and the N+1 trap to avoid.",[712,713,714,715],"laravel","eloquent","database","orm",1,{"path":24,"title":23,"description":718,"tags":719,"category":13,"featured":687,"updatedAt":685,"createdAt":685,"readingTime":716,"draft":687},"My quick reference for setting up and using Laravel Homestead during development.",[712,720,721,722],"homestead","vagrant","virtualbox",{"path":14,"title":13,"description":724,"tags":725,"category":13,"featured":687,"updatedAt":685,"createdAt":685,"readingTime":716,"draft":687},"The PHP framework for web artisans — Eloquent, routing, queues and more.",[],{"path":34,"title":33,"description":727,"tags":728,"category":27,"featured":687,"updatedAt":685,"createdAt":685,"readingTime":665,"draft":687},"Personal Bash aliases and helper functions that streamline my Laravel and Homestead development workflow.",[729,730,731,720,712],"bash","bashrc","git bash",{"path":28,"title":27,"description":733,"tags":734,"category":27,"featured":687,"updatedAt":685,"createdAt":685,"readingTime":716,"draft":687},"Shell scripting and a faster life on the command line.",[],{"path":44,"title":43,"description":736,"tags":737,"category":37,"featured":696,"updatedAt":685,"createdAt":685,"readingTime":716,"draft":687},"Practical rules for naming variables, functions and types so code reads like prose.",[738,739,740,741],"clean-code","naming","readability","craft",{"path":38,"title":37,"description":743,"tags":744,"category":37,"featured":687,"updatedAt":685,"createdAt":685,"readingTime":716,"draft":687},"Writing code that other people (and future you) can read.",[],{"path":48,"title":47,"description":746,"tags":747,"category":47,"featured":687,"updatedAt":685,"createdAt":685,"readingTime":716,"draft":687},"Getting reliable, useful results out of language models.",[],{"path":60,"title":59,"description":749,"tags":750,"category":53,"featured":696,"updatedAt":685,"createdAt":685,"readingTime":665,"draft":687},"The Git commands I actually use day to day, plus how to undo things safely.",[751,752,753,754],"git","cli","version-control","cheat-sheet",{"path":54,"title":53,"description":756,"tags":757,"category":53,"featured":687,"updatedAt":685,"createdAt":685,"readingTime":716,"draft":687},"Version control — everyday commands and getting out of trouble.",[],{"path":6,"title":10,"description":759,"tags":760,"category":10,"featured":687,"updatedAt":685,"createdAt":685,"readingTime":716,"draft":687},"Languages, frameworks and the craft of building software.",[],{"path":83,"title":82,"description":762,"tags":763,"category":63,"featured":687,"updatedAt":685,"createdAt":685,"readingTime":697,"draft":687},"An introduction to AI-assisted software development, modern development workflows, and the mindset needed to use AI responsibly throughout the course.",[700,764,692,765],"software development","beginners",{"path":87,"title":86,"description":767,"tags":768,"category":63,"featured":687,"updatedAt":685,"createdAt":685,"readingTime":697,"draft":687},"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.",[700,769,692,765],"javascript",{"path":91,"title":90,"description":771,"tags":772,"category":63,"featured":687,"updatedAt":685,"createdAt":685,"readingTime":662,"draft":687},"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.",[769,765,773,774],"programming","web development",{"path":77,"title":76,"description":776,"tags":777,"category":76,"featured":687,"updatedAt":685,"createdAt":685,"readingTime":716,"draft":687},"Session-by-session plans with objectives, timing and materials.",[],{"path":101,"title":100,"description":779,"tags":780,"category":94,"featured":687,"updatedAt":685,"createdAt":685,"readingTime":662,"draft":687},"Build a personal portfolio website using JavaScript arrays, loops, and DOM manipulation instead of hardcoded HTML.",[781,782,769,783,784,785],"teaching","activity","portfolio","dom","loops",{"path":105,"title":104,"description":787,"tags":788,"category":94,"featured":687,"updatedAt":685,"createdAt":685,"readingTime":662,"draft":687},"A JavaScript activity where students build a simple product store using arrays, loops, functions, DOM manipulation, and event listeners.",[781,782,769,784,789,785],"arrays",{"path":95,"title":94,"description":791,"tags":792,"category":94,"featured":687,"updatedAt":685,"createdAt":685,"readingTime":716,"draft":687},"In-class activities that get students doing, not just listening.",[],{"path":115,"title":114,"description":794,"tags":795,"category":94,"featured":687,"updatedAt":685,"createdAt":685,"readingTime":665,"draft":687},"Practice reading JavaScript code, predicting its output, and verifying your understanding before running the program.",[781,782,769,796,797,798],"functions","if-statement","debugging",{"path":109,"title":108,"description":800,"tags":801,"category":108,"featured":687,"updatedAt":685,"createdAt":685,"readingTime":716,"draft":687},"Practice problems that build skill through repetition.",[],{"path":125,"title":124,"description":686,"tags":803,"category":118,"featured":687,"updatedAt":685,"createdAt":685,"readingTime":697,"draft":687},[700,692,701],{"path":119,"title":118,"description":705,"tags":805,"category":118,"featured":687,"updatedAt":685,"createdAt":685,"readingTime":716,"draft":687},[],{"path":71,"title":70,"description":807,"tags":808,"category":63,"featured":687,"updatedAt":685,"createdAt":685,"readingTime":716,"draft":687},"Lesson plans, activities, rubrics and student references.",[],{"path":64,"title":63,"description":807,"tags":810,"category":63,"featured":687,"updatedAt":685,"createdAt":685,"readingTime":716,"draft":687},[],{"path":136,"title":135,"description":812,"tags":813,"category":128,"featured":687,"updatedAt":685,"createdAt":685,"readingTime":716,"draft":687},"Two tiny functions to control how often a handler runs — with the difference explained.",[769,814,815,816],"performance","snippets","events",{"path":129,"title":128,"description":707,"tags":818,"category":128,"featured":687,"updatedAt":685,"createdAt":685,"readingTime":716,"draft":687},[],{"path":147,"title":146,"description":820,"tags":821,"category":139,"featured":687,"updatedAt":685,"createdAt":685,"readingTime":716,"draft":687},"The essential Vim motions and commands to get productive and get out.",[822,823,754,752],"vim","editor",{"path":140,"title":139,"description":825,"tags":826,"category":139,"featured":687,"updatedAt":685,"createdAt":685,"readingTime":716,"draft":687},"Dense, scannable references for commands and syntax.",[],{"path":158,"title":157,"description":828,"tags":829,"category":150,"featured":687,"updatedAt":685,"createdAt":685,"readingTime":716,"draft":687},"A reusable PR description template that makes reviews faster and kinder.",[751,830,831,832],"github","template","collaboration",{"path":151,"title":150,"description":834,"tags":835,"category":150,"featured":687,"updatedAt":685,"createdAt":685,"readingTime":716,"draft":687},"Reusable starting points for files, configs and docs.",[],{"path":169,"title":168,"description":837,"tags":838,"category":161,"featured":687,"updatedAt":685,"createdAt":685,"readingTime":665,"draft":687},"The frontmatter and markdown conventions every note in this knowledge base follows.",[839,840,841,842],"meta","conventions","markdown","authoring",{"path":173,"title":172,"description":844,"tags":845,"category":161,"featured":687,"updatedAt":685,"createdAt":685,"readingTime":665,"draft":687},"Every formatting feature this knowledge base supports, on one page — a living reference and rendering test.",[841,846,847],"mdc","reference",{"path":162,"title":161,"description":849,"tags":850,"category":161,"featured":687,"updatedAt":685,"createdAt":685,"readingTime":716,"draft":687},"How this knowledge base itself is built and maintained.",[],{"path":184,"title":183,"description":852,"tags":853,"category":176,"featured":687,"updatedAt":685,"createdAt":685,"readingTime":716,"draft":687},"What a CORS error actually means and how to fix it — on the server, where it belongs.",[854,855,856,798],"cors","http","apis",{"path":177,"title":176,"description":858,"tags":859,"category":176,"featured":687,"updatedAt":685,"createdAt":685,"readingTime":716,"draft":687},"Symptoms, causes and fixes for problems worth remembering.",[],1784276796543]