[{"data":1,"prerenderedAt":618},["ShallowReactive",2],{"docs-navigation":3,"doc-\u002Ftroubleshooting\u002Fcors-errors":186,"surround-\u002Ftroubleshooting\u002Fcors-errors":462,"notes-index":466},[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":183,"body":188,"category":176,"createdAt":445,"description":446,"draft":447,"extension":448,"featured":447,"keywords":449,"links":453,"meta":454,"navigation":455,"path":184,"readingTime":262,"seo":456,"stem":185,"tags":457,"updatedAt":445,"__hash__":461},"docs\u002F7.troubleshooting\u002F1.cors-errors.md",{"type":189,"value":190,"toc":438},"minimark",[191,198,206,211,234,238,245,396,400,410,423,427,434],[192,193,194],"blockquote",{},[195,196,197],"p",{},"Access to fetch at '...' has been blocked by CORS policy.",[195,199,200,201,205],{},"The error every web developer meets. The good news: it almost always means your\ncode is ",[202,203,204],"em",{},"working"," — the browser is enforcing a server's rules.",[207,208,210],"h2",{"id":209},"whats-actually-happening","What's actually happening",[212,213,214],"note",{},[195,215,216,217,221,222,226,227,230,231,233],{},"CORS is enforced by the ",[218,219,220],"strong",{},"browser",", not your code. When your page on\n",[223,224,225],"code",{},"site.com"," calls an API on ",[223,228,229],{},"api.other.com",", the browser asks that API whether\n",[223,232,225],{}," is allowed. If the response doesn't say yes, the browser blocks it.",[207,235,237],{"id":236},"the-fix-is-on-the-server","The fix is on the server",[195,239,240,241,244],{},"The API must send an ",[223,242,243],{},"Access-Control-Allow-Origin"," header naming your origin.\nYou cannot fix this from the frontend.",[246,247,248,331,369],"code-group",{},[249,250,256],"pre",{"className":251,"code":252,"filename":253,"language":254,"meta":255,"style":255},"language-js shiki shiki-themes material-theme-lighter vitesse-light vitesse-dark","import cors from 'cors'\napp.use(cors({ origin: 'https:\u002F\u002Fsite.com' }))\n","Express","js","",[223,257,258,285],{"__ignoreMap":255},[259,260,263,267,271,274,278,282],"span",{"class":261,"line":262},"line",1,[259,264,266],{"class":265},"siDh9","import",[259,268,270],{"class":269},"sSC40"," cors",[259,272,273],{"class":265}," from",[259,275,277],{"class":276},"sbYkP"," '",[259,279,281],{"class":280},"sTbE_","cors",[259,283,284],{"class":276},"'\n",[259,286,288,291,295,299,303,305,307,310,314,317,319,322,325,328],{"class":261,"line":287},2,[259,289,290],{"class":269},"app",[259,292,294],{"class":293},"soVBu",".",[259,296,298],{"class":297},"sljsM","use",[259,300,302],{"class":301},"snCua","(",[259,304,281],{"class":297},[259,306,302],{"class":301},[259,308,309],{"class":293},"{",[259,311,313],{"class":312},"suXOh"," origin",[259,315,316],{"class":293},":",[259,318,277],{"class":276},[259,320,321],{"class":280},"https:\u002F\u002Fsite.com",[259,323,324],{"class":276},"'",[259,326,327],{"class":293}," }",[259,329,330],{"class":301},"))\n",[249,332,336],{"className":333,"code":334,"filename":13,"language":335,"meta":255,"style":255},"language-php shiki shiki-themes material-theme-lighter vitesse-light vitesse-dark","\u002F\u002F config\u002Fcors.php\n'allowed_origins' => ['https:\u002F\u002Fsite.com'],\n","php",[223,337,338,344],{"__ignoreMap":255},[259,339,340],{"class":261,"line":262},[259,341,343],{"class":342},"s9Tkl","\u002F\u002F config\u002Fcors.php\n",[259,345,346,348,351,353,357,360,362,364,366],{"class":261,"line":287},[259,347,324],{"class":276},[259,349,350],{"class":280},"allowed_origins",[259,352,324],{"class":276},[259,354,356],{"class":355},"sVsLi"," =>",[259,358,359],{"class":293}," [",[259,361,324],{"class":276},[259,363,321],{"class":280},[259,365,324],{"class":276},[259,367,368],{"class":293},"],\n",[249,370,375],{"className":371,"code":372,"filename":373,"language":374,"meta":255,"style":255},"language-nginx shiki shiki-themes material-theme-lighter vitesse-light vitesse-dark","add_header 'Access-Control-Allow-Origin' 'https:\u002F\u002Fsite.com' always;\n","Nginx","nginx",[223,376,377],{"__ignoreMap":255},[259,378,379,383,386,389,393],{"class":261,"line":262},[259,380,382],{"class":381},"s8XtY","add_header ",[259,384,385],{"class":280},"'Access-Control-Allow-Origin'",[259,387,388],{"class":280}," 'https:\u002F\u002Fsite.com'",[259,390,392],{"class":391},"sftqT"," always",[259,394,395],{"class":293},";\n",[207,397,399],{"id":398},"preflight-requests","Preflight requests",[195,401,402,403,406,407,409],{},"For anything beyond a simple GET\u002FPOST, the browser first sends an ",[223,404,405],{},"OPTIONS","\n\"preflight\" request. If your server doesn't answer ",[223,408,405],{},", the real request\nnever happens.",[411,412,413],"warning",{},[195,414,415,418,419,422],{},[223,416,417],{},"Access-Control-Allow-Origin: *"," works but allows ",[218,420,421],{},"every"," site to call your\nAPI. Fine for a truly public, read-only endpoint — never for anything\nauthenticated.",[207,424,426],{"id":425},"when-you-dont-control-the-api","When you don't control the API",[195,428,429,430,433],{},"If it's a third-party API with no CORS support, proxy it through your own\nbackend. The browser only enforces CORS on requests ",[202,431,432],{},"it"," makes — server-to-server\ncalls are unaffected.",[435,436,437],"style",{},"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 .sSC40, html code.shiki .sSC40{--shiki-light:#90A4AE;--shiki-default:#B07D48;--shiki-dark:#BD976A}html pre.shiki code .sbYkP, html code.shiki .sbYkP{--shiki-light:#39ADB5;--shiki-default:#B5695977;--shiki-dark:#C98A7D77}html pre.shiki code .sTbE_, html code.shiki .sTbE_{--shiki-light:#91B859;--shiki-default:#B56959;--shiki-dark:#C98A7D}html pre.shiki code .soVBu, html code.shiki .soVBu{--shiki-light:#39ADB5;--shiki-default:#999999;--shiki-dark:#666666}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 .suXOh, html code.shiki .suXOh{--shiki-light:#E53935;--shiki-default:#998418;--shiki-dark:#B8A965}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 .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 .sVsLi, html code.shiki .sVsLi{--shiki-light:#39ADB5;--shiki-default:#AB5959;--shiki-dark:#CB7676}html pre.shiki code .s8XtY, html code.shiki .s8XtY{--shiki-light:#39ADB5;--shiki-default:#1E754F;--shiki-dark:#4D9375}html pre.shiki code .sftqT, html code.shiki .sftqT{--shiki-light:#90A4AE;--shiki-default:#393A34;--shiki-dark:#DBD7CAEE}",{"title":255,"searchDepth":439,"depth":439,"links":440},3,[441,442,443,444],{"id":209,"depth":287,"text":210},{"id":236,"depth":287,"text":237},{"id":398,"depth":287,"text":399},{"id":425,"depth":287,"text":426},"2026-07-17","What a CORS error actually means and how to fix it — on the server, where it belongs.",false,"md",[281,450,451,405,452],"access-control-allow-origin","preflight","fetch",[],{},true,{"title":183,"description":446},[281,458,459,460],"http","apis","debugging","T4HPoaymakSZwOLqqwyS-_2CEsJ0AHWujtTNyZtG5lE",[463,465],{"title":176,"path":177,"stem":181,"description":464,"children":-1},"Symptoms, causes and fixes for problems worth remembering.",null,[467,474,480,483,489,492,499,502,505,512,515,518,526,530,535,538,546,550,553,558,561,565,568,571,573,579,582,587,590,596,599,606,611,614,616],{"path":20,"title":19,"description":468,"tags":469,"category":13,"featured":447,"updatedAt":445,"createdAt":445,"readingTime":262,"draft":447},"The core Eloquent relationship types with examples and the N+1 trap to avoid.",[470,471,472,473],"laravel","eloquent","database","orm",{"path":24,"title":23,"description":475,"tags":476,"category":13,"featured":447,"updatedAt":445,"createdAt":445,"readingTime":262,"draft":447},"My quick reference for setting up and using Laravel Homestead during development.",[470,477,478,479],"homestead","vagrant","virtualbox",{"path":14,"title":13,"description":481,"tags":482,"category":13,"featured":447,"updatedAt":445,"createdAt":445,"readingTime":262,"draft":447},"The PHP framework for web artisans — Eloquent, routing, queues and more.",[],{"path":34,"title":33,"description":484,"tags":485,"category":27,"featured":447,"updatedAt":445,"createdAt":445,"readingTime":287,"draft":447},"Personal Bash aliases and helper functions that streamline my Laravel and Homestead development workflow.",[486,487,488,477,470],"bash","bashrc","git bash",{"path":28,"title":27,"description":490,"tags":491,"category":27,"featured":447,"updatedAt":445,"createdAt":445,"readingTime":262,"draft":447},"Shell scripting and a faster life on the command line.",[],{"path":44,"title":43,"description":493,"tags":494,"category":37,"featured":455,"updatedAt":445,"createdAt":445,"readingTime":262,"draft":447},"Practical rules for naming variables, functions and types so code reads like prose.",[495,496,497,498],"clean-code","naming","readability","craft",{"path":38,"title":37,"description":500,"tags":501,"category":37,"featured":447,"updatedAt":445,"createdAt":445,"readingTime":262,"draft":447},"Writing code that other people (and future you) can read.",[],{"path":48,"title":47,"description":503,"tags":504,"category":47,"featured":447,"updatedAt":445,"createdAt":445,"readingTime":262,"draft":447},"Getting reliable, useful results out of language models.",[],{"path":60,"title":59,"description":506,"tags":507,"category":53,"featured":455,"updatedAt":445,"createdAt":445,"readingTime":287,"draft":447},"The Git commands I actually use day to day, plus how to undo things safely.",[508,509,510,511],"git","cli","version-control","cheat-sheet",{"path":54,"title":53,"description":513,"tags":514,"category":53,"featured":447,"updatedAt":445,"createdAt":445,"readingTime":262,"draft":447},"Version control — everyday commands and getting out of trouble.",[],{"path":6,"title":10,"description":516,"tags":517,"category":10,"featured":447,"updatedAt":445,"createdAt":445,"readingTime":262,"draft":447},"Languages, frameworks and the craft of building software.",[],{"path":83,"title":82,"description":519,"tags":520,"category":63,"featured":447,"updatedAt":445,"createdAt":445,"readingTime":525,"draft":447},"An introduction to AI-assisted software development, modern development workflows, and the mindset needed to use AI responsibly throughout the course.",[521,522,523,524],"ai","software development","prompt engineering","beginners",4,{"path":87,"title":86,"description":527,"tags":528,"category":63,"featured":447,"updatedAt":445,"createdAt":445,"readingTime":525,"draft":447},"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.",[521,529,523,524],"javascript",{"path":91,"title":90,"description":531,"tags":532,"category":63,"featured":447,"updatedAt":445,"createdAt":445,"readingTime":439,"draft":447},"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.",[529,524,533,534],"programming","web development",{"path":77,"title":76,"description":536,"tags":537,"category":76,"featured":447,"updatedAt":445,"createdAt":445,"readingTime":262,"draft":447},"Session-by-session plans with objectives, timing and materials.",[],{"path":101,"title":100,"description":539,"tags":540,"category":94,"featured":447,"updatedAt":445,"createdAt":445,"readingTime":439,"draft":447},"Build a personal portfolio website using JavaScript arrays, loops, and DOM manipulation instead of hardcoded HTML.",[541,542,529,543,544,545],"teaching","activity","portfolio","dom","loops",{"path":105,"title":104,"description":547,"tags":548,"category":94,"featured":447,"updatedAt":445,"createdAt":445,"readingTime":439,"draft":447},"A JavaScript activity where students build a simple product store using arrays, loops, functions, DOM manipulation, and event listeners.",[541,542,529,544,549,545],"arrays",{"path":95,"title":94,"description":551,"tags":552,"category":94,"featured":447,"updatedAt":445,"createdAt":445,"readingTime":262,"draft":447},"In-class activities that get students doing, not just listening.",[],{"path":115,"title":114,"description":554,"tags":555,"category":94,"featured":447,"updatedAt":445,"createdAt":445,"readingTime":287,"draft":447},"Practice reading JavaScript code, predicting its output, and verifying your understanding before running the program.",[541,542,529,556,557,460],"functions","if-statement",{"path":109,"title":108,"description":559,"tags":560,"category":108,"featured":447,"updatedAt":445,"createdAt":445,"readingTime":262,"draft":447},"Practice problems that build skill through repetition.",[],{"path":125,"title":124,"description":562,"tags":563,"category":118,"featured":447,"updatedAt":445,"createdAt":445,"readingTime":525,"draft":447},"A structured workflow for working with AI that emphasizes planning, review, and understanding before implementation.",[521,523,564],"workflow",{"path":119,"title":118,"description":566,"tags":567,"category":118,"featured":447,"updatedAt":445,"createdAt":445,"readingTime":262,"draft":447},"Prompt templates for teaching with and about AI.",[],{"path":71,"title":70,"description":569,"tags":570,"category":63,"featured":447,"updatedAt":445,"createdAt":445,"readingTime":262,"draft":447},"Lesson plans, activities, rubrics and student references.",[],{"path":64,"title":63,"description":569,"tags":572,"category":63,"featured":447,"updatedAt":445,"createdAt":445,"readingTime":262,"draft":447},[],{"path":136,"title":135,"description":574,"tags":575,"category":128,"featured":447,"updatedAt":445,"createdAt":445,"readingTime":262,"draft":447},"Two tiny functions to control how often a handler runs — with the difference explained.",[529,576,577,578],"performance","snippets","events",{"path":129,"title":128,"description":580,"tags":581,"category":128,"featured":447,"updatedAt":445,"createdAt":445,"readingTime":262,"draft":447},"Small, copy-ready fragments you reach for again and again.",[],{"path":147,"title":146,"description":583,"tags":584,"category":139,"featured":447,"updatedAt":445,"createdAt":445,"readingTime":262,"draft":447},"The essential Vim motions and commands to get productive and get out.",[585,586,511,509],"vim","editor",{"path":140,"title":139,"description":588,"tags":589,"category":139,"featured":447,"updatedAt":445,"createdAt":445,"readingTime":262,"draft":447},"Dense, scannable references for commands and syntax.",[],{"path":158,"title":157,"description":591,"tags":592,"category":150,"featured":447,"updatedAt":445,"createdAt":445,"readingTime":262,"draft":447},"A reusable PR description template that makes reviews faster and kinder.",[508,593,594,595],"github","template","collaboration",{"path":151,"title":150,"description":597,"tags":598,"category":150,"featured":447,"updatedAt":445,"createdAt":445,"readingTime":262,"draft":447},"Reusable starting points for files, configs and docs.",[],{"path":169,"title":168,"description":600,"tags":601,"category":161,"featured":447,"updatedAt":445,"createdAt":445,"readingTime":287,"draft":447},"The frontmatter and markdown conventions every note in this knowledge base follows.",[602,603,604,605],"meta","conventions","markdown","authoring",{"path":173,"title":172,"description":607,"tags":608,"category":161,"featured":447,"updatedAt":445,"createdAt":445,"readingTime":287,"draft":447},"Every formatting feature this knowledge base supports, on one page — a living reference and rendering test.",[604,609,610],"mdc","reference",{"path":162,"title":161,"description":612,"tags":613,"category":161,"featured":447,"updatedAt":445,"createdAt":445,"readingTime":262,"draft":447},"How this knowledge base itself is built and maintained.",[],{"path":184,"title":183,"description":446,"tags":615,"category":176,"featured":447,"updatedAt":445,"createdAt":445,"readingTime":262,"draft":447},[281,458,459,460],{"path":177,"title":176,"description":464,"tags":617,"category":176,"featured":447,"updatedAt":445,"createdAt":445,"readingTime":262,"draft":447},[],1784276796739]