🎯

write-concept

🎯Skill

from leonardomso/33-js-concepts

VibeIndex|
What it does

Writes high-quality, beginner-friendly JavaScript concept documentation with a conversational tone, focusing on clarity and practical understanding.

write-concept

Installation

Install skill:
npx skills add https://github.com/leonardomso/33-js-concepts --skill write-concept
69
Last UpdatedJan 23, 2026

Skill Details

SKILL.md

Write or review JavaScript concept documentation pages for the 33 JavaScript Concepts project, following strict structure and quality guidelines

Overview

# Skill: Write JavaScript Concept Documentation

Use this skill when writing or improving concept documentation pages for the 33 JavaScript Concepts project.

When to Use

  • Creating a new concept page in /docs/concepts/
  • Rewriting or significantly improving an existing concept page
  • Reviewing an existing concept page for quality and completeness
  • Adding explanatory content to a concept

Target Audience

Remember: the reader might be someone who has never coded before or is just learning JavaScript. Write with empathy for beginners while still providing depth for intermediate developers. Make complex topics feel approachable and never assume prior knowledge without linking to prerequisites.

Writing Guidelines

Voice and Tone

  • Conversational but authoritative: Write like you're explaining to a smart friend
  • Encouraging: Make complex topics feel approachable
  • Practical: Focus on real-world applications and use cases
  • Concise: Respect the reader's time; avoid unnecessary verbosity
  • Question-driven: Open sections with questions the reader might have

Avoiding AI-Generated Language

Your writing must sound human, not AI-generated. Here are specific patterns to avoid:

#### Words and Phrases to Avoid

| ❌ Avoid | βœ“ Use Instead |

|----------|---------------|

| "Master [concept]" | "Learn [concept]" |

| "dramatically easier/better" | "much easier" or "cleaner" |

| "one fundamental thing" | "one simple thing" |

| "one of the most important concepts" | "This is a big one" |

| "essential points" | "key things to remember" |

| "understanding X deeply improves" | "knowing X well makes Y easier" |

| "To truly understand" | "Let's look at" or "Here's how" |

| "This is crucial" | "This trips people up" |

| "It's worth noting that" | Just state the thing directly |

| "It's important to remember" | "Don't forget:" or "Remember:" |

| "In order to" | "To" |

| "Due to the fact that" | "Because" |

| "At the end of the day" | Remove entirely |

| "When it comes to" | Remove or rephrase |

| "In this section, we will" | Just start explaining |

| "As mentioned earlier" | Remove or link to the section |

#### Repetitive Emphasis Patterns

Don't use the same lead-in pattern repeatedly. Vary your emphasis:

| Instead of repeating... | Vary with... |

|------------------------|--------------|

| "Key insight:" | "Don't forget:", "The pattern:", "Here's the thing:" |

| "Best practice:" | "Pro tip:", "Quick check:", "A good habit:" |

| "Important:" | "Watch out:", "Heads up:", "Note:" |

| "Remember:" | "Keep in mind:", "The rule:", "Think of it this way:" |

#### Em Dash (β€”) Overuse

AI-generated text overuses em dashes. Limit their use and prefer periods, commas, or colons:

| ❌ Em Dash Overuse | βœ“ Better Alternative |

|-------------------|---------------------|

| "async/await β€” syntactic sugar that..." | "async/await. It's syntactic sugar that..." |

| "understand Promises β€” async/await is built..." | "understand Promises. async/await is built..." |

| "doesn't throw an error β€” you just get..." | "doesn't throw an error. You just get..." |

| "outside of async functions β€” but only in..." | "outside of async functions, but only in..." |

| "Fails fast β€” if any Promise rejects..." | "Fails fast. If any Promise rejects..." |

| "achieve the same thing β€” the choice..." | "achieve the same thing. The choice..." |

When em dashes ARE acceptable:

  • In Key Takeaways section (consistent formatting for the numbered list)
  • In MDN card titles (e.g., "async function β€” MDN")
  • In interview answer step-by-step explanations (structured formatting)
  • Sparingly when a true parenthetical aside reads naturally

Rule of thumb: If you have more than 10-15 em dashes in a 1500-word document outside of structured sections, you're overusing them. After writing, search for "β€”" and evaluate each one.

#### Superlatives and Filler Words

Avoid vague superlatives that add no information:

| ❌ Avoid | βœ“ Use Instead |

|----------|---------------|

| "dramatically" | "much" or remove entirely |

| "fundamentally" | "simply" or be specific about what's fundamental |

| "incredibly" | remove or be specific |

| "extremely" | remove or be specific |

| "absolutely" | remove |

