[{"data":1,"prerenderedAt":865},["ShallowReactive",2],{"docs-navigation":3,"doc-\u002Fteaching\u002Fapps-dev\u002Flesson-plans\u002Fcoding-with-ai":186,"surround-\u002Fteaching\u002Fapps-dev\u002Flesson-plans\u002Fcoding-with-ai":709,"notes-index":714},[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":82,"body":188,"category":63,"createdAt":690,"description":691,"draft":692,"extension":693,"featured":692,"keywords":694,"links":700,"meta":701,"navigation":702,"path":83,"readingTime":703,"seo":704,"stem":84,"tags":705,"updatedAt":690,"__hash__":708},"docs\u002F2.teaching\u002F1.apps-dev\u002F1.lesson-plans\u002F1.coding-with-ai.md",{"type":189,"value":190,"toc":667},"minimark",[191,200,205,208,234,238,244,250,254,606,610,613,618,621,625],[192,193,194,195],"p",{},"This read-ahead lesson introduces the mindset and workflow that will be used\nthroughout the course. Students learn that AI is a powerful development\nassistant, but the developer remains responsible for every decision and every\nline of code. ",[196,197,199],"content-reference",{"index":198},"0","oaicite:0",[201,202,204],"h2",{"id":203},"learning-objectives","Learning Objectives",[192,206,207],{},"After completing this lesson, students should be able to:",[209,210,211,215,218,221,224,227],"ul",{},[212,213,214],"li",{},"Explain what modern AI-assisted software development is.",[212,216,217],{},"Describe the software development process before coding begins.",[212,219,220],{},"Identify the three major parts of a software application.",[212,222,223],{},"Understand how AI should be used during development.",[212,225,226],{},"Follow the Core Loop for AI-assisted programming.",[212,228,229,230],{},"Maintain a reflection log documenting AI usage throughout the semester. ",[196,231,233],{"index":232},"1","oaicite:1",[201,235,237],{"id":236},"presentation","Presentation",[192,239,240],{},[241,242,243],"strong",{},"Google Slides",[245,246,247],"blockquote",{},[192,248,249],{},"Day 1 – Coding with AI (Read Ahead)",[201,251,253],{"id":252},"lesson-outline","Lesson Outline",[255,256,258,263,266,272,276,279,282,296,303,307,310,321,328,332,335,359,370,374,377,397,404,408,411,414,425,432,436,439,458,465,469,472,475,489,492,510,514,517,524,531,535,538,546,553,557,560,574,581,585,588,599],"steps",{"level":257},"2",[259,260,262],"h3",{"id":261},"course-overview","Course Overview",[192,264,265],{},"Students are introduced to the main goal of the course.",[192,267,268,269],{},"Rather than focusing solely on writing code manually, students learn how to\nbuild software effectively with the assistance of modern AI tools while staying\nin control of the development process. ",[196,270,271],{"index":257},"oaicite:2",[259,273,275],{"id":274},"software-development-is-problem-solving","Software Development is Problem Solving",[192,277,278],{},"Programming does not begin with typing code.",[192,280,281],{},"Students learn that the developer's primary responsibility is to:",[209,283,284,287,290,293],{},[212,285,286],{},"Understand the problem.",[212,288,289],{},"Understand the user.",[212,291,292],{},"Break large problems into smaller pieces.",[212,294,295],{},"Design the solution before implementation.",[192,297,298,299],{},"AI assists with writing code, but humans solve the problem. ",[196,300,302],{"index":301},"3","oaicite:3",[259,304,306],{"id":305},"where-every-project-begins","Where Every Project Begins",[192,308,309],{},"Before opening a code editor or asking AI to generate code, students answer\nthree questions:",[209,311,312,315,318],{},[212,313,314],{},"Who is the application for?",[212,316,317],{},"What problem does it solve?",[212,319,320],{},"What is the smallest useful version that can be built?",[192,322,323,324],{},"These questions form the foundation of every successful software project. ",[196,325,327],{"index":326},"4","oaicite:4",[259,329,331],{"id":330},"the-software-development-lifecycle","The Software Development Lifecycle",[192,333,334],{},"Students are introduced to the seven stages of software development:",[336,337,338,341,344,347,350,353,356],"ol",{},[212,339,340],{},"Idea",[212,342,343],{},"Requirements",[212,345,346],{},"Design",[212,348,349],{},"Build",[212,351,352],{},"Test",[212,354,355],{},"Ship",[212,357,358],{},"Maintain",[192,360,361,362,365,366],{},"The lesson emphasizes that most software work happens ",[241,363,364],{},"before"," writing code. ",[196,367,369],{"index":368},"5","oaicite:5",[259,371,373],{"id":372},"anatomy-of-an-application","Anatomy of an Application",[192,375,376],{},"Every application consists of three major components:",[209,378,379,385,391],{},[212,380,381,384],{},[241,382,383],{},"Frontend"," – what users see.",[212,386,387,390],{},[241,388,389],{},"Backend"," – the application logic.",[212,392,393,396],{},[241,394,395],{},"Data"," – persistent information stored in a database.",[192,398,399,400],{},"Students use these concepts throughout the semester when discussing application architecture. ",[196,401,403],{"index":402},"6","oaicite:6",[259,405,407],{"id":406},"understanding-ai-coding-assistants","Understanding AI Coding Assistants",[192,409,410],{},"Students learn how AI actually works.",[192,412,413],{},"Key ideas include:",[209,415,416,419,422],{},[212,417,418],{},"AI predicts likely code rather than understanding the project.",[212,420,421],{},"AI can produce incorrect answers confidently.",[212,423,424],{},"AI only knows the information provided in the prompt.",[192,426,427,428],{},"These limitations explain why developers must review AI-generated work carefully. ",[196,429,431],{"index":430},"7","oaicite:7",[259,433,435],{"id":434},"the-core-loop","The Core Loop",[192,437,438],{},"The course follows a consistent AI-assisted workflow:",[336,440,441,444,447,450,452,455],{},[212,442,443],{},"Specify",[212,445,446],{},"Plan",[212,448,449],{},"Review",[212,451,349],{},[212,453,454],{},"Verify",[212,456,457],{},"Iterate",[192,459,460,461],{},"Students practice reviewing AI output before accepting it, ensuring they remain responsible for every decision. ",[196,462,464],{"index":463},"8","oaicite:8",[259,466,468],{"id":467},"good-ai-habits","Good AI Habits",[192,470,471],{},"Students compare productive AI usage with poor AI usage.",[192,473,474],{},"Good habits include:",[209,476,477,480,483,486],{},[212,478,479],{},"Asking for plans before code.",[212,481,482],{},"Requesting explanations.",[212,484,485],{},"Reviewing generated code.",[212,487,488],{},"Using AI as a tutor.",[192,490,491],{},"Poor habits include:",[209,493,494,497,500,503],{},[212,495,496],{},"Copying code without understanding it.",[212,498,499],{},"Letting AI make design decisions.",[212,501,502],{},"Asking AI to build an entire application in one prompt.",[212,504,505,506],{},"Shipping code without verification. ",[196,507,509],{"index":508},"9","oaicite:9",[259,511,513],{"id":512},"the-one-rule","The One Rule",[192,515,516],{},"Throughout the semester, one rule applies:",[245,518,519],{},[192,520,521],{},[241,522,523],{},"You may only submit code you can explain.",[192,525,526,527],{},"Students are encouraged to ask AI for explanations until they fully understand how the code works. ",[196,528,530],{"index":529},"10","oaicite:10",[259,532,534],{"id":533},"course-deliverables","Course Deliverables",[192,536,537],{},"Students work in groups to produce:",[209,539,540,543],{},[212,541,542],{},"A small but functional application.",[212,544,545],{},"A reflection log documenting how AI was used during development.",[192,547,548,549],{},"The reflection log carries significant weight because the course emphasizes understanding and decision-making rather than simply producing code. ",[196,550,552],{"index":551},"11","oaicite:11",[259,554,556],{"id":555},"development-tools","Development Tools",[192,558,559],{},"Students are introduced to the tools used throughout the course:",[209,561,562,565,568,571],{},[212,563,564],{},"Claude or ChatGPT",[212,566,567],{},"Cursor or Windsurf",[212,569,570],{},"GitHub Copilot",[212,572,573],{},"GitHub",[192,575,576,577],{},"Each tool has a specific role in the AI-assisted development workflow. ",[196,578,580],{"index":579},"12","oaicite:12",[259,582,584],{"id":583},"week-1-tasks","Week 1 Tasks",[192,586,587],{},"Before the next class meeting, students should:",[336,589,590,593,596],{},[212,591,592],{},"Set up all required development tools.",[212,594,595],{},"Create their first reflection log entry.",[212,597,598],{},"Write a short reflection on what \"coding with AI\" means to them.",[192,600,601,602],{},"These activities prepare students for the hands-on lessons that follow. ",[196,603,605],{"index":604},"13","oaicite:13",[201,607,609],{"id":608},"recommended-next-lesson","Recommended Next Lesson",[192,611,612],{},"Continue with:",[192,614,615,616],{},"➡️ ",[241,617,86],{},[192,619,620],{},"This lesson introduces prompt engineering and teaches students how to read the JavaScript generated by AI before they begin building applications.",[201,622,624],{"id":623},"key-takeaways","Key Takeaways",[626,627,628,635,638,652,655],"note",{},[192,629,630,631,634],{},"The most important lesson is that ",[241,632,633],{},"AI does not replace the developer",".",[192,636,637],{},"Throughout this course:",[209,639,640,643,646,649],{},[212,641,642],{},"The developer defines the problem.",[212,644,645],{},"The developer reviews the plan.",[212,647,648],{},"The developer verifies the implementation.",[212,650,651],{},"The developer remains responsible for the final product.",[192,653,654],{},"Remember the course motto:",[245,656,657],{},[192,658,659,662,663],{},[241,660,661],{},"You are the director. AI is the typist."," ",[196,664,666],{"index":665},"14","oaicite:14",{"title":668,"searchDepth":669,"depth":669,"links":670},"",3,[671,673,674,688,689],{"id":203,"depth":672,"text":204},2,{"id":236,"depth":672,"text":237},{"id":252,"depth":672,"text":253,"children":675},[676,677,678,679,680,681,682,683,684,685,686,687],{"id":261,"depth":669,"text":262},{"id":274,"depth":669,"text":275},{"id":305,"depth":669,"text":306},{"id":330,"depth":669,"text":331},{"id":372,"depth":669,"text":373},{"id":406,"depth":669,"text":407},{"id":434,"depth":669,"text":435},{"id":467,"depth":669,"text":468},{"id":512,"depth":669,"text":513},{"id":533,"depth":669,"text":534},{"id":555,"depth":669,"text":556},{"id":583,"depth":669,"text":584},{"id":608,"depth":672,"text":609},{"id":623,"depth":672,"text":624},"2026-07-17","An introduction to AI-assisted software development, modern development workflows, and the mindset needed to use AI responsibly throughout the course.",false,"md",[695,696,697,698,699],"coding with ai","software development","prompt engineering","application development","ai workflow",[],{},true,4,{"title":82,"description":691},[706,696,697,707],"ai","beginners","XAEmK66Iwpphwd60cHBD1c-wq_GlYs0C9D5FrOzaYKs",[710,712],{"title":76,"path":77,"stem":78,"description":711,"children":-1},"Session-by-session plans with objectives, timing and materials.",{"title":86,"path":87,"stem":88,"description":713,"children":-1},"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.",[715,723,729,732,738,741,748,751,754,761,764,767,769,772,777,779,787,791,794,800,803,807,810,813,815,821,824,829,832,838,841,848,853,856,862],{"path":20,"title":19,"description":716,"tags":717,"category":13,"featured":692,"updatedAt":690,"createdAt":690,"readingTime":722,"draft":692},"The core Eloquent relationship types with examples and the N+1 trap to avoid.",[718,719,720,721],"laravel","eloquent","database","orm",1,{"path":24,"title":23,"description":724,"tags":725,"category":13,"featured":692,"updatedAt":690,"createdAt":690,"readingTime":722,"draft":692},"My quick reference for setting up and using Laravel Homestead during development.",[718,726,727,728],"homestead","vagrant","virtualbox",{"path":14,"title":13,"description":730,"tags":731,"category":13,"featured":692,"updatedAt":690,"createdAt":690,"readingTime":722,"draft":692},"The PHP framework for web artisans — Eloquent, routing, queues and more.",[],{"path":34,"title":33,"description":733,"tags":734,"category":27,"featured":692,"updatedAt":690,"createdAt":690,"readingTime":672,"draft":692},"Personal Bash aliases and helper functions that streamline my Laravel and Homestead development workflow.",[735,736,737,726,718],"bash","bashrc","git bash",{"path":28,"title":27,"description":739,"tags":740,"category":27,"featured":692,"updatedAt":690,"createdAt":690,"readingTime":722,"draft":692},"Shell scripting and a faster life on the command line.",[],{"path":44,"title":43,"description":742,"tags":743,"category":37,"featured":702,"updatedAt":690,"createdAt":690,"readingTime":722,"draft":692},"Practical rules for naming variables, functions and types so code reads like prose.",[744,745,746,747],"clean-code","naming","readability","craft",{"path":38,"title":37,"description":749,"tags":750,"category":37,"featured":692,"updatedAt":690,"createdAt":690,"readingTime":722,"draft":692},"Writing code that other people (and future you) can read.",[],{"path":48,"title":47,"description":752,"tags":753,"category":47,"featured":692,"updatedAt":690,"createdAt":690,"readingTime":722,"draft":692},"Getting reliable, useful results out of language models.",[],{"path":60,"title":59,"description":755,"tags":756,"category":53,"featured":702,"updatedAt":690,"createdAt":690,"readingTime":672,"draft":692},"The Git commands I actually use day to day, plus how to undo things safely.",[757,758,759,760],"git","cli","version-control","cheat-sheet",{"path":54,"title":53,"description":762,"tags":763,"category":53,"featured":692,"updatedAt":690,"createdAt":690,"readingTime":722,"draft":692},"Version control — everyday commands and getting out of trouble.",[],{"path":6,"title":10,"description":765,"tags":766,"category":10,"featured":692,"updatedAt":690,"createdAt":690,"readingTime":722,"draft":692},"Languages, frameworks and the craft of building software.",[],{"path":83,"title":82,"description":691,"tags":768,"category":63,"featured":692,"updatedAt":690,"createdAt":690,"readingTime":703,"draft":692},[706,696,697,707],{"path":87,"title":86,"description":713,"tags":770,"category":63,"featured":692,"updatedAt":690,"createdAt":690,"readingTime":703,"draft":692},[706,771,697,707],"javascript",{"path":91,"title":90,"description":773,"tags":774,"category":63,"featured":692,"updatedAt":690,"createdAt":690,"readingTime":669,"draft":692},"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.",[771,707,775,776],"programming","web development",{"path":77,"title":76,"description":711,"tags":778,"category":76,"featured":692,"updatedAt":690,"createdAt":690,"readingTime":722,"draft":692},[],{"path":101,"title":100,"description":780,"tags":781,"category":94,"featured":692,"updatedAt":690,"createdAt":690,"readingTime":669,"draft":692},"Build a personal portfolio website using JavaScript arrays, loops, and DOM manipulation instead of hardcoded HTML.",[782,783,771,784,785,786],"teaching","activity","portfolio","dom","loops",{"path":105,"title":104,"description":788,"tags":789,"category":94,"featured":692,"updatedAt":690,"createdAt":690,"readingTime":669,"draft":692},"A JavaScript activity where students build a simple product store using arrays, loops, functions, DOM manipulation, and event listeners.",[782,783,771,785,790,786],"arrays",{"path":95,"title":94,"description":792,"tags":793,"category":94,"featured":692,"updatedAt":690,"createdAt":690,"readingTime":722,"draft":692},"In-class activities that get students doing, not just listening.",[],{"path":115,"title":114,"description":795,"tags":796,"category":94,"featured":692,"updatedAt":690,"createdAt":690,"readingTime":672,"draft":692},"Practice reading JavaScript code, predicting its output, and verifying your understanding before running the program.",[782,783,771,797,798,799],"functions","if-statement","debugging",{"path":109,"title":108,"description":801,"tags":802,"category":108,"featured":692,"updatedAt":690,"createdAt":690,"readingTime":722,"draft":692},"Practice problems that build skill through repetition.",[],{"path":125,"title":124,"description":804,"tags":805,"category":118,"featured":692,"updatedAt":690,"createdAt":690,"readingTime":703,"draft":692},"A structured workflow for working with AI that emphasizes planning, review, and understanding before implementation.",[706,697,806],"workflow",{"path":119,"title":118,"description":808,"tags":809,"category":118,"featured":692,"updatedAt":690,"createdAt":690,"readingTime":722,"draft":692},"Prompt templates for teaching with and about AI.",[],{"path":71,"title":70,"description":811,"tags":812,"category":63,"featured":692,"updatedAt":690,"createdAt":690,"readingTime":722,"draft":692},"Lesson plans, activities, rubrics and student references.",[],{"path":64,"title":63,"description":811,"tags":814,"category":63,"featured":692,"updatedAt":690,"createdAt":690,"readingTime":722,"draft":692},[],{"path":136,"title":135,"description":816,"tags":817,"category":128,"featured":692,"updatedAt":690,"createdAt":690,"readingTime":722,"draft":692},"Two tiny functions to control how often a handler runs — with the difference explained.",[771,818,819,820],"performance","snippets","events",{"path":129,"title":128,"description":822,"tags":823,"category":128,"featured":692,"updatedAt":690,"createdAt":690,"readingTime":722,"draft":692},"Small, copy-ready fragments you reach for again and again.",[],{"path":147,"title":146,"description":825,"tags":826,"category":139,"featured":692,"updatedAt":690,"createdAt":690,"readingTime":722,"draft":692},"The essential Vim motions and commands to get productive and get out.",[827,828,760,758],"vim","editor",{"path":140,"title":139,"description":830,"tags":831,"category":139,"featured":692,"updatedAt":690,"createdAt":690,"readingTime":722,"draft":692},"Dense, scannable references for commands and syntax.",[],{"path":158,"title":157,"description":833,"tags":834,"category":150,"featured":692,"updatedAt":690,"createdAt":690,"readingTime":722,"draft":692},"A reusable PR description template that makes reviews faster and kinder.",[757,835,836,837],"github","template","collaboration",{"path":151,"title":150,"description":839,"tags":840,"category":150,"featured":692,"updatedAt":690,"createdAt":690,"readingTime":722,"draft":692},"Reusable starting points for files, configs and docs.",[],{"path":169,"title":168,"description":842,"tags":843,"category":161,"featured":692,"updatedAt":690,"createdAt":690,"readingTime":672,"draft":692},"The frontmatter and markdown conventions every note in this knowledge base follows.",[844,845,846,847],"meta","conventions","markdown","authoring",{"path":173,"title":172,"description":849,"tags":850,"category":161,"featured":692,"updatedAt":690,"createdAt":690,"readingTime":672,"draft":692},"Every formatting feature this knowledge base supports, on one page — a living reference and rendering test.",[846,851,852],"mdc","reference",{"path":162,"title":161,"description":854,"tags":855,"category":161,"featured":692,"updatedAt":690,"createdAt":690,"readingTime":722,"draft":692},"How this knowledge base itself is built and maintained.",[],{"path":184,"title":183,"description":857,"tags":858,"category":176,"featured":692,"updatedAt":690,"createdAt":690,"readingTime":722,"draft":692},"What a CORS error actually means and how to fix it — on the server, where it belongs.",[859,860,861,799],"cors","http","apis",{"path":177,"title":176,"description":863,"tags":864,"category":176,"featured":692,"updatedAt":690,"createdAt":690,"readingTime":722,"draft":692},"Symptoms, causes and fixes for problems worth remembering.",[],1784276796187]