Education
flashcards
memorization
spaced-repetition

Flashcard Generator

Generate effective flashcards from notes, textbooks, or topics using spaced-repetition-friendly formatting.

The Prompt

(2 messages)
System
You are a learning scientist who creates flashcards optimized for spaced repetition systems (Anki, Quizlet, etc.).

Rules for effective flashcards:
- One fact per card (atomic knowledge)
- Front should be a clear, specific question — not "What is X?" when "What does X do when Y happens?" is more useful
- Back should be concise (1-3 sentences max)
- Use cloze deletions for definitions and processes
- Avoid "yes/no" questions — they don't test real understanding
- Include context clues when the term alone is ambiguous
- For processes/sequences, break into individual step cards
- Add tags for organization in spaced repetition apps
User
Generate flashcards:

Subject: {{subject}}
Source material: {{source}}
Number of cards: {{num_cards}}
Format: {{format}}

Variables

Fill in these inputs to customize your output:

{{subject}}

Example: JavaScript fundamentals

{{source}}

Example: Closures, the event loop, prototypal inheritance, Promise chaining, and the difference between var/let/const

{{num_cards}}

Example: 8

{{format}}

Example: Q&A (for Anki import)

Example Output

Here's what this prompt generates with the sample inputs:

Sample outputgemini-2.5-flash
{
  "cards": [
    {
      "front": "What is a closure in JavaScript?",
      "back": "A function that retains access to variables from its outer (enclosing) scope, even after the outer function has returned. The inner function 'closes over' those variables.",
      "tags": ["javascript", "closures", "scope"]
    },
    {
      "front": "What will this log and why?\nfor (var i = 0; i < 3; i++) {\n  setTimeout(() => console.log(i), 100)\n}",
      "back": "Logs: 3, 3, 3. Because var is function-scoped (not block-scoped), all callbacks share the same i, which is 3 after the loop finishes. Using let instead would log 0, 1, 2.",
      "tags": ["javascript", "closures", "var-let"]
    },
    {
      "front": "In the JavaScript event loop, what is the order of execution between: synchronous code, microtasks (Promise.then), and macrotasks (setTimeout)?",
      "back": "1. Synchronous code runs first\n2. Microtasks (Promise callbacks) run next — all of them\n3. One macrotask (setTimeout/setInterval) runs\nThen the cycle repeats: check microtasks again before the next macrotask.",
      "tags": ["javascript", "event-loop", "async"]
    },
    {
      "front": "How does prototypal inheritance differ from classical inheritance?",
      "back": "In prototypal inheritance, objects inherit directly from other objects via the prototype chain. There are no classes as blueprints — an object delegates property lookups to its prototype. JS 'class' syntax is sugar over this mechanism.",
      "tags": ["javascript", "prototypes", "inheritance"]
    },
    {
      "front": "What happens when a Promise chain has .then().then().catch()? Which errors does .catch() handle?",
      "back": "The .catch() handles rejections from any preceding .then() in the chain, not just the original Promise. Errors propagate down the chain until caught.",
      "tags": ["javascript", "promises", "error-handling"]
    },
    {
      "front": "What are the 3 differences between var, let, and const?",
      "back": "1. Scope: var is function-scoped; let and const are block-scoped\n2. Hoisting: var is hoisted and initialized as undefined; let/const are hoisted but not initialized (temporal dead zone)\n3. Reassignment: var and let can be reassigned; const cannot",
      "tags": ["javascript", "variables", "scope"]
    },
    {
      "front": "What is the temporal dead zone (TDZ)?",
      "back": "The period between entering a block and the let/const declaration being reached. Accessing the variable in this zone throws a ReferenceError, even though the variable is hoisted.",
      "tags": ["javascript", "variables", "hoisting"]
    },
    {
      "front": "What does Promise.all() do if one Promise rejects?",
      "back": "It immediately rejects with the first rejection reason. The other Promises continue executing but their results are discarded. Use Promise.allSettled() if you need all results regardless of failures.",
      "tags": ["javascript", "promises", "async"]
    }
  ],
  "import_format": "Cards can be imported to Anki as a TSV file: front[tab]back[tab]tags (space-separated)"
}

Configuration

Optimized settings included when you add this prompt. You can adjust them later.

Provider

GOOGLE

Model

gemini-2.5-flash

Temperature

0.3

Output

Structured JSON

Ready to use this prompt?

Add it to your workspace, customize the inputs, and generate your own results.

Use this prompt — free

More prompts