| "basically" | remove (if you need it, you're not explaining clearly) |

| "essentially" | remove or just explain directly |

| "very" | remove or use a stronger word |

| "really" | remove |

| "actually" | remove (unless correcting a misconception) |

| "In fact" | remove (just state the fact) |

| "Interestingly" | remove (let the reader decide if it's interesting) |

#### Stiff/Formal Phrases

Replace formal academic-style phrases with conversational alternatives:

| ❌ Stiff | βœ“ Conversational |

|---------|------------------|

| "It should be noted that" | "Note that" or just state it |

| "One might wonder" | "You might wonder" |

| "This enables developers to" | "This lets you" |

| "The aforementioned" | "this" or name it again |

| "Subsequently" | "Then" or "Next" |

| "Utilize" | "Use" |

| "Commence" | "Start" |

| "Prior to" | "Before" |

| "In the event that" | "If" |

| "A considerable amount of" | "A lot of" or "Many" |

#### Playful Touches (Use Sparingly)

Add occasional human touches to make the content feel less robotic, but don't overdo it:

```javascript

// βœ“ Good: One playful comment per section

// Callback hell - nested so deep you need a flashlight

// βœ“ Good: Conversational aside

// forEach and async don't play well together β€” it just fires and forgets:

// βœ“ Good: Relatable frustration

// Finally, error handling that doesn't make you want to flip a table.

// ❌ Bad: Trying too hard

// Callback hell - it's like a Russian nesting doll had a baby with a spaghetti monster! 🍝

// ❌ Bad: Forced humor

// Let's dive into the AMAZING world of Promises! πŸŽ‰πŸš€

```

Guidelines:

  • One or two playful touches per major section is enough
  • Humor should arise naturally from the content
  • Avoid emojis in body text (they're fine in comments occasionally)
  • Don't explain your jokes
  • If a playful line doesn't work, just be direct instead

Page Structure (Follow This Exactly)

Every concept page MUST follow this structure in this exact order:

```mdx

---

title: "Concept Name: [Hook] in JavaScript"

sidebarTitle: "Concept Name: [Hook]"

description: "SEO-friendly description in 150-160 characters starting with action word"

---

[Opening hook - Start with engaging questions that make the reader curious]

[Example: "How does JavaScript get data from a server? How do you load user profiles, submit forms, or fetch the latest posts from an API?"]

[Immediately show a simple code example demonstrating the concept]

```javascript

// This is how you [do the thing] in JavaScript

const example = doSomething()

console.log(example) // Expected output

```

[Brief explanation connecting to what they'll learn, with [inline MDN links](https://developer.mozilla.org/...) for key terms]

What you'll learn in this guide:

  • Key learning outcome 1
  • Key learning outcome 2
  • Key learning outcome 3
  • Key learning outcome 4 (aim for 5-7 items)

[Optional: Prerequisites or important notices - place AFTER Info box]

Prerequisite: This guide assumes you understand [Related Concept](/concepts/related-concept). If you're not comfortable with that yet, read that guide first!

---

[First Major Section - e.g., "What is X?"]

[Core explanation with inline MDN links for any new terms/APIs introduced]

[Optional: CardGroup with MDN reference links for this section]

---

[Analogy Section - e.g., "The Restaurant Analogy"]

[Relatable real-world analogy that makes the concept click]

[ASCII art diagram visualizing the concept]

```

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”

β”‚ DIAGRAM TITLE β”‚

β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€

β”‚ β”‚

β”‚ [Visual representation of the concept] β”‚

β”‚ β”‚

β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

```

---

[Core Concepts Section]

[Deep dive with code examples, tables, and Mintlify components]

Explanation of the first step

Explanation of the second step

Detailed explanation with code examples

Detailed explanation with code examples

Quick Rule of Thumb: [Memorable summary or mnemonic]

---

[The API/Implementation Section]

[How to actually use the concept in code]

Basic Usage

```javascript

// Basic example with step-by-step comments

// Step 1: Do this

const step1 = something()

// Step 2: Then this

const step2 = somethingElse(step1)

// Step 3: Finally

console.log(step2) // Expected output

```

[Advanced Pattern]

```javascript

// More complex real-world example

```

---

[Common Mistakes Section - e.g., "The #1 Fetch Mistake"]

[Highlight the most common mistake developers make]

```

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”

β”‚ VISUAL COMPARISON β”‚

β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€

β”‚ β”‚

β”‚ WRONG WAY RIGHT WAY β”‚

β”‚ ───────── ───────── β”‚

β”‚ β€’ Problem 1 β€’ Solution 1 β”‚

β”‚ β€’ Problem 2 β€’ Solution 2 β”‚

β”‚ β”‚

β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

```

```javascript

// ❌ WRONG - Explanation of why this is wrong

const bad = wrongApproach()

// βœ“ CORRECT - Explanation of the right way

const good = correctApproach()

```

The Trap: [Clear explanation of what goes wrong and why]

---

[Advanced Patterns Section]

[Real-world patterns and best practices]

Pattern Name

```javascript

// Reusable pattern with practical application

async function realWorldExample() {

// Implementation

}

// Usage

const result = await realWorldExample()

```

---

Key Takeaways

The key things to remember:

  1. First key point β€” Brief explanation
  1. Second key point β€” Brief explanation
  1. Third key point β€” Brief explanation
  1. Fourth key point β€” Brief explanation
  1. Fifth key point β€” Brief explanation

[Aim for 8-10 key takeaways that summarize everything]

---

Test Your Knowledge

Answer:

[Clear explanation]

```javascript

// Code example demonstrating the answer

```

Answer:

[Clear explanation with code if needed]

[Aim for 5-6 questions covering the main topics]

---

Related Concepts

How it connects to this concept

How it connects to this concept

---

Reference

Official MDN documentation for the main concept

Additional MDN reference

Articles

Brief description of what the reader will learn from this article.

[Aim for 4-6 high-quality articles]

Videos

Brief description of what the video covers.

[Aim for 3-4 quality videos]

```

---

SEO Guidelines

SEO (Search Engine Optimization) is critical for this project. Each concept page should rank for the various ways developers search for that concept. Our goal is to appear in search results for queries like:

  • "what is [concept] in JavaScript"
  • "how does [concept] work in JavaScript"
  • "[concept] JavaScript explained"
  • "[concept] JavaScript tutorial"
  • "JavaScript [concept] example"

Every writing decision β€” from title to structure to word choice β€” should consider search intent.

---

Target Keywords for Each Concept

Each concept page targets a keyword cluster β€” the family of related search queries. Before writing, identify these for your concept:

| Keyword Type | Pattern | Example (DOM) |

|--------------|---------|---------------|

| Primary | [concept] + JavaScript | "DOM JavaScript", "JavaScript DOM" |

| What is | what is [concept] in JavaScript | "what is the DOM in JavaScript" |

| How does | how does [concept] work | "how does the DOM work in JavaScript" |

| How to | how to [action] with [concept] | "how to manipulate the DOM" |

| Tutorial | [concept] tutorial/guide/explained | "DOM tutorial JavaScript" |

| Comparison | [concept] vs [related] | "DOM vs virtual DOM" |

More Keyword Cluster Examples:

| Type | Keywords |

|------|----------|

| Primary | "JavaScript closures", "closures in JavaScript" |

| What is | "what is a closure in JavaScript", "what are closures" |

| How does | "how do closures work in JavaScript", "how closures work" |

| Why use | "why use closures JavaScript", "closure use cases" |

| Example | "JavaScript closure example", "closure examples" |

| Interview | "closure interview questions JavaScript" |

| Type | Keywords |

|------|----------|

| Primary | "JavaScript Promises", "Promises in JavaScript" |

| What is | "what is a Promise in JavaScript", "what are Promises" |

| How does | "how do Promises work", "how Promises work JavaScript" |

| How to | "how to use Promises", "how to chain Promises" |

| Comparison | "Promises vs callbacks", "Promises vs async await" |

| Error | "Promise error handling", "Promise catch" |

| Type | Keywords |

|------|----------|

| Primary | "JavaScript event loop", "event loop JavaScript" |

| What is | "what is the event loop in JavaScript" |

| How does | "how does the event loop work", "how event loop works" |

| Visual | "event loop explained", "event loop visualization" |

| Related | "call stack and event loop", "task queue JavaScript" |

| Type | Keywords |

|------|----------|

| Primary | "JavaScript call stack", "call stack JavaScript" |

| What is | "what is the call stack in JavaScript" |

| How does | "how does the call stack work" |

| Error | "call stack overflow JavaScript", "maximum call stack size exceeded" |

| Visual | "call stack explained", "call stack visualization" |

---

Title Tag Optimization

The frontmatter has two title fields:

  • title β€” The page's </code> tag (SEO, appears in search results)</span></li><li class="text-zinc-600 dark:text-zinc-400"><span><code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">sidebarTitle</code> β€” The sidebar navigation text (cleaner, no "JavaScript" since we're on a JS site)</span></li></ul><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span><strong>The Two-Title Pattern:</strong></span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>```mdx</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>---</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>title: "Closures: How Functions Remember Their Scope in JavaScript"</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>sidebarTitle: "Closures: How Functions Remember Their Scope"</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>---</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>```</span></p><ul class="mb-4 ml-6 space-y-1 list-disc"><li class="text-zinc-600 dark:text-zinc-400"><span><strong><code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">title</code></strong> ends with "in JavaScript" for SEO keyword placement</span></li><li class="text-zinc-600 dark:text-zinc-400"><span><strong><code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">sidebarTitle</code></strong> omits "JavaScript" for cleaner navigation</span></li></ul><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span><strong>Rules:</strong></span></p><ol class="mb-4 ml-6 space-y-1 list-decimal"><li class="text-zinc-600 dark:text-zinc-400"><span><strong>50-60 characters</strong> ideal length for <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">title</code> (Google truncates longer titles)</span></li><li class="text-zinc-600 dark:text-zinc-400"><span><strong>Concept name first</strong> β€” lead with the topic, "JavaScript" comes at the end</span></li><li class="text-zinc-600 dark:text-zinc-400"><span><strong>Add a hook</strong> β€” what will the reader understand or be able to do?</span></li><li class="text-zinc-600 dark:text-zinc-400"><span><strong>Be specific</strong> β€” generic titles don't rank</span></li></ol><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span><strong>Title Formulas That Work:</strong></span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>```</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>title: "[Concept]: [What You'll Understand] in JavaScript"</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>sidebarTitle: "[Concept]: [What You'll Understand]"</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>title: "[Concept]: [Benefit or Outcome] in JavaScript"</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>sidebarTitle: "[Concept]: [Benefit or Outcome]"</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>```</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span><strong>Title Examples:</strong></span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| ❌ Bad | βœ“ title (SEO) | βœ“ sidebarTitle (Navigation) |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>|--------|---------------|----------------------------|</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">"Closures"</code> | <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">"Closures: How Functions Remember Their Scope in JavaScript"</code> | <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">"Closures: How Functions Remember Their Scope"</code> |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">"DOM"</code> | <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">"DOM: How Browsers Represent Web Pages in JavaScript"</code> | <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">"DOM: How Browsers Represent Web Pages"</code> |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">"Promises"</code> | <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">"Promises: Handling Async Operations in JavaScript"</code> | <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">"Promises: Handling Async Operations"</code> |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">"Call Stack"</code> | <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">"Call Stack: How Function Execution Works in JavaScript"</code> | <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">"Call Stack: How Function Execution Works"</code> |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">"Event Loop"</code> | <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">"Event Loop: How Async Code Actually Runs in JavaScript"</code> | <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">"Event Loop: How Async Code Actually Runs"</code> |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">"Scope"</code> | <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">"Scope and Closures: Variable Visibility in JavaScript"</code> | <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">"Scope and Closures: Variable Visibility"</code> |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">"this"</code> | <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">"this: How Context Binding Works in JavaScript"</code> | <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">"this: How Context Binding Works"</code> |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">"Prototype"</code> | <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">"Prototype Chain: Understanding Inheritance in JavaScript"</code> | <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">"Prototype Chain: Understanding Inheritance"</code> |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span><strong>Character Count Check:</strong></span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>Before finalizing, verify your <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">title</code> length:</span></p><ul class="mb-4 ml-6 space-y-1 list-disc"><li class="text-zinc-600 dark:text-zinc-400"><span>Under 50 chars: Consider adding more descriptive context</span></li><li class="text-zinc-600 dark:text-zinc-400"><span>50-60 chars: Perfect length</span></li><li class="text-zinc-600 dark:text-zinc-400"><span>Over 60 chars: Will be truncated in search results β€” shorten it</span></li></ul><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>---</span></p><h4 class="mb-2 mt-4 font-semibold text-zinc-800 dark:text-zinc-200">Meta Description Optimization</h4><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>The <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">description</code> field becomes the meta description β€” <strong>the snippet users see in search results</strong>. A compelling description increases click-through rate.</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span><strong>Rules:</strong></span></p><ol class="mb-4 ml-6 space-y-1 list-decimal"><li class="text-zinc-600 dark:text-zinc-400"><span><strong>150-160 characters</strong> maximum (Google truncates longer descriptions)</span></li><li class="text-zinc-600 dark:text-zinc-400"><span><strong>Include primary keyword</strong> in the first half</span></li><li class="text-zinc-600 dark:text-zinc-400"><span><strong>Include secondary keywords</strong> naturally if space allows</span></li><li class="text-zinc-600 dark:text-zinc-400"><span><strong>Start with an action word</strong> β€” "Learn", "Understand", "Discover" (avoid "Master" β€” sounds AI-generated)</span></li><li class="text-zinc-600 dark:text-zinc-400"><span><strong>Promise specific value</strong> β€” what will they learn?</span></li><li class="text-zinc-600 dark:text-zinc-400"><span><strong>End with a hook</strong> β€” give them a reason to click</span></li></ol><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span><strong>Description Formula:</strong></span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>```</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>[Action word] [what the concept is] in JavaScript. [Specific things they'll learn]: [topic 1], [topic 2], and [topic 3].</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>```</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span><strong>Description Examples:</strong></span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| Concept | ❌ Too Short (Low CTR) | βœ“ SEO-Optimized (150-160 chars) |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>|---------|----------------------|--------------------------------|</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| DOM | <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">"Understanding the DOM"</code> | <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">"Learn how the DOM works in JavaScript. Understand how browsers represent HTML as a tree, select and manipulate elements, traverse nodes, and optimize rendering."</code> |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| Closures | <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">"Functions that remember"</code> | <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">"Learn JavaScript closures and how functions remember their scope. Covers lexical scoping, practical use cases, memory considerations, and common closure patterns."</code> |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| Promises | <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">"Async JavaScript"</code> | <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">"Understand JavaScript Promises for handling asynchronous operations. Learn to create, chain, and combine Promises, handle errors properly, and write cleaner async code."</code> |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| Event Loop | <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">"How async works"</code> | <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">"Discover how the JavaScript event loop manages async code execution. Understand the call stack, task queue, microtasks, and why JavaScript is single-threaded but non-blocking."</code> |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| Call Stack | <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">"Function execution"</code> | <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">"Learn how the JavaScript call stack tracks function execution. Understand stack frames, execution context, stack overflow errors, and how recursion affects the stack."</code> |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| this | <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">"Understanding this"</code> | <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">"Learn the 'this' keyword in JavaScript and how context binding works. Covers the four binding rules, arrow function behavior, and how to use call, apply, and bind."</code> |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span><strong>Character Count Check:</strong></span></p><ul class="mb-4 ml-6 space-y-1 list-disc"><li class="text-zinc-600 dark:text-zinc-400"><span>Under 120 chars: You're leaving value on the table β€” add more specifics</span></li><li class="text-zinc-600 dark:text-zinc-400"><span>150-160 chars: Optimal length</span></li><li class="text-zinc-600 dark:text-zinc-400"><span>Over 160 chars: Will be truncated β€” edit ruthlessly</span></li></ul><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>---</span></p><h4 class="mb-2 mt-4 font-semibold text-zinc-800 dark:text-zinc-200">Keyword Placement Strategy</h4><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>Keywords must appear in strategic locations β€” but <strong>always naturally</strong>. Keyword stuffing hurts rankings.</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span><strong>Priority Placement Locations:</strong></span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| Priority | Location | How to Include |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>|----------|----------|----------------|</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| πŸ”΄ Critical | Title | Primary keyword in first half |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| πŸ”΄ Critical | Meta description | Primary keyword + 1-2 secondary |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| πŸ”΄ Critical | First paragraph | Natural mention within first 100 words |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| 🟠 High | H2 headings | Question-format headings with keywords |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| 🟠 High | "What you'll learn" box | Topic-related phrases |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| 🟑 Medium | H3 subheadings | Related keywords and concepts |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| 🟑 Medium | Key Takeaways | Reinforce main keywords naturally |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| 🟒 Good | Alt text | If using images, include keywords |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span><strong>Example: Keyword Placement for DOM Page</strong></span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>```mdx</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>---</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>title: "DOM: How Browsers Represent Web Pages in JavaScript" ← πŸ”΄ Primary: "in JavaScript" at end</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>sidebarTitle: "DOM: How Browsers Represent Web Pages" ← Sidebar: no "JavaScript"</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>description: "Learn how the DOM works in JavaScript. Understand ← πŸ”΄ Primary: "DOM works in JavaScript"</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>how browsers represent HTML as a tree, select and manipulate ← πŸ”΄ Secondary: "manipulate elements"</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>elements, traverse nodes, and optimize rendering."</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>---</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>How does JavaScript change what you see on a webpage? ← Hook question</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>The <strong>Document Object Model (DOM)</strong> is a programming interface ← πŸ”΄ Primary keyword in first paragraph</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>for web documents. It represents your HTML as a **tree of </span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>objects** that JavaScript can read and manipulate.</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span><Info></span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span><strong>What you'll learn in this guide:</strong> ← 🟠 Topic reinforcement</span></p><ul class="mb-4 ml-6 space-y-1 list-disc"><li class="text-zinc-600 dark:text-zinc-400"><span>What the DOM actually is</span></li><li class="text-zinc-600 dark:text-zinc-400"><span>How to select elements (getElementById vs querySelector) ← Secondary keywords</span></li><li class="text-zinc-600 dark:text-zinc-400"><span>How to traverse the DOM tree</span></li><li class="text-zinc-600 dark:text-zinc-400"><span>How to create, modify, and remove elements ← "DOM" implicit</span></li><li class="text-zinc-600 dark:text-zinc-400"><span>How browsers render the DOM (Critical Rendering Path)</span></li></ul><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span></Info></span></p></div></div><div class="mt-6 border-t border-zinc-100 pt-6 dark:border-zinc-800"><h3 class="mb-3 text-lg font-semibold text-zinc-900 dark:text-white">What is the DOM in JavaScript? ← 🟠 H2 with question keyword</h3><div><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>The DOM (Document Object Model) is... ← Natural repetition</span></p></div></div><div class="mt-6 border-t border-zinc-100 pt-6 dark:border-zinc-800"><h3 class="mb-3 text-lg font-semibold text-zinc-900 dark:text-white">Key Takeaways ← 🟑 Reinforce in summary</h3><div><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>```</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span><strong>Warning Signs of Keyword Stuffing:</strong></span></p><ul class="mb-4 ml-6 space-y-1 list-disc"><li class="text-zinc-600 dark:text-zinc-400"><span>Same exact phrase appears more than 3-4 times per 1000 words</span></li><li class="text-zinc-600 dark:text-zinc-400"><span>Sentences read awkwardly because keywords were forced in</span></li><li class="text-zinc-600 dark:text-zinc-400"><span>Using keywords where pronouns ("it", "they", "this") would be natural</span></li></ul><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>---</span></p><h4 class="mb-2 mt-4 font-semibold text-zinc-800 dark:text-zinc-200">Answering Search Intent</h4><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>Google ranks pages that <strong>directly answer the user's query</strong>. Structure your content to satisfy search intent immediately.</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span><strong>The First Paragraph Rule:</strong></span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>The first paragraph after any H2 should directly answer the implied question. Don't build up to the answer β€” lead with it.</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>```mdx</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span><!-- ❌ BAD: Builds up to the answer --></span></p></div></div><div class="mt-6 border-t border-zinc-100 pt-6 dark:border-zinc-800"><h3 class="mb-3 text-lg font-semibold text-zinc-900 dark:text-white">What is the Event Loop?</h3><div><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>Before we can understand the event loop, we need to talk about JavaScript's </span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>single-threaded nature. You see, JavaScript can only do one thing at a time, </span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>and this creates some interesting challenges. The way JavaScript handles </span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>this is through something called... the event loop.</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span><!-- βœ“ GOOD: Answers immediately --></span></p></div></div><div class="mt-6 border-t border-zinc-100 pt-6 dark:border-zinc-800"><h3 class="mb-3 text-lg font-semibold text-zinc-900 dark:text-white">What is the Event Loop?</h3><div><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>The <strong>event loop</strong> is JavaScript's mechanism for executing code, handling events, </span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>and managing asynchronous operations. It continuously monitors the call stack </span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>and task queue, moving queued callbacks to the stack when it's empty β€” this is </span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>how JavaScript handles async code despite being single-threaded.</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>```</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span><strong>Question-Format H2 Headings:</strong></span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>Use H2s that match how people search:</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| Search Query | H2 to Use |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>|--------------|-----------|</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| "what is the DOM" | <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">## What is the DOM?</code> |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| "how closures work" | <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">## How Do Closures Work?</code> |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| "why use promises" | <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">## Why Use Promises?</code> |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| "when to use async await" | <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">## When Should You Use async/await?</code> |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>---</span></p><h4 class="mb-2 mt-4 font-semibold text-zinc-800 dark:text-zinc-200">Featured Snippet Optimization</h4><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>Featured snippets appear at <strong>position zero</strong> β€” above all organic results. Structure your content to win them.</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span><strong>Snippet Types and How to Win Them:</strong></span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>```</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>β”‚ FEATURED SNIPPET TYPES β”‚</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>β”‚ β”‚</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>β”‚ QUERY TYPE SNIPPET FORMAT YOUR CONTENT STRUCTURE β”‚</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>β”‚ ─────────── ────────────── ───────────────────────── β”‚</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>β”‚ β”‚</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>β”‚ "What is X" Paragraph 40-60 word definition β”‚</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>β”‚ immediately after H2 β”‚</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>β”‚ β”‚</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>β”‚ "How to X" Numbered list <Steps> component or β”‚</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>β”‚ numbered Markdown list β”‚</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>β”‚ β”‚</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>β”‚ "X vs Y" Table Comparison table with β”‚</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>β”‚ clear column headers β”‚</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>β”‚ β”‚</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>β”‚ "Types of X" Bulleted list Bullet list under β”‚</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>β”‚ descriptive H2 β”‚</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>β”‚ β”‚</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>β”‚ "[X] examples" Bulleted list or Code examples with β”‚</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>β”‚ code block brief explanations β”‚</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>β”‚ β”‚</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>```</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span><strong>Pattern 1: Definition Snippet (40-60 words)</strong></span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>For "what is [concept]" queries:</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>```mdx</span></p></div></div><div class="mt-6 border-t border-zinc-100 pt-6 dark:border-zinc-800"><h3 class="mb-3 text-lg font-semibold text-zinc-900 dark:text-white">What is a Closure in JavaScript?</h3><div><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>A <strong>closure</strong> is a function that retains access to variables from its outer </span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>(enclosing) scope, even after that outer function has finished executing. </span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>Closures are created every time a function is created in JavaScript, allowing </span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>inner functions to "remember" and access their lexical environment.</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>```</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span><strong>Why this wins:</strong></span></p><ul class="mb-4 ml-6 space-y-1 list-disc"><li class="text-zinc-600 dark:text-zinc-400"><span>H2 matches search query exactly</span></li><li class="text-zinc-600 dark:text-zinc-400"><span>Bold keyword in first sentence</span></li><li class="text-zinc-600 dark:text-zinc-400"><span>40-60 word complete definition</span></li><li class="text-zinc-600 dark:text-zinc-400"><span>Explains the "why" not just the "what"</span></li></ul><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span><strong>Pattern 2: List Snippet (Steps)</strong></span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>For "how to [action]" queries:</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>```mdx</span></p></div></div><div class="mt-6 border-t border-zinc-100 pt-6 dark:border-zinc-800"><h3 class="mb-3 text-lg font-semibold text-zinc-900 dark:text-white">How to Make a Fetch Request in JavaScript</h3><div><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span><Steps></span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> <Step title="1. Call fetch() with the URL"></span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> The <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">fetch()</code> function takes a URL and returns a Promise that resolves to a Response object.</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> </Step></span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> <Step title="2. Check if the response was successful"></span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> Always verify <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">response.ok</code> before processing β€” fetch doesn't throw on HTTP errors.</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> </Step></span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> <Step title="3. Parse the response body"></span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> Use <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">response.json()</code> for JSON data, <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">response.text()</code> for plain text.</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> </Step></span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> <Step title="4. Handle errors properly"></span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> Wrap everything in try/catch to handle both network and HTTP errors.</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> </Step></span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span></Steps></span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>```</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span><strong>Pattern 3: Table Snippet (Comparison)</strong></span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>For "[X] vs [Y]" queries:</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>```mdx</span></p></div></div><div class="mt-6 border-t border-zinc-100 pt-6 dark:border-zinc-800"><h3 class="mb-3 text-lg font-semibold text-zinc-900 dark:text-white">== vs === in JavaScript</h3><div><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| Aspect | <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">==</code> (Loose Equality) | <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">===</code> (Strict Equality) |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>|--------|----------------------|------------------------|</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| Type coercion | Yes β€” converts types before comparing | No β€” types must match |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| Speed | Slower (coercion overhead) | Faster (no coercion) |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| Predictability | Can produce surprising results | Always predictable |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| Recommendation | Avoid in most cases | Use by default |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>```javascript</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>// Examples</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>5 == "5" // true (string coerced to number)</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>5 === "5" // false (different types)</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>```</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>```</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span><strong>Pattern 4: List Snippet (Types/Categories)</strong></span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>For "types of [concept]" queries:</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>```mdx</span></p></div></div><div class="mt-6 border-t border-zinc-100 pt-6 dark:border-zinc-800"><h3 class="mb-3 text-lg font-semibold text-zinc-900 dark:text-white">Types of Scope in JavaScript</h3><div><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>JavaScript has three types of scope that determine where variables are accessible:</span></p><ul class="mb-4 ml-6 space-y-1 list-disc"><li class="text-zinc-600 dark:text-zinc-400"><span><strong>Global Scope</strong> β€” Variables declared outside any function or block; accessible everywhere</span></li><li class="text-zinc-600 dark:text-zinc-400"><span><strong>Function Scope</strong> β€” Variables declared inside a function with <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">var</code>; accessible only within that function</span></li><li class="text-zinc-600 dark:text-zinc-400"><span><strong>Block Scope</strong> β€” Variables declared with <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">let</code> or <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">const</code> inside <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">{}</code>; accessible only within that block</span></li></ul><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>```</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>---</span></p><h4 class="mb-2 mt-4 font-semibold text-zinc-800 dark:text-zinc-200">Content Structure for SEO</h4><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>How you structure content affects both rankings and user experience.</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span><strong>The Inverted Pyramid:</strong></span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>Put the most important information first. Search engines and users both prefer content that answers questions immediately.</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>```</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>β”‚ THE INVERTED PYRAMID β”‚</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>β”‚ β”‚</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>β”‚ β”‚</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>β”‚ β”‚ ANSWER THE QUESTION β”‚ ← First 100 words β”‚</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>β”‚ β”‚ Definition + Core Concept β”‚ (most important) β”‚</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>β”‚ β”‚ β”‚</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>β”‚ β”‚ EXPLAIN HOW IT WORKS β”‚ ← Next 300 words β”‚</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>β”‚ β”‚ Mechanism + Visual Diagram β”‚ (supporting info) β”‚</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>β”‚ β”‚ β”‚</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>β”‚ β”‚ SHOW PRACTICAL EXAMPLES β”‚ ← Code examples β”‚</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>β”‚ β”‚ Code + Step-by-step β”‚ (proof it works) β”‚</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>β”‚ β”‚ β”‚</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>β”‚ β”‚ COVER EDGE CASES β”‚ ← Advanced β”‚</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>β”‚ β”‚ Common mistakes, gotchas β”‚ (depth) β”‚</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>β”‚ β”‚ β”‚</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>β”‚ β”‚ ADDITIONAL RESOURCES β”‚ ← External β”‚</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>β”‚ β”‚ Related concepts, articles, videos β”‚ (links) β”‚</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>β”‚ β”‚</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>```</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span><strong>Scannable Content Patterns:</strong></span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>Google favors content that's easy to scan. Use these elements:</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| Element | SEO Benefit | When to Use |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>|---------|-------------|-------------|</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| Short paragraphs | Reduces bounce rate | Always (2-4 sentences max) |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| Bullet lists | Often become featured snippets | Lists of 3+ items |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| Numbered lists | "How to" snippet potential | Sequential steps |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| Tables | High snippet potential | Comparisons, reference data |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| Bold text | Highlights keywords for crawlers | First mention of key terms |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| Headings (H2/H3) | Structure signals to Google | Every major topic shift |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span><strong>Content Length Guidelines:</strong></span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| Length | Assessment | Action |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>|--------|------------|--------|</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| Under 1,000 words | Too thin | Add more depth, examples, edge cases |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| 1,000-1,500 words | Minimum viable | Acceptable for simple concepts |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| 1,500-2,500 words | Good | Standard for most concept pages |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| 2,500-4,000 words | Excellent | Ideal for comprehensive guides |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| Over 4,000 words | Evaluate | Consider splitting into multiple pages |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span><strong>Note:</strong> Length alone doesn't guarantee rankings. Every section must add value β€” don't pad content.</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>---</span></p><h4 class="mb-2 mt-4 font-semibold text-zinc-800 dark:text-zinc-200">Internal Linking for SEO</h4><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>Internal links help search engines understand your site structure and distribute page authority.</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span><strong>Topic Cluster Strategy:</strong></span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>Think of concept pages as an interconnected network. Every concept should link to 3-5 related concepts:</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>```</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> β”Œβ”€β”€β”€β”€β”€β”€β”€β”‚ Promises │───────┐</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> β”‚ β”‚ β”‚</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> β–Ό β–Ό β–Ό</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> β”‚async/await│◄──►│ Event Loop │◄──►│ Callbacks β”‚</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> β”‚ β”‚ β”‚</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> β”‚ β–Ό β”‚</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> └──────►│ Call Stack β”‚β—„β”€β”€β”€β”€β”€β”€β”€β”˜</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>```</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span><strong>Link Placement Guidelines:</strong></span></p><ol class="mb-4 ml-6 space-y-1 list-decimal"><li class="text-zinc-600 dark:text-zinc-400"><span><strong>In Prerequisites (Warning box):</strong></span></li></ol><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>```mdx</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span><Warning></span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span><strong>Prerequisite:</strong> This guide assumes you understand [Promises](/concepts/promises) and the [Event Loop](/concepts/event-loop). Read those first if you're not comfortable with asynchronous JavaScript.</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span></Warning></span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>```</span></p><ol class="mb-4 ml-6 space-y-1 list-decimal"><li class="text-zinc-600 dark:text-zinc-400"><span><strong>In Body Content (natural context):</strong></span></li></ol><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>```mdx</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>When the callback finishes, it's added to the task queue β€” which is managed by the [event loop](/concepts/event-loop).</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>```</span></p><ol class="mb-4 ml-6 space-y-1 list-decimal"><li class="text-zinc-600 dark:text-zinc-400"><span><strong>In Related Concepts Section:</strong></span></li></ol><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>```mdx</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span><CardGroup cols={2}></span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> <Card title="Promises" icon="handshake" href="/concepts/promises"></span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> async/await is built on top of Promises</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> </Card></span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> <Card title="Event Loop" icon="arrows-spin" href="/concepts/event-loop"></span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> How JavaScript manages async operations</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> </Card></span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span></CardGroup></span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>```</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span><strong>Anchor Text Best Practices:</strong></span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| ❌ Bad Anchor Text | βœ“ Good Anchor Text | Why |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>|-------------------|-------------------|-----|</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| "click here" | "event loop guide" | Descriptive, includes keyword |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| "this article" | "our Promises concept" | Tells Google what page is about |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| "here" | "JavaScript closures" | Keywords in anchor text |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| "read more" | "understanding the call stack" | Natural, informative |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>---</span></p><h4 class="mb-2 mt-4 font-semibold text-zinc-800 dark:text-zinc-200">URL and Slug Best Practices</h4><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>URLs (slugs) are a minor but meaningful ranking factor.</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span><strong>Rules:</strong></span></p><ol class="mb-4 ml-6 space-y-1 list-decimal"><li class="text-zinc-600 dark:text-zinc-400"><span><strong>Use lowercase</strong> β€” <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">closures</code> not <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">Closures</code></span></li><li class="text-zinc-600 dark:text-zinc-400"><span><strong>Use hyphens</strong> β€” <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">call-stack</code> not <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">call_stack</code> or <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">callstack</code></span></li><li class="text-zinc-600 dark:text-zinc-400"><span><strong>Keep it short</strong> β€” aim for 3-5 words maximum</span></li><li class="text-zinc-600 dark:text-zinc-400"><span><strong>Include primary keyword</strong> β€” the concept name</span></li><li class="text-zinc-600 dark:text-zinc-400"><span><strong>Avoid stop words</strong> β€” skip "the", "and", "in", "of" unless necessary</span></li></ol><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span><strong>Slug Examples:</strong></span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| Concept | ❌ Avoid | βœ“ Use |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>|---------|---------|-------|</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| The Event Loop | <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">the-event-loop</code> | <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">event-loop</code> |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| this, call, apply and bind | <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">this-call-apply-and-bind</code> | <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">this-call-apply-bind</code> |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| Scope and Closures | <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">scope-and-closures</code> | <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">scope-and-closures</code> (acceptable) or <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">scope-closures</code> |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| DOM and Layout Trees | <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">dom-and-layout-trees</code> | <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">dom</code> or <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">dom-layout-trees</code> |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span><strong>Note:</strong> For this project, slugs are already set. When creating new pages, follow these conventions.</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>---</span></p><h4 class="mb-2 mt-4 font-semibold text-zinc-800 dark:text-zinc-200">Opening Paragraph: The SEO Power Move</h4><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>The opening paragraph is prime SEO real estate. It should:</span></p><ol class="mb-4 ml-6 space-y-1 list-decimal"><li class="text-zinc-600 dark:text-zinc-400"><span>Hook the reader with a question they're asking</span></li><li class="text-zinc-600 dark:text-zinc-400"><span>Include the primary keyword naturally</span></li><li class="text-zinc-600 dark:text-zinc-400"><span>Provide a brief definition or answer</span></li><li class="text-zinc-600 dark:text-zinc-400"><span>Set up what they'll learn</span></li></ol><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span><strong>Template:</strong></span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>```mdx</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>[Question hook that matches search intent?] [Maybe another question?]</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>The <strong>[Primary Keyword]</strong> is [brief definition that answers "what is X"]. </span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>[One sentence explaining why it matters or what it enables].</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>```javascript</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>// Immediately show a simple example</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>```</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>[Brief transition to "What you'll learn" box]</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>```</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span><strong>Example (Closures):</strong></span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>```mdx</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>Why do some functions seem to "remember" variables that should have disappeared? </span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>How can a callback still access variables from a function that finished running </span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>long ago?</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>The answer is <strong>closures</strong> β€” one of JavaScript's most powerful (and often </span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>misunderstood) features. A closure is a function that retains access to its </span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>outer scope's variables, even after that outer scope has finished executing.</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>```javascript</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>function createCounter() {</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> let count = 0 // This variable is "enclosed" by the returned function</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> return function() {</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> count++</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> return count</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> }</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>}</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>const counter = createCounter()</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>console.log(counter()) // 1</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>console.log(counter()) // 2 β€” it remembers!</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>```</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>Understanding closures unlocks patterns like private variables, factory functions, </span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>and the module pattern that power modern JavaScript.</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>```</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span><strong>Why this works for SEO:</strong></span></p><ul class="mb-4 ml-6 space-y-1 list-disc"><li class="text-zinc-600 dark:text-zinc-400"><span>Question hooks match how people search ("why do functions remember")</span></li><li class="text-zinc-600 dark:text-zinc-400"><span>Bold keyword in first paragraph</span></li><li class="text-zinc-600 dark:text-zinc-400"><span>Direct definition answers "what is a closure"</span></li><li class="text-zinc-600 dark:text-zinc-400"><span>Code example demonstrates immediately</span></li><li class="text-zinc-600 dark:text-zinc-400"><span>Natural setup for learning objectives</span></li></ul><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>---</span></p></div></div><div class="mt-6 border-t border-zinc-100 pt-6 dark:border-zinc-800"><h3 class="mb-3 text-lg font-semibold text-zinc-900 dark:text-white">Inline Linking Rules (Critical!)</h3><div><h4 class="mb-2 mt-4 font-semibold text-zinc-800 dark:text-zinc-200">Always Link to MDN</h4><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>Whenever you introduce a new Web API, method, object, or JavaScript concept, <strong>link to MDN immediately</strong>. This gives readers a path to deeper learning.</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>```mdx</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span><!-- βœ“ CORRECT: Link on first mention --></span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>The <strong>[Fetch API](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API)</strong> is JavaScript's modern way to make network requests.</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>The <strong>[Response](https://developer.mozilla.org/en-US/docs/Web/API/Response)</strong> object contains everything about the server's reply.</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>Most modern APIs return data in <strong>[JSON](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON)</strong> format.</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span><!-- ❌ WRONG: No links --></span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>The Fetch API is JavaScript's modern way to make network requests.</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>```</span></p><h4 class="mb-2 mt-4 font-semibold text-zinc-800 dark:text-zinc-200">Link to Related Concept Pages</h4><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>When mentioning concepts covered in other pages, link to them:</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>```mdx</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span><!-- βœ“ CORRECT: Internal links to related concepts --></span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>If you're not familiar with it, check out our [async/await concept](/concepts/async-await) first.</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>This guide assumes you understand [Promises](/concepts/promises).</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span><!-- ❌ WRONG: No internal links --></span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>If you're not familiar with async/await, you should learn that first.</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>```</span></p><h4 class="mb-2 mt-4 font-semibold text-zinc-800 dark:text-zinc-200">Common MDN Link Patterns</h4><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| Concept | MDN URL Pattern |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>|---------|-----------------|</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| Web APIs | <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">https://developer.mozilla.org/en-US/docs/Web/API/{APIName}</code> |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| JavaScript Objects | <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/{Object}</code> |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| HTTP | <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">https://developer.mozilla.org/en-US/docs/Web/HTTP</code> |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| HTTP Methods | <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/{METHOD}</code> |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| HTTP Headers | <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers</code> |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>---</span></p></div></div><div class="mt-6 border-t border-zinc-100 pt-6 dark:border-zinc-800"><h3 class="mb-3 text-lg font-semibold text-zinc-900 dark:text-white">Code Examples Best Practices</h3><div><h4 class="mb-2 mt-4 font-semibold text-zinc-800 dark:text-zinc-200">1. Start with the Simplest Possible Example</h4><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>```javascript</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>// βœ“ GOOD: Start with the absolute basics</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>// This is how you fetch data in JavaScript</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>const response = await fetch('https://api.example.com/users/1')</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>const user = await response.json()</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>console.log(user.name) // "Alice"</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>```</span></p><h4 class="mb-2 mt-4 font-semibold text-zinc-800 dark:text-zinc-200">2. Use Step-by-Step Comments</h4><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>```javascript</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>// Step 1: fetch() returns a Promise that resolves to a Response object</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>const responsePromise = fetch('https://api.example.com/users')</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>// Step 2: When the response arrives, we get a Response object</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>responsePromise.then(response => {</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> console.log(response.status) // 200</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> // Step 3: The body is a stream, we need to parse it</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> return response.json()</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>})</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>.then(data => {</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> // Step 4: Now we have the actual data</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> console.log(data)</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>})</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>```</span></p><h4 class="mb-2 mt-4 font-semibold text-zinc-800 dark:text-zinc-200">3. Show Output in Comments</h4><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>```javascript</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>const greeting = "Hello"</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>console.log(typeof greeting) // "string"</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>const numbers = [1, 2, 3]</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>console.log(numbers.length) // 3</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>```</span></p><h4 class="mb-2 mt-4 font-semibold text-zinc-800 dark:text-zinc-200">4. Use ❌ and βœ“ for Wrong/Correct Patterns</h4><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>```javascript</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>// ❌ WRONG - This misses HTTP errors!</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>try {</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> const response = await fetch('/api/users/999')</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> const data = await response.json()</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>} catch (error) {</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> // Only catches NETWORK errors, not 404s!</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>}</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>// βœ“ CORRECT - Check response.ok</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>try {</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> const response = await fetch('/api/users/999')</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> if (!response.ok) {</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> throw new Error(<code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">HTTP error! Status: ${response.status}</code>)</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> }</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> const data = await response.json()</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>} catch (error) {</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> // Now catches both network AND HTTP errors</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>}</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>```</span></p><h4 class="mb-2 mt-4 font-semibold text-zinc-800 dark:text-zinc-200">5. Use Meaningful Variable Names</h4><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>```javascript</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>// ❌ BAD</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>const x = [1, 2, 3]</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>const y = x.map(z => z * 2)</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>// βœ“ GOOD</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>const numbers = [1, 2, 3]</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>const doubled = numbers.map(num => num * 2)</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>```</span></p><h4 class="mb-2 mt-4 font-semibold text-zinc-800 dark:text-zinc-200">6. Progress from Simple to Complex</h4><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>```javascript</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>// Level 1: Basic usage</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>fetch('/api/users')</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>// Level 2: With options</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>fetch('/api/users', {</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> method: 'POST',</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> body: JSON.stringify({ name: 'Alice' })</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>})</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>// Level 3: Full real-world pattern</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>async function createUser(userData) {</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> const response = await fetch('/api/users', {</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> method: 'POST',</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> headers: { 'Content-Type': 'application/json' },</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> body: JSON.stringify(userData)</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> })</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> if (!response.ok) {</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> throw new Error(<code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">Failed to create user: ${response.status}</code>)</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> }</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> return response.json()</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>}</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>```</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>---</span></p></div></div><div class="mt-6 border-t border-zinc-100 pt-6 dark:border-zinc-800"><h3 class="mb-3 text-lg font-semibold text-zinc-900 dark:text-white">Resource Curation Guidelines</h3><div><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>External resources (articles, videos) are valuable, but must meet quality standards.</span></p><h4 class="mb-2 mt-4 font-semibold text-zinc-800 dark:text-zinc-200">Quality Standards</h4><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>Only include resources that are:</span></p><ol class="mb-4 ml-6 space-y-1 list-decimal"><li class="text-zinc-600 dark:text-zinc-400"><span><strong>JavaScript-focused</strong> β€” No resources primarily about other languages (C#, Python, Java, etc.), even if the concepts are similar</span></li><li class="text-zinc-600 dark:text-zinc-400"><span><strong>Still accessible</strong> β€” Verify all links work before publishing</span></li><li class="text-zinc-600 dark:text-zinc-400"><span><strong>High quality</strong> β€” From reputable sources (MDN, javascript.info, freeCodeCamp, well-known educators)</span></li><li class="text-zinc-600 dark:text-zinc-400"><span><strong>Up to date</strong> β€” Avoid outdated resources; check publication dates for time-sensitive topics</span></li><li class="text-zinc-600 dark:text-zinc-400"><span><strong>Accurate</strong> β€” Skim the content to verify it doesn't teach anti-patterns</span></li></ol><h4 class="mb-2 mt-4 font-semibold text-zinc-800 dark:text-zinc-200">Writing Resource Descriptions</h4><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>Each resource needs a <strong>specific, engaging 2-sentence description</strong> explaining what makes it unique. Generic descriptions waste the reader's time.</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>```mdx</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span><!-- ❌ Generic (bad) --></span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span><Card title="JavaScript Promises Tutorial" icon="newspaper" href="..."></span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> Learn about Promises in JavaScript.</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span></Card></span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span><!-- ❌ Generic (bad) --></span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span><Card title="Async/Await Explained" icon="newspaper" href="..."></span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> A comprehensive guide to async/await.</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span></Card></span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span><!-- βœ“ Specific (good) --></span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span><Card title="JavaScript Async/Await Tutorial" icon="newspaper" href="https://javascript.info/async-await"></span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> The go-to reference for async/await fundamentals. Includes exercises at the end to test your understanding of rewriting promise chains.</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span></Card></span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span><!-- βœ“ Specific (good) --></span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span><Card title="JavaScript Visualized: Promises & Async/Await" icon="newspaper" href="..."></span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> Animated GIFs showing the call stack, microtask queue, and event loop in action. This is how async/await finally "clicked" for thousands of developers.</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span></Card></span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span><!-- βœ“ Specific (good) --></span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span><Card title="How to Escape Async/Await Hell" icon="newspaper" href="..."></span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span> The pizza-and-drinks ordering example makes parallel vs sequential execution crystal clear. Essential reading once you know the basics.</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span></Card></span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>```</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span><strong>Description Formula:</strong></span></p><ol class="mb-4 ml-6 space-y-1 list-decimal"><li class="text-zinc-600 dark:text-zinc-400"><span><strong>Sentence 1:</strong> What makes this resource unique OR what it specifically covers</span></li><li class="text-zinc-600 dark:text-zinc-400"><span><strong>Sentence 2:</strong> Why a reader should click (what they'll gain, who it's best for, what stands out)</span></li></ol><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span><strong>Avoid in descriptions:</strong></span></p><ul class="mb-4 ml-6 space-y-1 list-disc"><li class="text-zinc-600 dark:text-zinc-400"><span>"Comprehensive guide to..." (vague)</span></li><li class="text-zinc-600 dark:text-zinc-400"><span>"Great tutorial on..." (vague) </span></li><li class="text-zinc-600 dark:text-zinc-400"><span>"Learn all about..." (vague)</span></li><li class="text-zinc-600 dark:text-zinc-400"><span>"Everything you need to know about..." (clichΓ©)</span></li></ul><h4 class="mb-2 mt-4 font-semibold text-zinc-800 dark:text-zinc-200">Recommended Sources</h4><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span><strong>Articles (Prioritize):</strong></span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| Source | Why |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>|--------|-----|</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| javascript.info | Comprehensive, well-maintained, exercises included |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| MDN Web Docs | Official reference, always accurate |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| freeCodeCamp | Beginner-friendly, practical tutorials |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| dev.to (Lydia Hallie, etc.) | Visual explanations, community favorites |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| CSS-Tricks | DOM, browser APIs, visual topics |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span><strong>Videos (Prioritize):</strong></span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| Creator | Style |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>|---------|-------|</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| Web Dev Simplified | Clear, beginner-friendly, concise |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| Fireship | Fast-paced, modern, entertaining |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| Traversy Media | Comprehensive crash courses |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| Fun Fun Function | Deep-dives with personality |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| Wes Bos | Practical, real-world focused |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span><strong>Avoid:</strong></span></p><ul class="mb-4 ml-6 space-y-1 list-disc"><li class="text-zinc-600 dark:text-zinc-400"><span>Resources in other programming languages (C#, Python, Java) even if concepts overlap</span></li><li class="text-zinc-600 dark:text-zinc-400"><span>Outdated tutorials (pre-ES6 syntax for modern concepts)</span></li><li class="text-zinc-600 dark:text-zinc-400"><span>Paywalled content (unless there's a free tier)</span></li><li class="text-zinc-600 dark:text-zinc-400"><span>Low-quality Medium articles (check engagement and accuracy)</span></li><li class="text-zinc-600 dark:text-zinc-400"><span>Resources that teach anti-patterns</span></li><li class="text-zinc-600 dark:text-zinc-400"><span>Videos over 2 hours (link to specific timestamps if valuable)</span></li></ul><h4 class="mb-2 mt-4 font-semibold text-zinc-800 dark:text-zinc-200">Verifying Resources</h4><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>Before including any resource:</span></p><ol class="mb-4 ml-6 space-y-1 list-decimal"><li class="text-zinc-600 dark:text-zinc-400"><span><strong>Click the link</strong> β€” Verify it loads and isn't behind a paywall</span></li><li class="text-zinc-600 dark:text-zinc-400"><span><strong>Skim the content</strong> β€” Ensure it's accurate and well-written</span></li><li class="text-zinc-600 dark:text-zinc-400"><span><strong>Check the date</strong> β€” For time-sensitive topics, prefer recent content</span></li><li class="text-zinc-600 dark:text-zinc-400"><span><strong>Read comments/reactions</strong> β€” Community feedback reveals quality issues</span></li><li class="text-zinc-600 dark:text-zinc-400"><span><strong>Test code examples</strong> β€” If they include code, verify it works</span></li></ol><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>---</span></p></div></div><div class="mt-6 border-t border-zinc-100 pt-6 dark:border-zinc-800"><h3 class="mb-3 text-lg font-semibold text-zinc-900 dark:text-white">ASCII Art Diagrams</h3><div><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>Use ASCII art to visualize concepts. Make them boxed and labeled:</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>```</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>β”‚ THE REQUEST-RESPONSE CYCLE β”‚</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>β”‚ β”‚</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>β”‚ YOU (Browser) KITCHEN (Server) β”‚</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>β”‚ β”‚ β”‚ ──── "I'd like pasta" ────► β”‚ β”‚ β”‚</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>β”‚ β”‚ :) β”‚ (REQUEST) β”‚ [chef] β”‚ β”‚</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>β”‚ β”‚ β”‚ β”‚ β”‚ β”‚</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>β”‚ β”‚ β”‚ ◄──── Here you go! ──────── β”‚ β”‚ β”‚</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>β”‚ β”‚ β”‚ (RESPONSE) β”‚ β”‚ β”‚</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>β”‚ β”‚</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>β”‚ The waiter (HTTP) is the protocol that makes this exchange work! β”‚</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>β”‚ β”‚</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>```</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>---</span></p></div></div><div class="mt-6 border-t border-zinc-100 pt-6 dark:border-zinc-800"><h3 class="mb-3 text-lg font-semibold text-zinc-900 dark:text-white">Mintlify Components Reference</h3><div><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| Component | When to Use |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>|-----------|-------------|</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800"><Info></code> | "What you'll learn" boxes, Key Takeaways |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800"><Warning></code> | Common mistakes, gotchas, prerequisites |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800"><Tip></code> | Pro tips, rules of thumb, best practices |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800"><Note></code> | Additional context, side notes |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800"><AccordionGroup></code> | Expandable content, Q&A sections, optional deep-dives |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800"><Tabs></code> | Comparing different approaches side-by-side |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800"><Steps></code> | Sequential processes, numbered workflows |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800"><CardGroup></code> | Resource links (articles, videos, references) |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800"><Card></code> | Individual resource with icon and link |</span></p><h4 class="mb-2 mt-4 font-semibold text-zinc-800 dark:text-zinc-200">Card Icons Reference</h4><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| Content Type | Icon |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>|--------------|------|</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| MDN/Official Docs | <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">book</code> |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| Articles/Blog Posts | <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">newspaper</code> |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| Videos | <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">video</code> |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| Courses | <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">graduation-cap</code> |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>| Related Concepts | Context-appropriate (<code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">handshake</code>, <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">hourglass</code>, <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">arrows-spin</code>, <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">sitemap</code>, etc.) |</span></p><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>---</span></p></div></div><div class="mt-6 border-t border-zinc-100 pt-6 dark:border-zinc-800"><h3 class="mb-3 text-lg font-semibold text-zinc-900 dark:text-white">Quality Checklist</h3><div><p class="mb-3 text-zinc-600 dark:text-zinc-400"><span>Before finalizing a concept page, verify ALL of these:</span></p><h4 class="mb-2 mt-4 font-semibold text-zinc-800 dark:text-zinc-200">Structure</h4><ul class="mb-4 ml-6 space-y-1 list-disc"><li class="text-zinc-600 dark:text-zinc-400"><span>[ ] Opens with engaging questions that hook the reader</span></li><li class="text-zinc-600 dark:text-zinc-400"><span>[ ] Shows a simple code example immediately after the opening</span></li><li class="text-zinc-600 dark:text-zinc-400"><span>[ ] Has "What you'll learn" Info box right after the opening</span></li><li class="text-zinc-600 dark:text-zinc-400"><span>[ ] Major sections are separated by <code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">---</code> horizontal rules</span></li><li class="text-zinc-600 dark:text-zinc-400"><span>[ ] Has a real-world analogy with ASCII art diagram</span></li><li class="text-zinc-600 dark:text-zinc-400"><span>[ ] Has a "Common Mistakes" or "The #1 Mistake" section</span></li><li class="text-zinc-600 dark:text-zinc-400"><span>[ ] Has a "Key Takeaways" section summarizing 8-10 points</span></li><li class="text-zinc-600 dark:text-zinc-400"><span>[ ] Has a "Test Your Knowledge" section with 5-6 Q&As</span></li><li class="text-zinc-600 dark:text-zinc-400"><span>[ ] Ends with Related Concepts, Reference, Articles, Videos in that order</span></li></ul><h4 class="mb-2 mt-4 font-semibold text-zinc-800 dark:text-zinc-200">Linking</h4><ul class="mb-4 ml-6 space-y-1 list-disc"><li class="text-zinc-600 dark:text-zinc-400"><span>[ ] All new Web APIs/methods have inline MDN links on first mention</span></li><li class="text-zinc-600 dark:text-zinc-400"><span>[ ] All related concepts link to their concept pages (<code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">/concepts/slug</code>)</span></li><li class="text-zinc-600 dark:text-zinc-400"><span>[ ] Reference section has multiple MDN links</span></li><li class="text-zinc-600 dark:text-zinc-400"><span>[ ] 4-6 quality articles with descriptions</span></li><li class="text-zinc-600 dark:text-zinc-400"><span>[ ] 3-4 quality videos with descriptions</span></li></ul><h4 class="mb-2 mt-4 font-semibold text-zinc-800 dark:text-zinc-200">Code Examples</h4><ul class="mb-4 ml-6 space-y-1 list-disc"><li class="text-zinc-600 dark:text-zinc-400"><span>[ ] First code example is dead simple</span></li><li class="text-zinc-600 dark:text-zinc-400"><span>[ ] Uses step-by-step comments for complex examples</span></li><li class="text-zinc-600 dark:text-zinc-400"><span>[ ] Shows output in comments (<code class="rounded bg-zinc-100 px-1.5 py-0.5 text-sm dark:bg-zinc-800">// "result"</code>)</span></li><li class="text-zinc-600 dark:text-zinc-400"><span>[ ] Uses ❌ and βœ“ for wrong/correct patterns</span></li><li class="text-zinc-600 dark:text-zinc-400"><span>[ ] Uses meaningful variable names</span></li><li class="text-zinc-600 dark:text-zinc-400"><span>[ ] Progresses from simple to complex</span></li></ul><h4 class="mb-2 mt-4 font-semibold text-zinc-800 dark:text-zinc-200">Content Quality</h4><ul class="mb-4 ml-6 space-y-1 list-disc"><li class="text-zinc-600 dark:text-zinc-400"><span>[ ] Written for someone who might be new to coding</span></li><li class="text-zinc-600 dark:text-zinc-400"><span>[ ] Prerequisites are noted with Warning component</span></li><li class="text-zinc-600 dark:text-zinc-400"><span>[ ] No assumptions about prior knowledge without links</span></li><li class="text-zinc-600 dark:text-zinc-400"><span>[ ] Tables used for quick reference information</span></li><li class="text-zinc-600 dark:text-zinc-400"><span>[ ] ASCII diagrams for visual concepts</span></li></ul><h4 class="mb-2 mt-4 font-semibold text-zinc-800 dark:text-zinc-200">Language Quality</h4><ul class="mb-4 ml-6 space-y-1 list-disc"><li class="text-zinc-600 dark:text-zinc-400"><span>[ ] Description starts with "Learn" or "Understand" (not "Master")</span></li><li class="text-zinc-600 dark:text-zinc-400"><span>[ ] No overuse of em dashes (fewer than 15 outside Key Takeaways and structured sections)</span></li><li class="text-zinc-600 dark:text-zinc-400"><span>[ ] No AI superlatives: "dramatically", "fundamentally", "incredibly", "extremely"</span></li><li class="text-zinc-600 dark:text-zinc-400"><span>[ ] No stiff phrases: "one of the most important", "essential points", "It should be noted"</span></li><li class="text-zinc-600 dark:text-zinc-400"><span>[ ] Emphasis patterns vary (not</span></li></ul></div></div></div></div></div><div class="mt-12 border-t border-zinc-200 pt-8 dark:border-zinc-800"><h2 class="mb-4 flex items-center gap-2 text-lg font-semibold text-zinc-900 dark:text-white"><span>More from this repository</span><span class="rounded-full bg-violet-100 px-2 py-0.5 text-sm font-medium text-violet-700 dark:bg-violet-900/50 dark:text-violet-300">5</span></h2><div class="grid gap-3 sm:grid-cols-2"><a class="flex items-center gap-3 rounded-lg border border-zinc-200 bg-white p-4 transition-colors hover:border-zinc-300 hover:bg-zinc-50 dark:border-zinc-800 dark:bg-zinc-900 dark:hover:border-zinc-700 dark:hover:bg-zinc-800/50" href="/skills/leonardomso/33-js-concepts/seo-review"><span class="text-xl">🎯</span><div class="min-w-0 flex-1"><div class="flex items-center gap-2"><span class="truncate font-medium text-zinc-900 dark:text-white">seo-review</span><span class="inline-flex items-center gap-1 font-medium rounded-full bg-purple-100 text-purple-800 dark:bg-purple-900/30 dark:text-purple-300 px-2 py-0.5 text-xs "><span>🎯</span><span>Skill</span></span></div><p class="truncate text-sm text-zinc-500 dark:text-zinc-400">Performs comprehensive SEO audits for JavaScript concept pages to optimize search visibility, featured snippets, and ranking potential.</p></div></a><a class="flex items-center gap-3 rounded-lg border border-zinc-200 bg-white p-4 transition-colors hover:border-zinc-300 hover:bg-zinc-50 dark:border-zinc-800 dark:bg-zinc-900 dark:hover:border-zinc-700 dark:hover:bg-zinc-800/50" href="/skills/leonardomso/33-js-concepts/fact-check"><span class="text-xl">🎯</span><div class="min-w-0 flex-1"><div class="flex items-center gap-2"><span class="truncate font-medium text-zinc-900 dark:text-white">fact-check</span><span class="inline-flex items-center gap-1 font-medium rounded-full bg-purple-100 text-purple-800 dark:bg-purple-900/30 dark:text-purple-300 px-2 py-0.5 text-xs "><span>🎯</span><span>Skill</span></span></div><p class="truncate text-sm text-zinc-500 dark:text-zinc-400">Verifies technical accuracy of JavaScript documentation by rigorously checking code examples, MDN compliance, and external resources to prevent misinformation.</p></div></a><a class="flex items-center gap-3 rounded-lg border border-zinc-200 bg-white p-4 transition-colors hover:border-zinc-300 hover:bg-zinc-50 dark:border-zinc-800 dark:bg-zinc-900 dark:hover:border-zinc-700 dark:hover:bg-zinc-800/50" href="/skills/leonardomso/33-js-concepts/test-writer"><span class="text-xl">🎯</span><div class="min-w-0 flex-1"><div class="flex items-center gap-2"><span class="truncate font-medium text-zinc-900 dark:text-white">test-writer</span><span class="inline-flex items-center gap-1 font-medium rounded-full bg-purple-100 text-purple-800 dark:bg-purple-900/30 dark:text-purple-300 px-2 py-0.5 text-xs "><span>🎯</span><span>Skill</span></span></div><p class="truncate text-sm text-zinc-500 dark:text-zinc-400">Generates comprehensive Vitest tests for code examples in JavaScript documentation, ensuring accuracy and verifying example functionality.</p></div></a><a class="flex items-center gap-3 rounded-lg border border-zinc-200 bg-white p-4 transition-colors hover:border-zinc-300 hover:bg-zinc-50 dark:border-zinc-800 dark:bg-zinc-900 dark:hover:border-zinc-700 dark:hover:bg-zinc-800/50" href="/skills/leonardomso/33-js-concepts/concept-workflow"><span class="text-xl">🎯</span><div class="min-w-0 flex-1"><div class="flex items-center gap-2"><span class="truncate font-medium text-zinc-900 dark:text-white">concept-workflow</span><span class="inline-flex items-center gap-1 font-medium rounded-full bg-purple-100 text-purple-800 dark:bg-purple-900/30 dark:text-purple-300 px-2 py-0.5 text-xs "><span>🎯</span><span>Skill</span></span></div><p class="truncate text-sm text-zinc-500 dark:text-zinc-400">Orchestrates a comprehensive end-to-end workflow for creating high-quality JavaScript concept documentation, systematically executing research, writing, testing, fact-checking, and SEO optimization.</p></div></a><a class="flex items-center gap-3 rounded-lg border border-zinc-200 bg-white p-4 transition-colors hover:border-zinc-300 hover:bg-zinc-50 dark:border-zinc-800 dark:bg-zinc-900 dark:hover:border-zinc-700 dark:hover:bg-zinc-800/50" href="/skills/leonardomso/33-js-concepts/resource-curator"><span class="text-xl">🎯</span><div class="min-w-0 flex-1"><div class="flex items-center gap-2"><span class="truncate font-medium text-zinc-900 dark:text-white">resource-curator</span><span class="inline-flex items-center gap-1 font-medium rounded-full bg-purple-100 text-purple-800 dark:bg-purple-900/30 dark:text-purple-300 px-2 py-0.5 text-xs "><span>🎯</span><span>Skill</span></span></div><p class="truncate text-sm text-zinc-500 dark:text-zinc-400">Finds, evaluates, and maintains high-quality external resources for JavaScript concept documentation, ensuring link integrity and content relevance.</p></div></a></div></div></div><!--$--><!--/$--></main><footer class="border-t border-zinc-200 bg-zinc-50 dark:border-zinc-800 dark:bg-zinc-900"><div class="mx-auto max-w-7xl px-4 py-12 sm:px-6 lg:px-8"><div class="grid grid-cols-1 gap-8 md:grid-cols-4"><div class="md:col-span-1"><a class="flex items-center" href="/"><img alt="Vibe Index" loading="lazy" width="140" height="40" decoding="async" data-nimg="1" class="h-8 w-auto dark:brightness-0 dark:invert" style="color:transparent" srcSet="/_next/image?url=%2Flogo.png&w=256&q=75 1x, /_next/image?url=%2Flogo.png&w=384&q=75 2x" src="/_next/image?url=%2Flogo.png&w=384&q=75"/></a><p class="mt-4 text-sm text-zinc-600 dark:text-zinc-400">Discover and explore AI coding tools - skills, plugins, MCP servers, and marketplaces</p></div><div><h3 class="text-sm font-semibold text-zinc-900 dark:text-white">Resources</h3><ul class="mt-4 space-y-2"><li><a class="text-sm text-zinc-600 transition-colors hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-white" href="/skills">Skills</a></li><li><a class="text-sm text-zinc-600 transition-colors hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-white" href="/plugins">Plugins</a></li><li><a class="text-sm text-zinc-600 transition-colors hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-white" href="/mcp">MCP Servers</a></li><li><a class="text-sm text-zinc-600 transition-colors hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-white" href="/marketplaces">Marketplaces</a></li></ul></div><div><h3 class="text-sm font-semibold text-zinc-900 dark:text-white">Support</h3><ul class="mt-4 space-y-2"><li><a href="mailto:admin@jolab.ai" class="text-sm text-zinc-600 transition-colors hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-white">Contact Us</a></li><li><a class="text-sm text-zinc-600 transition-colors hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-white" href="/feedback">Feedback</a></li></ul></div><div><h3 class="text-sm font-semibold text-zinc-900 dark:text-white">Legal</h3><ul class="mt-4 space-y-2"><li><a class="text-sm text-zinc-600 transition-colors hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-white" href="/privacy">Privacy Policy</a></li><li><a class="text-sm text-zinc-600 transition-colors hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-white" href="/terms">Terms of Service</a></li></ul></div></div><div class="mt-8 border-t border-zinc-200 pt-8 dark:border-zinc-800"><p class="text-center text-sm text-zinc-500 dark:text-zinc-500">Β© <!-- -->2026<!-- --> <!-- -->Vibe Index<!-- -->. <!-- -->All rights reserved.</p><p class="mt-2 text-center text-sm text-zinc-400 dark:text-zinc-600">Operated by<!-- --> <a href="https://jolab.ai" target="_blank" rel="noopener noreferrer" class="text-violet-500 hover:text-violet-600 hover:underline dark:text-violet-400 dark:hover:text-violet-300">JoLab.ai</a></p></div></div></footer><script src="/_next/static/chunks/a8c74b565bd8a7a9.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[26817,[\"/_next/static/chunks/ae7705564cfe2c2b.js\",\"/_next/static/chunks/6875684dac0d32c7.js\"],\"default\"]\n3:I[44636,[\"/_next/static/chunks/ae7705564cfe2c2b.js\",\"/_next/static/chunks/6875684dac0d32c7.js\"],\"Providers\"]\n4:I[3374,[\"/_next/static/chunks/ae7705564cfe2c2b.js\",\"/_next/static/chunks/6875684dac0d32c7.js\"],\"default\"]\n5:I[39756,[\"/_next/static/chunks/ff1a16fafef87110.js\",\"/_next/static/chunks/d2be314c3ece3fbe.js\"],\"default\"]\n6:I[37457,[\"/_next/static/chunks/ff1a16fafef87110.js\",\"/_next/static/chunks/d2be314c3ece3fbe.js\"],\"default\"]\n7:I[22016,[\"/_next/static/chunks/ae7705564cfe2c2b.js\",\"/_next/static/chunks/6875684dac0d32c7.js\",\"/_next/static/chunks/81cb956acaf11563.js\"],\"\"]\n8:I[58234,[\"/_next/static/chunks/ae7705564cfe2c2b.js\",\"/_next/static/chunks/6875684dac0d32c7.js\"],\"default\"]\na:I[97367,[\"/_next/static/chunks/ff1a16fafef87110.js\",\"/_next/static/chunks/d2be314c3ece3fbe.js\"],\"OutletBoundary\"]\nb:\"$Sreact.suspense\"\nd:I[97367,[\"/_next/static/chunks/ff1a16fafef87110.js\",\"/_next/static/chunks/d2be314c3ece3fbe.js\"],\"ViewportBoundary\"]\nf:I[97367,[\"/_next/static/chunks/ff1a16fafef87110.js\",\"/_next/static/chunks/d2be314c3ece3fbe.js\"],\"MetadataBoundary\"]\n11:I[68027,[\"/_next/static/chunks/ff1a16fafef87110.js\",\"/_next/static/chunks/d2be314c3ece3fbe.js\"],\"default\"]\n:HL[\"/_next/static/chunks/4ace7678f29d676a.css\",\"style\"]\n:HL[\"/_next/static/media/797e433ab948586e-s.p.dbea232f.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/caa3a2e1cccd8315-s.p.853070df.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"hzCATPhvHcfuRGB059ULr\",\"c\":[\"\",\"skills\",\"leonardomso\",\"33-js-concepts\",\"write-concept\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"skills\",{\"children\":[[\"owner\",\"leonardomso\",\"d\"],{\"children\":[[\"repo\",\"33-js-concepts\",\"d\"],{\"children\":[[\"skill\",\"write-concept\",\"d\"],{\"children\":[\"__PAGE__\",{}]}]}]}]}]},\"$undefined\",\"$undefined\",true],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/4ace7678f29d676a.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/ae7705564cfe2c2b.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/6875684dac0d32c7.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[\"$\",\"body\",null,{\"className\":\"geist_a71539c9-module__T19VSG__variable geist_mono_8d43a2aa-module__8Li5zG__variable antialiased min-h-screen flex flex-col\",\"children\":[[\"$\",\"$L2\",null,{}],[\"$\",\"$L3\",null,{\"children\":[[\"$\",\"$L4\",null,{}],[\"$\",\"main\",null,{\"className\":\"flex-1\",\"children\":[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"div\",null,{\"className\":\"flex min-h-[60vh] flex-col items-center justify-center px-4\",\"children\":[[\"$\",\"h1\",null,{\"className\":\"text-6xl font-bold text-zinc-900 dark:text-white\",\"children\":\"404\"}],[\"$\",\"h2\",null,{\"className\":\"mt-4 text-xl font-semibold text-zinc-700 dark:text-zinc-300\",\"children\":\"Page Not Found\"}],[\"$\",\"p\",null,{\"className\":\"mt-2 text-zinc-500 dark:text-zinc-400\",\"children\":\"The page you're looking for doesn't exist or has been moved.\"}],[\"$\",\"$L7\",null,{\"href\":\"/\",\"className\":\"mt-8 inline-flex items-center rounded-lg bg-zinc-900 px-6 py-3 text-sm font-medium text-white transition-colors hover:bg-zinc-800 dark:bg-zinc-100 dark:text-zinc-900 dark:hover:bg-zinc-200\",\"children\":\"Go Home\"}]]}],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}],[\"$\",\"$L8\",null,{}]]}]]}]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[\"$L9\",[[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/81cb956acaf11563.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"$La\",null,{\"children\":[\"$\",\"$b\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@c\"}]}]]}],{},null,false,false]},null,false,false]},null,false,false]},null,false,false]},null,false,false]},null,false,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$Ld\",null,{\"children\":\"$Le\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$Lf\",null,{\"children\":[\"$\",\"$b\",null,{\"name\":\"Next.Metadata\",\"children\":\"$L10\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$11\",[]],\"S\":false}\n"])</script><script>self.__next_f.push([1,"e:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"12:I[27201,[\"/_next/static/chunks/ff1a16fafef87110.js\",\"/_next/static/chunks/d2be314c3ece3fbe.js\"],\"IconMark\"]\nc:null\n10:[[\"$\",\"title\",\"0\",{\"children\":\"write-concept | Vibe Index\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Writes high-quality, beginner-friendly JavaScript concept documentation with a conversational tone, focusing on clarity and practical understanding.\"}],[\"$\",\"link\",\"2\",{\"rel\":\"icon\",\"href\":\"/favicon-16x16.png\",\"sizes\":\"16x16\",\"type\":\"image/png\"}],[\"$\",\"link\",\"3\",{\"rel\":\"icon\",\"href\":\"/favicon-32x32.png\",\"sizes\":\"32x32\",\"type\":\"image/png\"}],[\"$\",\"link\",\"4\",{\"rel\":\"icon\",\"href\":\"/icon.png\",\"sizes\":\"512x512\",\"type\":\"image/png\"}],[\"$\",\"link\",\"5\",{\"rel\":\"apple-touch-icon\",\"href\":\"/apple-touch-icon.png\"}],[\"$\",\"$L12\",\"6\",{}]]\n"])</script><script>self.__next_f.push([1,"13:I[74533,[\"/_next/static/chunks/ae7705564cfe2c2b.js\",\"/_next/static/chunks/6875684dac0d32c7.js\",\"/_next/static/chunks/81cb956acaf11563.js\"],\"FavoriteButton\"]\n14:I[54371,[\"/_next/static/chunks/ae7705564cfe2c2b.js\",\"/_next/static/chunks/6875684dac0d32c7.js\",\"/_next/static/chunks/81cb956acaf11563.js\"],\"default\"]\n15:I[75538,[\"/_next/static/chunks/ae7705564cfe2c2b.js\",\"/_next/static/chunks/6875684dac0d32c7.js\",\"/_next/static/chunks/81cb956acaf11563.js\"],\"default\"]\n"])</script><script>self.__next_f.push([1,"9:[\"$\",\"div\",null,{\"className\":\"mx-auto max-w-4xl px-4 py-12 sm:px-6 lg:px-8\",\"children\":[[\"$\",\"nav\",null,{\"className\":\"mb-6\",\"children\":[\"$\",\"ol\",null,{\"className\":\"flex items-center gap-2 text-sm\",\"children\":[[\"$\",\"li\",null,{\"children\":[\"$\",\"$L7\",null,{\"href\":\"/skills\",\"className\":\"text-zinc-500 hover:text-zinc-700 dark:text-zinc-400 dark:hover:text-zinc-300\",\"children\":\"Skills\"}]}],[\"$\",\"li\",null,{\"className\":\"text-zinc-400\",\"children\":\"/\"}],[\"$\",\"li\",null,{\"className\":\"text-zinc-900 dark:text-white\",\"children\":\"write-concept\"}]]}]}],[\"$\",\"div\",null,{\"className\":\"mb-8\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-start gap-4\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-5xl\",\"children\":\"🎯\"}],[\"$\",\"div\",null,{\"className\":\"flex-1\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-center gap-2 flex-wrap\",\"children\":[[\"$\",\"h1\",null,{\"className\":\"text-3xl font-bold text-zinc-900 dark:text-white\",\"children\":\"write-concept\"}],[\"$\",\"span\",null,{\"className\":\"inline-flex items-center gap-1 font-medium rounded-full bg-purple-100 text-purple-800 dark:bg-purple-900/30 dark:text-purple-300 px-2.5 py-1 text-sm \",\"children\":[[\"$\",\"span\",null,{\"children\":\"🎯\"}],[\"$\",\"span\",null,{\"children\":\"Skill\"}]]}],[\"$\",\"$L13\",null,{\"resourceId\":\"675df0b2-1748-41d6-b78c-dee335348017\",\"size\":\"sm\",\"showCount\":true}],false]}],[\"$\",\"p\",null,{\"className\":\"mt-2 text-zinc-600 dark:text-zinc-400\",\"children\":[\"from \",\"leonardomso\",\"/\",\"33-js-concepts\"]}]]}]]}],[\"$\",\"$L14\",null,{\"description\":\"Writes high-quality, beginner-friendly JavaScript concept documentation with a conversational tone, focusing on clarity and practical understanding.\",\"resourceId\":\"675df0b2-1748-41d6-b78c-dee335348017\",\"resourceName\":\"write-concept\",\"resourceType\":\"skill\",\"descriptionType\":\"ai\"}],[\"$\",\"div\",null,{\"className\":\"mt-4 flex flex-wrap gap-2\",\"children\":[[\"$\",\"span\",\"write-concept\",{\"onClick\":\"$undefined\",\"className\":\"inline-flex items-center rounded-full bg-zinc-100 px-2 py-0.5 text-xs font-medium text-zinc-600 transition-colors hover:bg-zinc-200 dark:bg-zinc-800 dark:text-zinc-400 dark:hover:bg-zinc-700 \",\"children\":\"write-concept\"}]]}]]}],[\"$\",\"div\",null,{\"className\":\"mb-8\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"mb-4 text-lg font-semibold text-zinc-900 dark:text-white\",\"children\":\"Installation\"}],[\"$\",\"$L15\",null,{\"resourceType\":\"skill\",\"owner\":\"leonardomso\",\"repo\":\"33-js-concepts\",\"skillName\":\"write-concept\"}]]}],[\"$\",\"div\",null,{\"className\":\"mb-8 flex gap-6 text-sm text-zinc-500 dark:text-zinc-400\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-center gap-1.5\",\"children\":[[\"$\",\"svg\",null,{\"className\":\"h-4 w-4 text-yellow-500\",\"fill\":\"currentColor\",\"viewBox\":\"0 0 24 24\",\"children\":[\"$\",\"path\",null,{\"d\":\"M11.049 2.927c.3-.921 1.603-.921 1.902 0l1.519 4.674a1 1 0 00.95.69h4.915c.969 0 1.371 1.24.588 1.81l-3.976 2.888a1 1 0 00-.363 1.118l1.518 4.674c.3.922-.755 1.688-1.538 1.118l-3.976-2.888a1 1 0 00-1.176 0l-3.976 2.888c-.783.57-1.838-.197-1.538-1.118l1.518-4.674a1 1 0 00-.363-1.118l-3.976-2.888c-.784-.57-.38-1.81.588-1.81h4.914a1 1 0 00.951-.69l1.519-4.674z\"}]}],[\"$\",\"span\",null,{\"className\":\"font-medium text-zinc-700 dark:text-zinc-300\",\"children\":\"69\"}]]}],[\"$\",\"div\",null,{\"className\":\"flex items-center gap-1.5\",\"children\":[[\"$\",\"span\",null,{\"children\":\"Last Updated\"}],[\"$\",\"span\",null,{\"className\":\"font-medium text-zinc-700 dark:text-zinc-300\",\"children\":\"Jan 23, 2026\"}]]}]]}],[\"$\",\"div\",null,{\"className\":\"flex flex-wrap gap-4\",\"children\":[[\"$\",\"a\",null,{\"href\":\"https://github.com/leonardomso/33-js-concepts\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"className\":\"inline-flex items-center gap-2 rounded-lg bg-zinc-900 px-6 py-3 text-sm font-medium text-white transition-colors hover:bg-zinc-800 dark:bg-zinc-100 dark:text-zinc-900 dark:hover:bg-zinc-200\",\"children\":[[\"$\",\"svg\",null,{\"className\":\"h-5 w-5\",\"fill\":\"currentColor\",\"viewBox\":\"0 0 24 24\",\"children\":[\"$\",\"path\",null,{\"fillRule\":\"evenodd\",\"d\":\"M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z\",\"clipRule\":\"evenodd\"}]}],\"View on GitHub\"]}],\"$L16\"]}],\"$L17\",\"$L18\"]}]\n"])</script><script>self.__next_f.push([1,"19:I[13428,[\"/_next/static/chunks/ae7705564cfe2c2b.js\",\"/_next/static/chunks/6875684dac0d32c7.js\",\"/_next/static/chunks/81cb956acaf11563.js\"],\"default\"]\n16:[\"$\",\"$L7\",null,{\"href\":\"/skills\",\"className\":\"inline-flex items-center gap-2 rounded-lg border border-zinc-300 bg-white px-6 py-3 text-sm font-medium text-zinc-700 transition-colors hover:bg-zinc-50 dark:border-zinc-700 dark:bg-zinc-800 dark:text-zinc-300 dark:hover:bg-zinc-700\",\"children\":[[\"$\",\"svg\",null,{\"xmlns\":\"http://www.w3.org/2000/svg\",\"className\":\"h-5 w-5\",\"fill\":\"none\",\"viewBox\":\"0 0 24 24\",\"stroke\":\"currentColor\",\"children\":[\"$\",\"path\",null,{\"strokeLinecap\":\"round\",\"strokeLinejoin\":\"round\",\"strokeWidth\":2,\"d\":\"M10 19l-7-7m0 0l7-7m-7 7h18\"}]}],\"Back to Skills\"]}]\n1a:Td50b,"])</script><script>self.__next_f.push([1,"---\nname: write-concept\ndescription: Write or review JavaScript concept documentation pages for the 33 JavaScript Concepts project, following strict structure and quality guidelines\n---\n\n# Skill: Write JavaScript Concept Documentation\n\nUse this skill when writing or improving concept documentation pages for the 33 JavaScript Concepts project.\n\n## When to Use\n\n- Creating a new concept page in `/docs/concepts/`\n- Rewriting or significantly improving an existing concept page\n- Reviewing an existing concept page for quality and completeness\n- Adding explanatory content to a concept\n\n## Target Audience\n\nRemember: **the reader might be someone who has never coded before or is just learning JavaScript**. Write with empathy for beginners while still providing depth for intermediate developers. Make complex topics feel approachable and never assume prior knowledge without linking to prerequisites.\n\n## Writing Guidelines\n\n### Voice and Tone\n\n- **Conversational but authoritative**: Write like you're explaining to a smart friend\n- **Encouraging**: Make complex topics feel approachable\n- **Practical**: Focus on real-world applications and use cases\n- **Concise**: Respect the reader's time; avoid unnecessary verbosity\n- **Question-driven**: Open sections with questions the reader might have\n\n### Avoiding AI-Generated Language\n\nYour writing must sound human, not AI-generated. Here are specific patterns to avoid:\n\n#### Words and Phrases to Avoid\n\n| ❌ Avoid | βœ“ Use Instead |\n|----------|---------------|\n| \"Master [concept]\" | \"Learn [concept]\" |\n| \"dramatically easier/better\" | \"much easier\" or \"cleaner\" |\n| \"one fundamental thing\" | \"one simple thing\" |\n| \"one of the most important concepts\" | \"This is a big one\" |\n| \"essential points\" | \"key things to remember\" |\n| \"understanding X deeply improves\" | \"knowing X well makes Y easier\" |\n| \"To truly understand\" | \"Let's look at\" or \"Here's how\" |\n| \"This is crucial\" | \"This trips people up\" |\n| \"It's worth noting that\" | Just state the thing directly |\n| \"It's important to remember\" | \"Don't forget:\" or \"Remember:\" |\n| \"In order to\" | \"To\" |\n| \"Due to the fact that\" | \"Because\" |\n| \"At the end of the day\" | Remove entirely |\n| \"When it comes to\" | Remove or rephrase |\n| \"In this section, we will\" | Just start explaining |\n| \"As mentioned earlier\" | Remove or link to the section |\n\n#### Repetitive Emphasis Patterns\n\nDon't use the same lead-in pattern repeatedly. Vary your emphasis:\n\n| Instead of repeating... | Vary with... |\n|------------------------|--------------|\n| \"Key insight:\" | \"Don't forget:\", \"The pattern:\", \"Here's the thing:\" |\n| \"Best practice:\" | \"Pro tip:\", \"Quick check:\", \"A good habit:\" |\n| \"Important:\" | \"Watch out:\", \"Heads up:\", \"Note:\" |\n| \"Remember:\" | \"Keep in mind:\", \"The rule:\", \"Think of it this way:\" |\n\n#### Em Dash (β€”) Overuse\n\nAI-generated text overuses em dashes. Limit their use and prefer periods, commas, or colons:\n\n| ❌ Em Dash Overuse | βœ“ Better Alternative |\n|-------------------|---------------------|\n| \"async/await β€” syntactic sugar that...\" | \"async/await. It's syntactic sugar that...\" |\n| \"understand Promises β€” async/await is built...\" | \"understand Promises. async/await is built...\" |\n| \"doesn't throw an error β€” you just get...\" | \"doesn't throw an error. You just get...\" |\n| \"outside of async functions β€” but only in...\" | \"outside of async functions, but only in...\" |\n| \"Fails fast β€” if any Promise rejects...\" | \"Fails fast. If any Promise rejects...\" |\n| \"achieve the same thing β€” the choice...\" | \"achieve the same thing. The choice...\" |\n\n**When em dashes ARE acceptable:**\n- In Key Takeaways section (consistent formatting for the numbered list)\n- In MDN card titles (e.g., \"async function β€” MDN\")\n- In interview answer step-by-step explanations (structured formatting)\n- Sparingly when a true parenthetical aside reads naturally\n\n**Rule of thumb:** If you have more than 10-15 em dashes in a 1500-word document outside of structured sections, you're overusing them. After writing, search for \"β€”\" and evaluate each one.\n\n#### Superlatives and Filler Words\n\nAvoid vague superlatives that add no information:\n\n| ❌ Avoid | βœ“ Use Instead |\n|----------|---------------|\n| \"dramatically\" | \"much\" or remove entirely |\n| \"fundamentally\" | \"simply\" or be specific about what's fundamental |\n| \"incredibly\" | remove or be specific |\n| \"extremely\" | remove or be specific |\n| \"absolutely\" | remove |\n| \"basically\" | remove (if you need it, you're not explaining clearly) |\n| \"essentially\" | remove or just explain directly |\n| \"very\" | remove or use a stronger word |\n| \"really\" | remove |\n| \"actually\" | remove (unless correcting a misconception) |\n| \"In fact\" | remove (just state the fact) |\n| \"Interestingly\" | remove (let the reader decide if it's interesting) |\n\n#### Stiff/Formal Phrases\n\nReplace formal academic-style phrases with conversational alternatives:\n\n| ❌ Stiff | βœ“ Conversational |\n|---------|------------------|\n| \"It should be noted that\" | \"Note that\" or just state it |\n| \"One might wonder\" | \"You might wonder\" |\n| \"This enables developers to\" | \"This lets you\" |\n| \"The aforementioned\" | \"this\" or name it again |\n| \"Subsequently\" | \"Then\" or \"Next\" |\n| \"Utilize\" | \"Use\" |\n| \"Commence\" | \"Start\" |\n| \"Prior to\" | \"Before\" |\n| \"In the event that\" | \"If\" |\n| \"A considerable amount of\" | \"A lot of\" or \"Many\" |\n\n#### Playful Touches (Use Sparingly)\n\nAdd occasional human touches to make the content feel less robotic, but don't overdo it:\n\n```javascript\n// βœ“ Good: One playful comment per section\n// Callback hell - nested so deep you need a flashlight\n\n// βœ“ Good: Conversational aside \n// forEach and async don't play well together β€” it just fires and forgets:\n\n// βœ“ Good: Relatable frustration\n// Finally, error handling that doesn't make you want to flip a table.\n\n// ❌ Bad: Trying too hard\n// Callback hell - it's like a Russian nesting doll had a baby with a spaghetti monster! 🍝\n\n// ❌ Bad: Forced humor\n// Let's dive into the AMAZING world of Promises! πŸŽ‰πŸš€\n```\n\n**Guidelines:**\n- One or two playful touches per major section is enough\n- Humor should arise naturally from the content\n- Avoid emojis in body text (they're fine in comments occasionally)\n- Don't explain your jokes\n- If a playful line doesn't work, just be direct instead\n\n### Page Structure (Follow This Exactly)\n\nEvery concept page MUST follow this structure in this exact order:\n\n```mdx\n---\ntitle: \"Concept Name: [Hook] in JavaScript\"\nsidebarTitle: \"Concept Name: [Hook]\"\ndescription: \"SEO-friendly description in 150-160 characters starting with action word\"\n---\n\n[Opening hook - Start with engaging questions that make the reader curious]\n[Example: \"How does JavaScript get data from a server? How do you load user profiles, submit forms, or fetch the latest posts from an API?\"]\n\n[Immediately show a simple code example demonstrating the concept]\n\n```javascript\n// This is how you [do the thing] in JavaScript\nconst example = doSomething()\nconsole.log(example) // Expected output\n```\n\n[Brief explanation connecting to what they'll learn, with **[inline MDN links](https://developer.mozilla.org/...)** for key terms]\n\n\u003cInfo\u003e\n**What you'll learn in this guide:**\n- Key learning outcome 1\n- Key learning outcome 2\n- Key learning outcome 3\n- Key learning outcome 4 (aim for 5-7 items)\n\u003c/Info\u003e\n\n\u003cWarning\u003e\n[Optional: Prerequisites or important notices - place AFTER Info box]\n**Prerequisite:** This guide assumes you understand [Related Concept](/concepts/related-concept). If you're not comfortable with that yet, read that guide first!\n\u003c/Warning\u003e\n\n---\n\n## [First Major Section - e.g., \"What is X?\"]\n\n[Core explanation with inline MDN links for any new terms/APIs introduced]\n\n[Optional: CardGroup with MDN reference links for this section]\n\n---\n\n## [Analogy Section - e.g., \"The Restaurant Analogy\"]\n\n[Relatable real-world analogy that makes the concept click]\n\n[ASCII art diagram visualizing the concept]\n\n```\nβ”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”\nβ”‚ DIAGRAM TITLE β”‚\nβ”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€\nβ”‚ β”‚\nβ”‚ [Visual representation of the concept] β”‚\nβ”‚ β”‚\nβ””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜\n```\n\n---\n\n## [Core Concepts Section]\n\n[Deep dive with code examples, tables, and Mintlify components]\n\n\u003cSteps\u003e\n \u003cStep title=\"Step 1\"\u003e\n Explanation of the first step\n \u003c/Step\u003e\n \u003cStep title=\"Step 2\"\u003e\n Explanation of the second step\n \u003c/Step\u003e\n\u003c/Steps\u003e\n\n\u003cAccordionGroup\u003e\n \u003cAccordion title=\"Subtopic 1\"\u003e\n Detailed explanation with code examples\n \u003c/Accordion\u003e\n \u003cAccordion title=\"Subtopic 2\"\u003e\n Detailed explanation with code examples\n \u003c/Accordion\u003e\n\u003c/AccordionGroup\u003e\n\n\u003cTip\u003e\n**Quick Rule of Thumb:** [Memorable summary or mnemonic]\n\u003c/Tip\u003e\n\n---\n\n## [The API/Implementation Section]\n\n[How to actually use the concept in code]\n\n### Basic Usage\n\n```javascript\n// Basic example with step-by-step comments\n// Step 1: Do this\nconst step1 = something()\n\n// Step 2: Then this\nconst step2 = somethingElse(step1)\n\n// Step 3: Finally\nconsole.log(step2) // Expected output\n```\n\n### [Advanced Pattern]\n\n```javascript\n// More complex real-world example\n```\n\n---\n\n## [Common Mistakes Section - e.g., \"The #1 Fetch Mistake\"]\n\n[Highlight the most common mistake developers make]\n\n```\nβ”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”\nβ”‚ VISUAL COMPARISON β”‚\nβ”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€\nβ”‚ β”‚\nβ”‚ WRONG WAY RIGHT WAY β”‚\nβ”‚ ───────── ───────── β”‚\nβ”‚ β€’ Problem 1 β€’ Solution 1 β”‚\nβ”‚ β€’ Problem 2 β€’ Solution 2 β”‚\nβ”‚ β”‚\nβ””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜\n```\n\n```javascript\n// ❌ WRONG - Explanation of why this is wrong\nconst bad = wrongApproach()\n\n// βœ“ CORRECT - Explanation of the right way\nconst good = correctApproach()\n```\n\n\u003cWarning\u003e\n**The Trap:** [Clear explanation of what goes wrong and why]\n\u003c/Warning\u003e\n\n---\n\n## [Advanced Patterns Section]\n\n[Real-world patterns and best practices]\n\n### Pattern Name\n\n```javascript\n// Reusable pattern with practical application\nasync function realWorldExample() {\n // Implementation\n}\n\n// Usage\nconst result = await realWorldExample()\n```\n\n---\n\n## Key Takeaways\n\n\u003cInfo\u003e\n**The key things to remember:**\n\n1. **First key point** β€” Brief explanation\n\n2. **Second key point** β€” Brief explanation\n\n3. **Third key point** β€” Brief explanation\n\n4. **Fourth key point** β€” Brief explanation\n\n5. **Fifth key point** β€” Brief explanation\n\n[Aim for 8-10 key takeaways that summarize everything]\n\u003c/Info\u003e\n\n---\n\n## Test Your Knowledge\n\n\u003cAccordionGroup\u003e\n \u003cAccordion title=\"Question 1: [Specific question about the concept]\"\u003e\n **Answer:**\n \n [Clear explanation]\n \n ```javascript\n // Code example demonstrating the answer\n ```\n \u003c/Accordion\u003e\n \n \u003cAccordion title=\"Question 2: [Another question]\"\u003e\n **Answer:**\n \n [Clear explanation with code if needed]\n \u003c/Accordion\u003e\n \n [Aim for 5-6 questions covering the main topics]\n\u003c/AccordionGroup\u003e\n\n---\n\n## Related Concepts\n\n\u003cCardGroup cols={2}\u003e\n \u003cCard title=\"Related Concept 1\" icon=\"icon-name\" href=\"/concepts/slug\"\u003e\n How it connects to this concept\n \u003c/Card\u003e\n \u003cCard title=\"Related Concept 2\" icon=\"icon-name\" href=\"/concepts/slug\"\u003e\n How it connects to this concept\n \u003c/Card\u003e\n\u003c/CardGroup\u003e\n\n---\n\n## Reference\n\n\u003cCardGroup cols={2}\u003e\n \u003cCard title=\"Main Topic β€” MDN\" icon=\"book\" href=\"https://developer.mozilla.org/...\"\u003e\n Official MDN documentation for the main concept\n \u003c/Card\u003e\n \u003cCard title=\"Related API β€” MDN\" icon=\"book\" href=\"https://developer.mozilla.org/...\"\u003e\n Additional MDN reference\n \u003c/Card\u003e\n\u003c/CardGroup\u003e\n\n## Articles\n\n\u003cCardGroup cols={2}\u003e\n \u003cCard title=\"Article Title\" icon=\"newspaper\" href=\"https://...\"\u003e\n Brief description of what the reader will learn from this article.\n \u003c/Card\u003e\n [Aim for 4-6 high-quality articles]\n\u003c/CardGroup\u003e\n\n## Videos\n\n\u003cCardGroup cols={2}\u003e\n \u003cCard title=\"Video Title\" icon=\"video\" href=\"https://...\"\u003e\n Brief description of what the video covers.\n \u003c/Card\u003e\n [Aim for 3-4 quality videos]\n\u003c/CardGroup\u003e\n```\n\n---\n\n## SEO Guidelines\n\nSEO (Search Engine Optimization) is **critical** for this project. Each concept page should rank for the various ways developers search for that concept. Our goal is to appear in search results for queries like:\n\n- \"what is [concept] in JavaScript\"\n- \"how does [concept] work in JavaScript\" \n- \"[concept] JavaScript explained\"\n- \"[concept] JavaScript tutorial\"\n- \"JavaScript [concept] example\"\n\nEvery writing decision β€” from title to structure to word choice β€” should consider search intent.\n\n---\n\n### Target Keywords for Each Concept\n\nEach concept page targets a **keyword cluster** β€” the family of related search queries. Before writing, identify these for your concept:\n\n| Keyword Type | Pattern | Example (DOM) |\n|--------------|---------|---------------|\n| **Primary** | [concept] + JavaScript | \"DOM JavaScript\", \"JavaScript DOM\" |\n| **What is** | what is [concept] in JavaScript | \"what is the DOM in JavaScript\" |\n| **How does** | how does [concept] work | \"how does the DOM work in JavaScript\" |\n| **How to** | how to [action] with [concept] | \"how to manipulate the DOM\" |\n| **Tutorial** | [concept] tutorial/guide/explained | \"DOM tutorial JavaScript\" |\n| **Comparison** | [concept] vs [related] | \"DOM vs virtual DOM\" |\n\n**More Keyword Cluster Examples:**\n\n\u003cAccordionGroup\u003e\n \u003cAccordion title=\"Closures Keyword Cluster\"\u003e\n | Type | Keywords |\n |------|----------|\n | Primary | \"JavaScript closures\", \"closures in JavaScript\" |\n | What is | \"what is a closure in JavaScript\", \"what are closures\" |\n | How does | \"how do closures work in JavaScript\", \"how closures work\" |\n | Why use | \"why use closures JavaScript\", \"closure use cases\" |\n | Example | \"JavaScript closure example\", \"closure examples\" |\n | Interview | \"closure interview questions JavaScript\" |\n \u003c/Accordion\u003e\n \n \u003cAccordion title=\"Promises Keyword Cluster\"\u003e\n | Type | Keywords |\n |------|----------|\n | Primary | \"JavaScript Promises\", \"Promises in JavaScript\" |\n | What is | \"what is a Promise in JavaScript\", \"what are Promises\" |\n | How does | \"how do Promises work\", \"how Promises work JavaScript\" |\n | How to | \"how to use Promises\", \"how to chain Promises\" |\n | Comparison | \"Promises vs callbacks\", \"Promises vs async await\" |\n | Error | \"Promise error handling\", \"Promise catch\" |\n \u003c/Accordion\u003e\n \n \u003cAccordion title=\"Event Loop Keyword Cluster\"\u003e\n | Type | Keywords |\n |------|----------|\n | Primary | \"JavaScript event loop\", \"event loop JavaScript\" |\n | What is | \"what is the event loop in JavaScript\" |\n | How does | \"how does the event loop work\", \"how event loop works\" |\n | Visual | \"event loop explained\", \"event loop visualization\" |\n | Related | \"call stack and event loop\", \"task queue JavaScript\" |\n \u003c/Accordion\u003e\n \n \u003cAccordion title=\"Call Stack Keyword Cluster\"\u003e\n | Type | Keywords |\n |------|----------|\n | Primary | \"JavaScript call stack\", \"call stack JavaScript\" |\n | What is | \"what is the call stack in JavaScript\" |\n | How does | \"how does the call stack work\" |\n | Error | \"call stack overflow JavaScript\", \"maximum call stack size exceeded\" |\n | Visual | \"call stack explained\", \"call stack visualization\" |\n \u003c/Accordion\u003e\n\u003c/AccordionGroup\u003e\n\n---\n\n### Title Tag Optimization\n\nThe frontmatter has **two title fields**:\n- `title` β€” The page's `\u003ctitle\u003e` tag (SEO, appears in search results)\n- `sidebarTitle` β€” The sidebar navigation text (cleaner, no \"JavaScript\" since we're on a JS site)\n\n**The Two-Title Pattern:**\n\n```mdx\n---\ntitle: \"Closures: How Functions Remember Their Scope in JavaScript\"\nsidebarTitle: \"Closures: How Functions Remember Their Scope\"\n---\n```\n\n- **`title`** ends with \"in JavaScript\" for SEO keyword placement\n- **`sidebarTitle`** omits \"JavaScript\" for cleaner navigation\n\n**Rules:**\n1. **50-60 characters** ideal length for `title` (Google truncates longer titles)\n2. **Concept name first** β€” lead with the topic, \"JavaScript\" comes at the end\n3. **Add a hook** β€” what will the reader understand or be able to do?\n4. **Be specific** β€” generic titles don't rank\n\n**Title Formulas That Work:**\n\n```\ntitle: \"[Concept]: [What You'll Understand] in JavaScript\"\nsidebarTitle: \"[Concept]: [What You'll Understand]\"\n\ntitle: \"[Concept]: [Benefit or Outcome] in JavaScript\"\nsidebarTitle: \"[Concept]: [Benefit or Outcome]\"\n```\n\n**Title Examples:**\n\n| ❌ Bad | βœ“ title (SEO) | βœ“ sidebarTitle (Navigation) |\n|--------|---------------|----------------------------|\n| `\"Closures\"` | `\"Closures: How Functions Remember Their Scope in JavaScript\"` | `\"Closures: How Functions Remember Their Scope\"` |\n| `\"DOM\"` | `\"DOM: How Browsers Represent Web Pages in JavaScript\"` | `\"DOM: How Browsers Represent Web Pages\"` |\n| `\"Promises\"` | `\"Promises: Handling Async Operations in JavaScript\"` | `\"Promises: Handling Async Operations\"` |\n| `\"Call Stack\"` | `\"Call Stack: How Function Execution Works in JavaScript\"` | `\"Call Stack: How Function Execution Works\"` |\n| `\"Event Loop\"` | `\"Event Loop: How Async Code Actually Runs in JavaScript\"` | `\"Event Loop: How Async Code Actually Runs\"` |\n| `\"Scope\"` | `\"Scope and Closures: Variable Visibility in JavaScript\"` | `\"Scope and Closures: Variable Visibility\"` |\n| `\"this\"` | `\"this: How Context Binding Works in JavaScript\"` | `\"this: How Context Binding Works\"` |\n| `\"Prototype\"` | `\"Prototype Chain: Understanding Inheritance in JavaScript\"` | `\"Prototype Chain: Understanding Inheritance\"` |\n\n**Character Count Check:**\nBefore finalizing, verify your `title` length:\n- Under 50 chars: Consider adding more descriptive context\n- 50-60 chars: Perfect length\n- Over 60 chars: Will be truncated in search results β€” shorten it\n\n---\n\n### Meta Description Optimization\n\nThe `description` field becomes the meta description β€” **the snippet users see in search results**. A compelling description increases click-through rate.\n\n**Rules:**\n1. **150-160 characters** maximum (Google truncates longer descriptions)\n2. **Include primary keyword** in the first half\n3. **Include secondary keywords** naturally if space allows\n4. **Start with an action word** β€” \"Learn\", \"Understand\", \"Discover\" (avoid \"Master\" β€” sounds AI-generated)\n5. **Promise specific value** β€” what will they learn?\n6. **End with a hook** β€” give them a reason to click\n\n**Description Formula:**\n\n```\n[Action word] [what the concept is] in JavaScript. [Specific things they'll learn]: [topic 1], [topic 2], and [topic 3].\n```\n\n**Description Examples:**\n\n| Concept | ❌ Too Short (Low CTR) | βœ“ SEO-Optimized (150-160 chars) |\n|---------|----------------------|--------------------------------|\n| DOM | `\"Understanding the DOM\"` | `\"Learn how the DOM works in JavaScript. Understand how browsers represent HTML as a tree, select and manipulate elements, traverse nodes, and optimize rendering.\"` |\n| Closures | `\"Functions that remember\"` | `\"Learn JavaScript closures and how functions remember their scope. Covers lexical scoping, practical use cases, memory considerations, and common closure patterns.\"` |\n| Promises | `\"Async JavaScript\"` | `\"Understand JavaScript Promises for handling asynchronous operations. Learn to create, chain, and combine Promises, handle errors properly, and write cleaner async code.\"` |\n| Event Loop | `\"How async works\"` | `\"Discover how the JavaScript event loop manages async code execution. Understand the call stack, task queue, microtasks, and why JavaScript is single-threaded but non-blocking.\"` |\n| Call Stack | `\"Function execution\"` | `\"Learn how the JavaScript call stack tracks function execution. Understand stack frames, execution context, stack overflow errors, and how recursion affects the stack.\"` |\n| this | `\"Understanding this\"` | `\"Learn the 'this' keyword in JavaScript and how context binding works. Covers the four binding rules, arrow function behavior, and how to use call, apply, and bind.\"` |\n\n**Character Count Check:**\n- Under 120 chars: You're leaving value on the table β€” add more specifics\n- 150-160 chars: Optimal length\n- Over 160 chars: Will be truncated β€” edit ruthlessly\n\n---\n\n### Keyword Placement Strategy\n\nKeywords must appear in strategic locations β€” but **always naturally**. Keyword stuffing hurts rankings.\n\n**Priority Placement Locations:**\n\n| Priority | Location | How to Include |\n|----------|----------|----------------|\n| πŸ”΄ Critical | Title | Primary keyword in first half |\n| πŸ”΄ Critical | Meta description | Primary keyword + 1-2 secondary |\n| πŸ”΄ Critical | First paragraph | Natural mention within first 100 words |\n| 🟠 High | H2 headings | Question-format headings with keywords |\n| 🟠 High | \"What you'll learn\" box | Topic-related phrases |\n| 🟑 Medium | H3 subheadings | Related keywords and concepts |\n| 🟑 Medium | Key Takeaways | Reinforce main keywords naturally |\n| 🟒 Good | Alt text | If using images, include keywords |\n\n**Example: Keyword Placement for DOM Page**\n\n```mdx\n---\ntitle: \"DOM: How Browsers Represent Web Pages in JavaScript\" ← πŸ”΄ Primary: \"in JavaScript\" at end\nsidebarTitle: \"DOM: How Browsers Represent Web Pages\" ← Sidebar: no \"JavaScript\"\ndescription: \"Learn how the DOM works in JavaScript. Understand ← πŸ”΄ Primary: \"DOM works in JavaScript\"\nhow browsers represent HTML as a tree, select and manipulate ← πŸ”΄ Secondary: \"manipulate elements\"\nelements, traverse nodes, and optimize rendering.\"\n---\n\nHow does JavaScript change what you see on a webpage? ← Hook question\nThe **Document Object Model (DOM)** is a programming interface ← πŸ”΄ Primary keyword in first paragraph\nfor web documents. It represents your HTML as a **tree of \nobjects** that JavaScript can read and manipulate.\n\n\u003cInfo\u003e\n**What you'll learn in this guide:** ← 🟠 Topic reinforcement\n- What the DOM actually is\n- How to select elements (getElementById vs querySelector) ← Secondary keywords\n- How to traverse the DOM tree\n- How to create, modify, and remove elements ← \"DOM\" implicit\n- How browsers render the DOM (Critical Rendering Path)\n\u003c/Info\u003e\n\n## What is the DOM in JavaScript? ← 🟠 H2 with question keyword\n\nThe DOM (Document Object Model) is... ← Natural repetition\n\n## How the DOM Works ← 🟠 H2 with \"how\" keyword\n\n## DOM Manipulation Methods ← 🟑 H3 with related keyword\n\n## Key Takeaways ← 🟑 Reinforce in summary\n```\n\n**Warning Signs of Keyword Stuffing:**\n- Same exact phrase appears more than 3-4 times per 1000 words\n- Sentences read awkwardly because keywords were forced in\n- Using keywords where pronouns (\"it\", \"they\", \"this\") would be natural\n\n---\n\n### Answering Search Intent\n\nGoogle ranks pages that **directly answer the user's query**. Structure your content to satisfy search intent immediately.\n\n**The First Paragraph Rule:**\n\nThe first paragraph after any H2 should directly answer the implied question. Don't build up to the answer β€” lead with it.\n\n```mdx\n\u003c!-- ❌ BAD: Builds up to the answer --\u003e\n## What is the Event Loop?\n\nBefore we can understand the event loop, we need to talk about JavaScript's \nsingle-threaded nature. You see, JavaScript can only do one thing at a time, \nand this creates some interesting challenges. The way JavaScript handles \nthis is through something called... the event loop.\n\n\u003c!-- βœ“ GOOD: Answers immediately --\u003e\n## What is the Event Loop?\n\nThe **event loop** is JavaScript's mechanism for executing code, handling events, \nand managing asynchronous operations. It continuously monitors the call stack \nand task queue, moving queued callbacks to the stack when it's empty β€” this is \nhow JavaScript handles async code despite being single-threaded.\n```\n\n**Question-Format H2 Headings:**\n\nUse H2s that match how people search:\n\n| Search Query | H2 to Use |\n|--------------|-----------|\n| \"what is the DOM\" | `## What is the DOM?` |\n| \"how closures work\" | `## How Do Closures Work?` |\n| \"why use promises\" | `## Why Use Promises?` |\n| \"when to use async await\" | `## When Should You Use async/await?` |\n\n---\n\n### Featured Snippet Optimization\n\nFeatured snippets appear at **position zero** β€” above all organic results. Structure your content to win them.\n\n**Snippet Types and How to Win Them:**\n\n```\nβ”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”\nβ”‚ FEATURED SNIPPET TYPES β”‚\nβ”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€\nβ”‚ β”‚\nβ”‚ QUERY TYPE SNIPPET FORMAT YOUR CONTENT STRUCTURE β”‚\nβ”‚ ─────────── ────────────── ───────────────────────── β”‚\nβ”‚ β”‚\nβ”‚ \"What is X\" Paragraph 40-60 word definition β”‚\nβ”‚ immediately after H2 β”‚\nβ”‚ β”‚\nβ”‚ \"How to X\" Numbered list \u003cSteps\u003e component or β”‚\nβ”‚ numbered Markdown list β”‚\nβ”‚ β”‚\nβ”‚ \"X vs Y\" Table Comparison table with β”‚\nβ”‚ clear column headers β”‚\nβ”‚ β”‚\nβ”‚ \"Types of X\" Bulleted list Bullet list under β”‚\nβ”‚ descriptive H2 β”‚\nβ”‚ β”‚\nβ”‚ \"[X] examples\" Bulleted list or Code examples with β”‚\nβ”‚ code block brief explanations β”‚\nβ”‚ β”‚\nβ””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜\n```\n\n**Pattern 1: Definition Snippet (40-60 words)**\n\nFor \"what is [concept]\" queries:\n\n```mdx\n## What is a Closure in JavaScript?\n\nA **closure** is a function that retains access to variables from its outer \n(enclosing) scope, even after that outer function has finished executing. \nClosures are created every time a function is created in JavaScript, allowing \ninner functions to \"remember\" and access their lexical environment.\n```\n\n**Why this wins:**\n- H2 matches search query exactly\n- Bold keyword in first sentence\n- 40-60 word complete definition\n- Explains the \"why\" not just the \"what\"\n\n**Pattern 2: List Snippet (Steps)**\n\nFor \"how to [action]\" queries:\n\n```mdx\n## How to Make a Fetch Request in JavaScript\n\n\u003cSteps\u003e\n \u003cStep title=\"1. Call fetch() with the URL\"\u003e\n The `fetch()` function takes a URL and returns a Promise that resolves to a Response object.\n \u003c/Step\u003e\n \n \u003cStep title=\"2. Check if the response was successful\"\u003e\n Always verify `response.ok` before processing β€” fetch doesn't throw on HTTP errors.\n \u003c/Step\u003e\n \n \u003cStep title=\"3. Parse the response body\"\u003e\n Use `response.json()` for JSON data, `response.text()` for plain text.\n \u003c/Step\u003e\n \n \u003cStep title=\"4. Handle errors properly\"\u003e\n Wrap everything in try/catch to handle both network and HTTP errors.\n \u003c/Step\u003e\n\u003c/Steps\u003e\n```\n\n**Pattern 3: Table Snippet (Comparison)**\n\nFor \"[X] vs [Y]\" queries:\n\n```mdx\n## == vs === in JavaScript\n\n| Aspect | `==` (Loose Equality) | `===` (Strict Equality) |\n|--------|----------------------|------------------------|\n| Type coercion | Yes β€” converts types before comparing | No β€” types must match |\n| Speed | Slower (coercion overhead) | Faster (no coercion) |\n| Predictability | Can produce surprising results | Always predictable |\n| Recommendation | Avoid in most cases | Use by default |\n\n```javascript\n// Examples\n5 == \"5\" // true (string coerced to number)\n5 === \"5\" // false (different types)\n```\n```\n\n**Pattern 4: List Snippet (Types/Categories)**\n\nFor \"types of [concept]\" queries:\n\n```mdx\n## Types of Scope in JavaScript\n\nJavaScript has three types of scope that determine where variables are accessible:\n\n- **Global Scope** β€” Variables declared outside any function or block; accessible everywhere\n- **Function Scope** β€” Variables declared inside a function with `var`; accessible only within that function\n- **Block Scope** β€” Variables declared with `let` or `const` inside `{}`; accessible only within that block\n```\n\n---\n\n### Content Structure for SEO\n\nHow you structure content affects both rankings and user experience.\n\n**The Inverted Pyramid:**\n\nPut the most important information first. Search engines and users both prefer content that answers questions immediately.\n\n```\nβ”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”\nβ”‚ THE INVERTED PYRAMID β”‚\nβ”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€\nβ”‚ β”‚\nβ”‚ β”‚\nβ”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚\nβ”‚ β”‚ ANSWER THE QUESTION β”‚ ← First 100 words β”‚\nβ”‚ β”‚ Definition + Core Concept β”‚ (most important) β”‚\nβ”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚\nβ”‚ β”‚ β”‚\nβ”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚\nβ”‚ β”‚ EXPLAIN HOW IT WORKS β”‚ ← Next 300 words β”‚\nβ”‚ β”‚ Mechanism + Visual Diagram β”‚ (supporting info) β”‚\nβ”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚\nβ”‚ β”‚ β”‚\nβ”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚\nβ”‚ β”‚ SHOW PRACTICAL EXAMPLES β”‚ ← Code examples β”‚\nβ”‚ β”‚ Code + Step-by-step β”‚ (proof it works) β”‚\nβ”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚\nβ”‚ β”‚ β”‚\nβ”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚\nβ”‚ β”‚ COVER EDGE CASES β”‚ ← Advanced β”‚\nβ”‚ β”‚ Common mistakes, gotchas β”‚ (depth) β”‚\nβ”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚\nβ”‚ β”‚ β”‚\nβ”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚\nβ”‚ β”‚ ADDITIONAL RESOURCES β”‚ ← External β”‚\nβ”‚ β”‚ Related concepts, articles, videos β”‚ (links) β”‚\nβ”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚\nβ”‚ β”‚\nβ””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜\n```\n\n**Scannable Content Patterns:**\n\nGoogle favors content that's easy to scan. Use these elements:\n\n| Element | SEO Benefit | When to Use |\n|---------|-------------|-------------|\n| Short paragraphs | Reduces bounce rate | Always (2-4 sentences max) |\n| Bullet lists | Often become featured snippets | Lists of 3+ items |\n| Numbered lists | \"How to\" snippet potential | Sequential steps |\n| Tables | High snippet potential | Comparisons, reference data |\n| Bold text | Highlights keywords for crawlers | First mention of key terms |\n| Headings (H2/H3) | Structure signals to Google | Every major topic shift |\n\n**Content Length Guidelines:**\n\n| Length | Assessment | Action |\n|--------|------------|--------|\n| Under 1,000 words | Too thin | Add more depth, examples, edge cases |\n| 1,000-1,500 words | Minimum viable | Acceptable for simple concepts |\n| 1,500-2,500 words | Good | Standard for most concept pages |\n| 2,500-4,000 words | Excellent | Ideal for comprehensive guides |\n| Over 4,000 words | Evaluate | Consider splitting into multiple pages |\n\n**Note:** Length alone doesn't guarantee rankings. Every section must add value β€” don't pad content.\n\n---\n\n### Internal Linking for SEO\n\nInternal links help search engines understand your site structure and distribute page authority.\n\n**Topic Cluster Strategy:**\n\nThink of concept pages as an interconnected network. Every concept should link to 3-5 related concepts:\n\n```\n β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”\n β”Œβ”€β”€β”€β”€β”€β”€β”€β”‚ Promises │───────┐\n β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚\n β”‚ β”‚ β”‚\n β–Ό β–Ό β–Ό\n β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”\n β”‚async/await│◄──►│ Event Loop │◄──►│ Callbacks β”‚\n β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜\n β”‚ β”‚ β”‚\n β”‚ β–Ό β”‚\n β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚\n └──────►│ Call Stack β”‚β—„β”€β”€β”€β”€β”€β”€β”€β”˜\n β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜\n```\n\n**Link Placement Guidelines:**\n\n1. **In Prerequisites (Warning box):**\n```mdx\n\u003cWarning\u003e\n**Prerequisite:** This guide assumes you understand [Promises](/concepts/promises) and the [Event Loop](/concepts/event-loop). Read those first if you're not comfortable with asynchronous JavaScript.\n\u003c/Warning\u003e\n```\n\n2. **In Body Content (natural context):**\n```mdx\nWhen the callback finishes, it's added to the task queue β€” which is managed by the [event loop](/concepts/event-loop).\n```\n\n3. **In Related Concepts Section:**\n```mdx\n\u003cCardGroup cols={2}\u003e\n \u003cCard title=\"Promises\" icon=\"handshake\" href=\"/concepts/promises\"\u003e\n async/await is built on top of Promises\n \u003c/Card\u003e\n \u003cCard title=\"Event Loop\" icon=\"arrows-spin\" href=\"/concepts/event-loop\"\u003e\n How JavaScript manages async operations\n \u003c/Card\u003e\n\u003c/CardGroup\u003e\n```\n\n**Anchor Text Best Practices:**\n\n| ❌ Bad Anchor Text | βœ“ Good Anchor Text | Why |\n|-------------------|-------------------|-----|\n| \"click here\" | \"event loop guide\" | Descriptive, includes keyword |\n| \"this article\" | \"our Promises concept\" | Tells Google what page is about |\n| \"here\" | \"JavaScript closures\" | Keywords in anchor text |\n| \"read more\" | \"understanding the call stack\" | Natural, informative |\n\n---\n\n### URL and Slug Best Practices\n\nURLs (slugs) are a minor but meaningful ranking factor.\n\n**Rules:**\n1. **Use lowercase** β€” `closures` not `Closures`\n2. **Use hyphens** β€” `call-stack` not `call_stack` or `callstack`\n3. **Keep it short** β€” aim for 3-5 words maximum\n4. **Include primary keyword** β€” the concept name\n5. **Avoid stop words** β€” skip \"the\", \"and\", \"in\", \"of\" unless necessary\n\n**Slug Examples:**\n\n| Concept | ❌ Avoid | βœ“ Use |\n|---------|---------|-------|\n| The Event Loop | `the-event-loop` | `event-loop` |\n| this, call, apply and bind | `this-call-apply-and-bind` | `this-call-apply-bind` |\n| Scope and Closures | `scope-and-closures` | `scope-and-closures` (acceptable) or `scope-closures` |\n| DOM and Layout Trees | `dom-and-layout-trees` | `dom` or `dom-layout-trees` |\n\n**Note:** For this project, slugs are already set. When creating new pages, follow these conventions.\n\n---\n\n### Opening Paragraph: The SEO Power Move\n\nThe opening paragraph is prime SEO real estate. It should:\n1. Hook the reader with a question they're asking\n2. Include the primary keyword naturally\n3. Provide a brief definition or answer\n4. Set up what they'll learn\n\n**Template:**\n\n```mdx\n[Question hook that matches search intent?] [Maybe another question?]\n\nThe **[Primary Keyword]** is [brief definition that answers \"what is X\"]. \n[One sentence explaining why it matters or what it enables].\n\n```javascript\n// Immediately show a simple example\n```\n\n[Brief transition to \"What you'll learn\" box]\n```\n\n**Example (Closures):**\n\n```mdx\nWhy do some functions seem to \"remember\" variables that should have disappeared? \nHow can a callback still access variables from a function that finished running \nlong ago?\n\nThe answer is **closures** β€” one of JavaScript's most powerful (and often \nmisunderstood) features. A closure is a function that retains access to its \nouter scope's variables, even after that outer scope has finished executing.\n\n```javascript\nfunction createCounter() {\n let count = 0 // This variable is \"enclosed\" by the returned function\n return function() {\n count++\n return count\n }\n}\n\nconst counter = createCounter()\nconsole.log(counter()) // 1\nconsole.log(counter()) // 2 β€” it remembers!\n```\n\nUnderstanding closures unlocks patterns like private variables, factory functions, \nand the module pattern that power modern JavaScript.\n```\n\n**Why this works for SEO:**\n- Question hooks match how people search (\"why do functions remember\")\n- Bold keyword in first paragraph\n- Direct definition answers \"what is a closure\"\n- Code example demonstrates immediately\n- Natural setup for learning objectives\n\n---\n\n## Inline Linking Rules (Critical!)\n\n### Always Link to MDN\n\nWhenever you introduce a new Web API, method, object, or JavaScript concept, **link to MDN immediately**. This gives readers a path to deeper learning.\n\n```mdx\n\u003c!-- βœ“ CORRECT: Link on first mention --\u003e\nThe **[Fetch API](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API)** is JavaScript's modern way to make network requests.\n\nThe **[Response](https://developer.mozilla.org/en-US/docs/Web/API/Response)** object contains everything about the server's reply.\n\nMost modern APIs return data in **[JSON](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON)** format.\n\n\u003c!-- ❌ WRONG: No links --\u003e\nThe Fetch API is JavaScript's modern way to make network requests.\n```\n\n### Link to Related Concept Pages\n\nWhen mentioning concepts covered in other pages, link to them:\n\n```mdx\n\u003c!-- βœ“ CORRECT: Internal links to related concepts --\u003e\nIf you're not familiar with it, check out our [async/await concept](/concepts/async-await) first.\n\nThis guide assumes you understand [Promises](/concepts/promises).\n\n\u003c!-- ❌ WRONG: No internal links --\u003e\nIf you're not familiar with async/await, you should learn that first.\n```\n\n### Common MDN Link Patterns\n\n| Concept | MDN URL Pattern |\n|---------|-----------------|\n| Web APIs | `https://developer.mozilla.org/en-US/docs/Web/API/{APIName}` |\n| JavaScript Objects | `https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/{Object}` |\n| HTTP | `https://developer.mozilla.org/en-US/docs/Web/HTTP` |\n| HTTP Methods | `https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/{METHOD}` |\n| HTTP Headers | `https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers` |\n\n---\n\n## Code Examples Best Practices\n\n### 1. Start with the Simplest Possible Example\n\n```javascript\n// βœ“ GOOD: Start with the absolute basics\n// This is how you fetch data in JavaScript\nconst response = await fetch('https://api.example.com/users/1')\nconst user = await response.json()\nconsole.log(user.name) // \"Alice\"\n```\n\n### 2. Use Step-by-Step Comments\n\n```javascript\n// Step 1: fetch() returns a Promise that resolves to a Response object\nconst responsePromise = fetch('https://api.example.com/users')\n\n// Step 2: When the response arrives, we get a Response object\nresponsePromise.then(response =\u003e {\n console.log(response.status) // 200\n \n // Step 3: The body is a stream, we need to parse it\n return response.json()\n})\n.then(data =\u003e {\n // Step 4: Now we have the actual data\n console.log(data)\n})\n```\n\n### 3. Show Output in Comments\n\n```javascript\nconst greeting = \"Hello\"\nconsole.log(typeof greeting) // \"string\"\n\nconst numbers = [1, 2, 3]\nconsole.log(numbers.length) // 3\n```\n\n### 4. Use ❌ and βœ“ for Wrong/Correct Patterns\n\n```javascript\n// ❌ WRONG - This misses HTTP errors!\ntry {\n const response = await fetch('/api/users/999')\n const data = await response.json()\n} catch (error) {\n // Only catches NETWORK errors, not 404s!\n}\n\n// βœ“ CORRECT - Check response.ok\ntry {\n const response = await fetch('/api/users/999')\n \n if (!response.ok) {\n throw new Error(`HTTP error! Status: ${response.status}`)\n }\n \n const data = await response.json()\n} catch (error) {\n // Now catches both network AND HTTP errors\n}\n```\n\n### 5. Use Meaningful Variable Names\n\n```javascript\n// ❌ BAD\nconst x = [1, 2, 3]\nconst y = x.map(z =\u003e z * 2)\n\n// βœ“ GOOD\nconst numbers = [1, 2, 3]\nconst doubled = numbers.map(num =\u003e num * 2)\n```\n\n### 6. Progress from Simple to Complex\n\n```javascript\n// Level 1: Basic usage\nfetch('/api/users')\n\n// Level 2: With options\nfetch('/api/users', {\n method: 'POST',\n body: JSON.stringify({ name: 'Alice' })\n})\n\n// Level 3: Full real-world pattern\nasync function createUser(userData) {\n const response = await fetch('/api/users', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(userData)\n })\n \n if (!response.ok) {\n throw new Error(`Failed to create user: ${response.status}`)\n }\n \n return response.json()\n}\n```\n\n---\n\n## Resource Curation Guidelines\n\nExternal resources (articles, videos) are valuable, but must meet quality standards.\n\n### Quality Standards\n\nOnly include resources that are:\n\n1. **JavaScript-focused** β€” No resources primarily about other languages (C#, Python, Java, etc.), even if the concepts are similar\n2. **Still accessible** β€” Verify all links work before publishing\n3. **High quality** β€” From reputable sources (MDN, javascript.info, freeCodeCamp, well-known educators)\n4. **Up to date** β€” Avoid outdated resources; check publication dates for time-sensitive topics\n5. **Accurate** β€” Skim the content to verify it doesn't teach anti-patterns\n\n### Writing Resource Descriptions\n\nEach resource needs a **specific, engaging 2-sentence description** explaining what makes it unique. Generic descriptions waste the reader's time.\n\n```mdx\n\u003c!-- ❌ Generic (bad) --\u003e\n\u003cCard title=\"JavaScript Promises Tutorial\" icon=\"newspaper\" href=\"...\"\u003e\n Learn about Promises in JavaScript.\n\u003c/Card\u003e\n\n\u003c!-- ❌ Generic (bad) --\u003e\n\u003cCard title=\"Async/Await Explained\" icon=\"newspaper\" href=\"...\"\u003e\n A comprehensive guide to async/await.\n\u003c/Card\u003e\n\n\u003c!-- βœ“ Specific (good) --\u003e\n\u003cCard title=\"JavaScript Async/Await Tutorial\" icon=\"newspaper\" href=\"https://javascript.info/async-await\"\u003e\n The go-to reference for async/await fundamentals. Includes exercises at the end to test your understanding of rewriting promise chains.\n\u003c/Card\u003e\n\n\u003c!-- βœ“ Specific (good) --\u003e\n\u003cCard title=\"JavaScript Visualized: Promises \u0026 Async/Await\" icon=\"newspaper\" href=\"...\"\u003e\n Animated GIFs showing the call stack, microtask queue, and event loop in action. This is how async/await finally \"clicked\" for thousands of developers.\n\u003c/Card\u003e\n\n\u003c!-- βœ“ Specific (good) --\u003e\n\u003cCard title=\"How to Escape Async/Await Hell\" icon=\"newspaper\" href=\"...\"\u003e\n The pizza-and-drinks ordering example makes parallel vs sequential execution crystal clear. Essential reading once you know the basics.\n\u003c/Card\u003e\n```\n\n**Description Formula:**\n1. **Sentence 1:** What makes this resource unique OR what it specifically covers\n2. **Sentence 2:** Why a reader should click (what they'll gain, who it's best for, what stands out)\n\n**Avoid in descriptions:**\n- \"Comprehensive guide to...\" (vague)\n- \"Great tutorial on...\" (vague) \n- \"Learn all about...\" (vague)\n- \"Everything you need to know about...\" (clichΓ©)\n\n### Recommended Sources\n\n**Articles (Prioritize):**\n\n| Source | Why |\n|--------|-----|\n| javascript.info | Comprehensive, well-maintained, exercises included |\n| MDN Web Docs | Official reference, always accurate |\n| freeCodeCamp | Beginner-friendly, practical tutorials |\n| dev.to (Lydia Hallie, etc.) | Visual explanations, community favorites |\n| CSS-Tricks | DOM, browser APIs, visual topics |\n\n**Videos (Prioritize):**\n\n| Creator | Style |\n|---------|-------|\n| Web Dev Simplified | Clear, beginner-friendly, concise |\n| Fireship | Fast-paced, modern, entertaining |\n| Traversy Media | Comprehensive crash courses |\n| Fun Fun Function | Deep-dives with personality |\n| Wes Bos | Practical, real-world focused |\n\n**Avoid:**\n- Resources in other programming languages (C#, Python, Java) even if concepts overlap\n- Outdated tutorials (pre-ES6 syntax for modern concepts)\n- Paywalled content (unless there's a free tier)\n- Low-quality Medium articles (check engagement and accuracy)\n- Resources that teach anti-patterns\n- Videos over 2 hours (link to specific timestamps if valuable)\n\n### Verifying Resources\n\nBefore including any resource:\n\n1. **Click the link** β€” Verify it loads and isn't behind a paywall\n2. **Skim the content** β€” Ensure it's accurate and well-written\n3. **Check the date** β€” For time-sensitive topics, prefer recent content\n4. **Read comments/reactions** β€” Community feedback reveals quality issues\n5. **Test code examples** β€” If they include code, verify it works\n\n---\n\n## ASCII Art Diagrams\n\nUse ASCII art to visualize concepts. Make them boxed and labeled:\n\n```\nβ”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”\nβ”‚ THE REQUEST-RESPONSE CYCLE β”‚\nβ”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€\nβ”‚ β”‚\nβ”‚ YOU (Browser) KITCHEN (Server) β”‚\nβ”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚\nβ”‚ β”‚ β”‚ ──── \"I'd like pasta\" ────► β”‚ β”‚ β”‚\nβ”‚ β”‚ :) β”‚ (REQUEST) β”‚ [chef] β”‚ β”‚\nβ”‚ β”‚ β”‚ β”‚ β”‚ β”‚\nβ”‚ β”‚ β”‚ ◄──── Here you go! ──────── β”‚ β”‚ β”‚\nβ”‚ β”‚ β”‚ (RESPONSE) β”‚ β”‚ β”‚\nβ”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚\nβ”‚ β”‚\nβ”‚ The waiter (HTTP) is the protocol that makes this exchange work! β”‚\nβ”‚ β”‚\nβ””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜\n```\n\n---\n\n## Mintlify Components Reference\n\n| Component | When to Use |\n|-----------|-------------|\n| `\u003cInfo\u003e` | \"What you'll learn\" boxes, Key Takeaways |\n| `\u003cWarning\u003e` | Common mistakes, gotchas, prerequisites |\n| `\u003cTip\u003e` | Pro tips, rules of thumb, best practices |\n| `\u003cNote\u003e` | Additional context, side notes |\n| `\u003cAccordionGroup\u003e` | Expandable content, Q\u0026A sections, optional deep-dives |\n| `\u003cTabs\u003e` | Comparing different approaches side-by-side |\n| `\u003cSteps\u003e` | Sequential processes, numbered workflows |\n| `\u003cCardGroup\u003e` | Resource links (articles, videos, references) |\n| `\u003cCard\u003e` | Individual resource with icon and link |\n\n### Card Icons Reference\n\n| Content Type | Icon |\n|--------------|------|\n| MDN/Official Docs | `book` |\n| Articles/Blog Posts | `newspaper` |\n| Videos | `video` |\n| Courses | `graduation-cap` |\n| Related Concepts | Context-appropriate (`handshake`, `hourglass`, `arrows-spin`, `sitemap`, etc.) |\n\n---\n\n## Quality Checklist\n\nBefore finalizing a concept page, verify ALL of these:\n\n### Structure\n- [ ] Opens with engaging questions that hook the reader\n- [ ] Shows a simple code example immediately after the opening\n- [ ] Has \"What you'll learn\" Info box right after the opening\n- [ ] Major sections are separated by `---` horizontal rules\n- [ ] Has a real-world analogy with ASCII art diagram\n- [ ] Has a \"Common Mistakes\" or \"The #1 Mistake\" section\n- [ ] Has a \"Key Takeaways\" section summarizing 8-10 points\n- [ ] Has a \"Test Your Knowledge\" section with 5-6 Q\u0026As\n- [ ] Ends with Related Concepts, Reference, Articles, Videos in that order\n\n### Linking\n- [ ] All new Web APIs/methods have inline MDN links on first mention\n- [ ] All related concepts link to their concept pages (`/concepts/slug`)\n- [ ] Reference section has multiple MDN links\n- [ ] 4-6 quality articles with descriptions\n- [ ] 3-4 quality videos with descriptions\n\n### Code Examples\n- [ ] First code example is dead simple\n- [ ] Uses step-by-step comments for complex examples\n- [ ] Shows output in comments (`// \"result\"`)\n- [ ] Uses ❌ and βœ“ for wrong/correct patterns\n- [ ] Uses meaningful variable names\n- [ ] Progresses from simple to complex\n\n### Content Quality\n- [ ] Written for someone who might be new to coding\n- [ ] Prerequisites are noted with Warning component\n- [ ] No assumptions about prior knowledge without links\n- [ ] Tables used for quick reference information\n- [ ] ASCII diagrams for visual concepts\n\n### Language Quality\n- [ ] Description starts with \"Learn\" or \"Understand\" (not \"Master\")\n- [ ] No overuse of em dashes (fewer than 15 outside Key Takeaways and structured sections)\n- [ ] No AI superlatives: \"dramatically\", \"fundamentally\", \"incredibly\", \"extremely\"\n- [ ] No stiff phrases: \"one of the most important\", \"essential points\", \"It should be noted\"\n- [ ] Emphasis patterns vary (not"])</script><script>self.__next_f.push([1,"17:[\"$\",\"div\",null,{\"className\":\"mt-8\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"mb-4 text-lg font-semibold text-zinc-900 dark:text-white\",\"children\":\"Skill Details\"}],[\"$\",\"$L19\",null,{\"content\":\"$1a\"}]]}]\n"])</script><script>self.__next_f.push([1,"18:[\"$\",\"div\",null,{\"className\":\"mt-12 border-t border-zinc-200 pt-8 dark:border-zinc-800\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"mb-4 flex items-center gap-2 text-lg font-semibold text-zinc-900 dark:text-white\",\"children\":[[\"$\",\"span\",null,{\"children\":\"More from this repository\"}],[\"$\",\"span\",null,{\"className\":\"rounded-full bg-violet-100 px-2 py-0.5 text-sm font-medium text-violet-700 dark:bg-violet-900/50 dark:text-violet-300\",\"children\":5}]]}],[\"$\",\"div\",null,{\"className\":\"grid gap-3 sm:grid-cols-2\",\"children\":[[\"$\",\"$L7\",\"bfd61616-47d8-45c2-87c4-9a4f2e27bde7\",{\"href\":\"/skills/leonardomso/33-js-concepts/seo-review\",\"className\":\"flex items-center gap-3 rounded-lg border border-zinc-200 bg-white p-4 transition-colors hover:border-zinc-300 hover:bg-zinc-50 dark:border-zinc-800 dark:bg-zinc-900 dark:hover:border-zinc-700 dark:hover:bg-zinc-800/50\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-xl\",\"children\":\"🎯\"}],[\"$\",\"div\",null,{\"className\":\"min-w-0 flex-1\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-center gap-2\",\"children\":[[\"$\",\"span\",null,{\"className\":\"truncate font-medium text-zinc-900 dark:text-white\",\"children\":\"seo-review\"}],[\"$\",\"span\",null,{\"className\":\"inline-flex items-center gap-1 font-medium rounded-full bg-purple-100 text-purple-800 dark:bg-purple-900/30 dark:text-purple-300 px-2 py-0.5 text-xs \",\"children\":[[\"$\",\"span\",null,{\"children\":\"🎯\"}],[\"$\",\"span\",null,{\"children\":\"Skill\"}]]}]]}],[\"$\",\"p\",null,{\"className\":\"truncate text-sm text-zinc-500 dark:text-zinc-400\",\"children\":\"Performs comprehensive SEO audits for JavaScript concept pages to optimize search visibility, featured snippets, and ranking potential.\"}]]}]]}],[\"$\",\"$L7\",\"f54dd239-ef89-49ab-8b79-504439720d22\",{\"href\":\"/skills/leonardomso/33-js-concepts/fact-check\",\"className\":\"flex items-center gap-3 rounded-lg border border-zinc-200 bg-white p-4 transition-colors hover:border-zinc-300 hover:bg-zinc-50 dark:border-zinc-800 dark:bg-zinc-900 dark:hover:border-zinc-700 dark:hover:bg-zinc-800/50\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-xl\",\"children\":\"🎯\"}],[\"$\",\"div\",null,{\"className\":\"min-w-0 flex-1\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-center gap-2\",\"children\":[[\"$\",\"span\",null,{\"className\":\"truncate font-medium text-zinc-900 dark:text-white\",\"children\":\"fact-check\"}],[\"$\",\"span\",null,{\"className\":\"inline-flex items-center gap-1 font-medium rounded-full bg-purple-100 text-purple-800 dark:bg-purple-900/30 dark:text-purple-300 px-2 py-0.5 text-xs \",\"children\":[[\"$\",\"span\",null,{\"children\":\"🎯\"}],[\"$\",\"span\",null,{\"children\":\"Skill\"}]]}]]}],[\"$\",\"p\",null,{\"className\":\"truncate text-sm text-zinc-500 dark:text-zinc-400\",\"children\":\"Verifies technical accuracy of JavaScript documentation by rigorously checking code examples, MDN compliance, and external resources to prevent misinformation.\"}]]}]]}],[\"$\",\"$L7\",\"8adcbdae-8f2e-4885-9199-638a570a41b0\",{\"href\":\"/skills/leonardomso/33-js-concepts/test-writer\",\"className\":\"flex items-center gap-3 rounded-lg border border-zinc-200 bg-white p-4 transition-colors hover:border-zinc-300 hover:bg-zinc-50 dark:border-zinc-800 dark:bg-zinc-900 dark:hover:border-zinc-700 dark:hover:bg-zinc-800/50\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-xl\",\"children\":\"🎯\"}],[\"$\",\"div\",null,{\"className\":\"min-w-0 flex-1\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-center gap-2\",\"children\":[[\"$\",\"span\",null,{\"className\":\"truncate font-medium text-zinc-900 dark:text-white\",\"children\":\"test-writer\"}],[\"$\",\"span\",null,{\"className\":\"inline-flex items-center gap-1 font-medium rounded-full bg-purple-100 text-purple-800 dark:bg-purple-900/30 dark:text-purple-300 px-2 py-0.5 text-xs \",\"children\":[[\"$\",\"span\",null,{\"children\":\"🎯\"}],[\"$\",\"span\",null,{\"children\":\"Skill\"}]]}]]}],[\"$\",\"p\",null,{\"className\":\"truncate text-sm text-zinc-500 dark:text-zinc-400\",\"children\":\"Generates comprehensive Vitest tests for code examples in JavaScript documentation, ensuring accuracy and verifying example functionality.\"}]]}]]}],\"$L1b\",\"$L1c\"]}]]}]\n"])</script><script>self.__next_f.push([1,"1b:[\"$\",\"$L7\",\"93527d1b-2fad-4385-a5d9-b96000781be4\",{\"href\":\"/skills/leonardomso/33-js-concepts/concept-workflow\",\"className\":\"flex items-center gap-3 rounded-lg border border-zinc-200 bg-white p-4 transition-colors hover:border-zinc-300 hover:bg-zinc-50 dark:border-zinc-800 dark:bg-zinc-900 dark:hover:border-zinc-700 dark:hover:bg-zinc-800/50\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-xl\",\"children\":\"🎯\"}],[\"$\",\"div\",null,{\"className\":\"min-w-0 flex-1\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-center gap-2\",\"children\":[[\"$\",\"span\",null,{\"className\":\"truncate font-medium text-zinc-900 dark:text-white\",\"children\":\"concept-workflow\"}],[\"$\",\"span\",null,{\"className\":\"inline-flex items-center gap-1 font-medium rounded-full bg-purple-100 text-purple-800 dark:bg-purple-900/30 dark:text-purple-300 px-2 py-0.5 text-xs \",\"children\":[[\"$\",\"span\",null,{\"children\":\"🎯\"}],[\"$\",\"span\",null,{\"children\":\"Skill\"}]]}]]}],[\"$\",\"p\",null,{\"className\":\"truncate text-sm text-zinc-500 dark:text-zinc-400\",\"children\":\"Orchestrates a comprehensive end-to-end workflow for creating high-quality JavaScript concept documentation, systematically executing research, writing, testing, fact-checking, and SEO optimization.\"}]]}]]}]\n1c:[\"$\",\"$L7\",\"f614d985-e87f-41b0-b8f8-cd75f27ed4b8\",{\"href\":\"/skills/leonardomso/33-js-concepts/resource-curator\",\"className\":\"flex items-center gap-3 rounded-lg border border-zinc-200 bg-white p-4 transition-colors hover:border-zinc-300 hover:bg-zinc-50 dark:border-zinc-800 dark:bg-zinc-900 dark:hover:border-zinc-700 dark:hover:bg-zinc-800/50\",\"children\":[[\"$\",\"span\",null,{\"className\":\"text-xl\",\"children\":\"🎯\"}],[\"$\",\"div\",null,{\"className\":\"min-w-0 flex-1\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex items-center gap-2\",\"children\":[[\"$\",\"span\",null,{\"className\":\"truncate font-medium text-zinc-900 dark:text-white\",\"children\":\"resource-curator\"}],[\"$\",\"span\",null,{\"className\":\"inline-flex items-center gap-1 font-medium rounded-full bg-purple-100 text-purple-800 dark:bg-purple-900/30 dark:text-purple-300 px-2 py-0.5 text-xs \",\"children\":[[\"$\",\"span\",null,{\"children\":\"🎯\"}],[\"$\",\"span\",null,{\"children\":\"Skill\"}]]}]]}],[\"$\",\"p\",null,{\"className\":\"truncate text-sm text-zinc-500 dark:text-zinc-400\",\"children\":\"Finds, evaluates, and maintains high-quality external resources for JavaScript concept documentation, ensuring link integrity and content relevance.\"}]]}]]}]\n"])</script></body></html>