Guía

Cómo crear tarjetas de memoria: la guía de RepeatMe

A good card is half the memorization. This guide explains how a RepeatMe card is built, which study modes it gets and why, and how to avoid the classic traps: synonyms, dictionary vs in-context forms, discontinuous expressions. It doubles as the specification for AI: the machine version of the format lives at /prompts/v3/card-format — hand that link to any model.

How a card is built

A card is one unit of knowledge. It has one or more cases, and each case holds facts:

  • front and back — the question and its answer. One case is a regular card. Several cases make a rule card (say, the forms of to be): every review shows a random case, and the review schedule is one for the whole card.
  • accept — other forms of the answer that count as correct.
  • distractors — wrong options for the choice modes.
  • cloze — a sentence with the answer as a blank.

Only front is required. A card never lists its study modes (flip, choice, typing, a blank to fill, pairs to match): the app derives them from the facts and the deck. So a card with nothing but front and back already gets several modes, and a mode added to the app later reaches every existing card by itself. The card form shows the result under Where it shows: the modes the case gets in its deck and, for the others, why not.

An author switches modes off for a whole deck only, under Deck modes in the deck form. A learner can switch modes off for themselves too, under Learning modes in the profile.

What is shown ≠ what is accepted

  • back holds the canonical form: what the card reveals as the correct answer.
  • Accepted answers are every form a typed answer is graded correct against: the back itself, its parts separated by , or ;, and every item of accept. In a blank, the variants inside its {{ }}.

How facts become modes. A card never lists its modes: the app derives them from the facts and the deck, for every case, and a new mode reaches old cards by itself. Each case is shown in:

Mode When Built from
Flip always front → back, self-assessed
ReverseFlip the back is not empty and no other card of the deck has the same back back → front, self-assessed
Match both sides are word-sized (5 words or fewer) and the deck has enough such cards pairs of sides
Type the back is a word or a short phrase, not a whole sentence typing the back; its parts separated by , or ; and every accept item count
ReverseType as ReverseFlip, and the front is a word or a short phrase typing the front; the fronts of the card's other cases with the same back count too
Choice there are distractors, or the deck's other cards give three the back among wrong options — yours first, the rest from other cards' backs
ReverseChoice as ReverseFlip, and the deck's other cards give three fronts the front among other cards' fronts
ClozeType there is a cloze typing the blank(s)
ClozeChoice there is a cloze and options for its blank the blank among distractors (or, when the blank is the back word itself, other cards' backs)

The deck's disabled-modes switches a mode off for every card; the learner can switch modes off for themselves too.

Whose wrong options. distractors are wrong options for what the case asks. Without a cloze — for the back. With a cloze whose blank is the back word itself (back: apple / cloze: I eat an {{apple}} every day.) — for both. With a cloze that blanks only part of the back (back: Does she live in Poland? / cloze: {{Does}} she live in Poland?) — for the blank only: Do | Did | Is; the whole-sentence options then come from the deck.

So a sentence-sized case (a rule drilled by example sentences) gets Flip and the cloze modes but no typed side, and a word case gets Flip, ReverseFlip, Match, Type, Choice plus whatever its cloze adds. The reverse modes need no facts at all: the app takes them from the card and the deck. Give a fact only when you can fill it well — three plausible wrong options, a natural sentence with the blank at the decision point, every accepted typed form; a weak fact is worse than none, and without distractors the options still come from the deck.

The text format (cards)

Cards are written as plain text: one key: value per line, --- between cards. This is what the "Your AI" prompts ask a chatbot to print, and the easiest form to write by hand. The same cards take about a third of the characters they take as JSON, a cut-off answer loses one card instead of the whole deck, and the import preview says card by card what it could not read. The "Import deck" dialog, the AI paste boxes and the lesson result read it; machines get the contract at /prompts/v3/card-format.

Answers to the older prompts (v1 and v2, with a modes: key) are still imported: their modes are turned into facts.

Deck text contract (the cards format). What the "Import deck" dialog, the "Your AI" paste boxes and the lesson result read — next to deck JSON, which they accept too. A document is a header (deck keys) followed by cards. Every line is key: value with the key in column 0. A card names the facts it knows — its sides, the other accepted forms of its answer, wrong options, a sentence with a blank — and never its study modes: the app derives the modes from the facts (see the table below).

deck: English basics
description: Core vocabulary, first 100 words.
front-language: ru
back-language: en
---
front: яблоко
back: apple
distractors: banana | orange | grape
cloze: I eat an {{apple}} every day.
---
note: till and until are interchangeable; from opens the interval.
front: с … до …
back: from … till …
cloze: The shop is open {{from}} 9 a.m. {{till|until}} 6 p.m.
distractors: at | on | in

Grammar:

  • --- on a line of its own starts a new card. case: (its value is an optional label) starts another case of the same card — a rule card with many example sentences, a word with several senses. A second front: with neither in between is read as a new card.
  • A value continues on the following lines when they are indented by at least one space (Markdown inside a side, a multi-line note). A line with no key and no indent is ignored.
  • Lists — accept, distractors, tags, disabled-modes — separate items with |. Write "" for the empty option ("no word belongs here").
  • Nothing else is escaped or quoted. Reserved: a key in column 0, --- in column 0, | inside a list, {{ }} inside cloze.
  • Print the whole document inside one fenced ```cards block; anything outside the fence is ignored, so no other text belongs inside it.

Keys (the last column is the field's name in deck JSON — the same facts, written as JSON):

Where Key Meaning JSON name
header deck deck name (required) title
header description one or two sentences about the deck description
header front-language, back-language language codes (ru, en, …) of the question side — the learner's own language — and of the studied side, which drives pronunciation frontLanguage, backLanguage
header disabled-modes study modes the deck switches off for every card, e.g. disabled-modes: ReverseType, ReverseChoice; leave it out to keep every mode the facts allow disabledModes
header tags, visibility (private / unlisted / public) optional tags, visibility
card title optional label (a grammar tag, a topic); never a copy of the front title
card note note shown after the answer — a rule recap, a mnemonic; it may name the answer explanation
card format markdown when a side uses Markdown; plain text by default contentFormat
case front question side (required) — the one clean term, no asides in brackets front
case back answer side — one canonical form; empty when the answer is "no word" back
case context cue shown with the question — ONLY when the front admits more than one correct answer; never hints the answer or the rule context
case accept other forms of the back the learner may type (accept: go for a walk) accept
case distractors three plausible wrong options for what the case asks — the back, or the blank when the cloze blanks only part of the back distractors
case cloze one sentence in the studied language with the answer inside {{ }} — see the blanks rules cloze

In deck JSON a card is { "title", "explanation", "cases": [ { "front", "back", "context", "accept", "distractors", "cloze" } ] }; each case: of the text is one more element of cases.

Never write front-image, back-image, back-audio or front-audio: pictures are uploaded by the deck owner, pronunciation is attached by the server — an invented link is a broken one (E19).

Answers and blanks

A typed answer is graded against every accepted form, so most mistakes in a card are mistakes in its answer sets. These rules apply to the back with its accept and to every blank of a cloze.

Blanks and accepted forms (important). The answer of a blank sits inside the sentence:

front: Она живёт в Польше?
back: Does she live in Poland?
cloze: {{Does}} she live in Poland?
distractors: Do | Did | Is

Two different meanings of "several answers" — do not mix them up:

  • Synonyms / alternatives — ANY of them counts as correct (till / until; оба / обе) → one group, separated by |, the in-context form first: {{till|until}}. The first one is what the card reveals as the correct answer.
  • Sequence / separate blanks — ALL parts are required, each in its own place (the three forms of an irregular verb; a discontinuous from … till …) → one group per blank: cloze: The shop is open {{from}} 9 a.m. {{till|until}} 6 p.m.
  • Different senses of one word (fair = «справедливый» and «ярмарка») are one card with a case per sense, each with its own front; the reversed prompt fair then accepts every sense by itself (E18).

A group exists only for a blank — nothing that stays visible in the sentence is an answer, and nothing outside {{ }} is. Our team {{develops|builds}} new features. has one blank and one group.

When a sentence has several blanks, its distractors serve all of them: never put one blank's answer among them (it is a right answer in the sentence), and never accept a mere letter-case variant in a group ({{Polish|polish}}) — letter case is not an answer, it is what the wrong options test.

Every equally valid form goes into the group — not just one "canonical" one. Typing is graded character by character: a correct form you did not list is marked wrong and drops the card into relearning. So list everything you would accept yourself:

  • politeness and who is addressed: {{успокойтесь|успокойся}};
  • gender and number when the prompt does not fix them: {{оба|обе}}, {{рад|рада}};
  • aspect where both fit: {{остыть|остывать}};
  • equally good translations: {{till|until}};
  • a function word that may be dropped: {{go for a walk|to go for a walk}}.

Letter case, ё/е, the flavour of a quote and trailing punctuation are not answers — the app levels those itself, so do not spell such spellings out.

The same rule holds for the typed answer of the card itself: back holds one canonical form and accept lists the others (back: Успокойтесь / accept: Успокойся; back: to go for a walk / accept: go for a walk). The front needs no list: typing it in reverse accepts the front, the front without a bracketed gloss and the card's other senses.

When the correct answer is "no word belongs here" — the zero article, the zero preposition — the blank is empty and back is empty too, consistently in every fact of the case. Never invent a stand-in token (—, 0, no article): the app renders the empty answer with its own label, so the learner leaves the field empty in typed modes and picks a "no word" option in choice modes.

front: article with most country names (France, Russia)
back:
distractors: a | an | the
cloze: She lives in {{}} France.

Its sibling cases (back: the for the UK, back: a for a doctor) carry "" among their distractors for the same reason: "no article" has to stay a live option everywhere, or the learner picks the right article by elimination.

Answers and options must not contain the | character — it separates alternatives and list items.

The dictionary-form trap (citation vs in-context)

A word in its dictionary form carries service elements that must not appear inside a sentence:

  • the infinitive to: to go for a walk → in a sentence "we often go for a walk";
  • an article: an apple → "I ate the apple";
  • a copula: be keen on → "he is keen on …";
  • conjugation: wait for → "I'm waiting for …".

The rule: a blank holds the form the word actually takes in the sentence. When it differs from the canonical one, put both into the group, the in-context form first: {{go for a walk|to go for a walk}}. The back keeps the dictionary form, and the bare one goes into accept.

Generation rules (Lexical):

  • L1. Write every blank/answer in the form it takes in the sentence (drop the dictionary "to", conjugate for the subject, drop an article the sentence already provides) — per the grammar of the language in question. When the form the sentence takes is no word at all (zero article, zero preposition), write the empty blank {{}}, never a stand-in token.
  • L2. When the in-context form differs from the source word, include both, the in-context form first: {{go for a walk|to go for a walk}}.
  • L3. Synonyms/variants are separate | items — never joined with commas inside one item.
  • L4. A discontinuous expression gets one blank per part.
  • L5. Wrong options are plausible but wrong, the same kind of word as the answer, and never duplicate any accepted variant.
  • L6. The sentence is natural and grammatical.

Context, explanation and title

In the card form, context is the Context field, note is Explanation and title is Title. All three are optional, and most cards need none of them.

context and note — two different hints; do not confuse them:

  • context is shown with the question, before answering. Its only job is to resolve genuine ambiguity: set it when the front alone admits more than one correct answer, to pick the intended reading. A homonym front: front: язык → context: орган ⇒ the expected answer is tongue, not language. An article case: front: Я вижу птицу., back: I see a bird. — the bird is an equally correct translation, so context: какую-то, не конкретную selects a. The litmus test: would a different answer also be correct without the cue? If not, leave context out — no cue is the default.
  • context clarifies what the front means, never how the answer is formed: it MUST NOT contain the answer or any part of it, and it MUST NOT hint at the rule being drilled. On an a/an card, context: university starts with the consonant sound [j] recites the very rule under test and turns recall into reading — that sentence belongs in note. A learner who does not know the rule must learn nothing from context.
  • context is shown only when the prompt is the front side; the reversed modes and Match do not display it. So context cannot resolve ambiguity on the reverse side: when one back answers several different fronts (a polysemous word), make them the cases of one card — see E18. Keep the cue in context only — never bake it into front itself (front: высокий / context: о росте — NOT front: высокий (о росте)): anything inside front becomes part of the term in the reversed modes, choice options, typed answers and term listings. front holds the clean term only.
  • note (explanation in deck JSON) is shown after the answer (a lightbulb button): a rule recap, breakdown or mnemonic; it MAY reference the answer and the rule.

context sits on the case (each case of a rule card can carry its own cue); note and title belong to the whole card. Set them only when they genuinely help — empty values are the norm. When unsure, leave them out.

title: set it only when it adds information not already conveyed by front and context — a grammatical tag ("Phrasal verb"), a topic category, a register note. Never copy front verbatim into title: that just duplicates what the learner sees. In the vast majority of cards there is no title.

Knowledge type → card shape

Before writing cards, decide what kind of knowledge each one carries: a deck of capitals, a deck of words and a grammar rule need differently shaped cards. A word deck is usually translation (native ↔ studied language), a terminology deck is definition (term ↔ meaning in one language), a quiz deck is fact (question ↔ fact).

Knowledge types → card shape (decide this BEFORE writing any card):

A card is a unit of knowledge, not a single question. First classify what is being learned, then shape the card from the type. Never emit one card per example sentence: cluster the material by the underlying rule / word / contrast and put the examples into the cases of one card — a random case is shown on each review, so the learner masters the pattern instead of memorizing one string.

Knowledge type Example Card shape Facts to give Wrong options
Rule / pattern — a form choice (do/does, article, verb form, ending) questions with does 1 rule = 1 card, 6–12 cases: different sentences applying the same rule a cloze with the blank at the decision point + distractors for the blank; the sides are sentences, so no typed side minimal pairs: do/does/did, work/works
Word order / position usually before the main verb 1 pattern = 1 card, 5–8 cases back = the correct sentence, distractors = the same words in a wrong order same words, wrong order
Confusable set (interference) speak vs learn vs study 1 set = 1 card; front/back = the member + its meaning; cases alternate which member is correct a cloze per case + distractors = the other members; a context cue when the sentence alone is ambiguous the other members of the set — that is the point of the card
Word / collocation develop a service 1 word = 1 card, 2–5 cases: the same word in different sentences back = the word (+ accept), a cloze per sentence, distractors near-synonyms that are wrong here
Spelling study, not stady 1 word = 1 card back and a cloze — typing the word IS the check not needed
Fact / definition capital of X; term ↔ meaning 1 fact = 1 card, 1 case the sides; distractors only when plausible wrong facts of the same kind exist; a cloze rarely plausible facts of the same kind
  • Test one decision per prompt. Typing a whole sentence checks five things at once and blurs the error signal; a cloze blank at the exact decision point isolates what is being trained.
  • Every case and every fact tests the card's one decision. A do/does card never blanks the main verb in one of its cases — a different decision belongs on a different card.
  • A polysemous word is one card with a case per sense. fair = «справедливый» and «ярмарка» are not two cards: they share one reversed prompt, and apart the app has to drop their reversed modes. As cases of one card, the reversed prompt accepts every sense (E18).
  • Word cards keep front/back to the word itself (word ↔ meaning), never a sentence; the context sentences live in cloze. That keeps Flip clean and unlocks Match — the fastest mode to drill many word cards in one go.
  • Letter case can only be tested by choice. Typed answers are graded case-insensitively, so a capitalization rule (English, not english) needs distractors that differ by case (English vs english); the app then keeps the typed modes off that case.
  • Production beats recognition. Choosing is a stepping stone — give the word a typed form too (a word-sized back, a cloze blank) so the knowledge is eventually produced, not just recognized.
  • Rule cards need fresh examples. Vary subjects, verbs and topics beyond the sentences the learner already saw — otherwise the card tests memory of the lesson, not the rule.
  • Simplify by default. No heavy markup when it adds no value: for 3-form irregular verbs, back: go, went, gone is enough.

Recipes by knowledge type

Every recipe is a card in the text format. In JSON the same facts carry the same names (see "The JSON format").

Fact / formula / definition → the sides alone

---
front: Площадь круга
back: πr²

No other fact is needed: in a deck of similar cards this card is also shown reversed, typed, in pairs and as a choice among the other cards' answers. Add distractors when plausible wrong values of the same kind exist — the next recipe.

Fact with wrong options (road-rules style, native language)

---
front: Что означает сплошная линия разметки?
back: Пересекать запрещено
distractors: Можно перестраиваться | Только для автобусов | Парковка разрешена

The wrong options are plausible but wrong facts. They are shown first in the choice; the deck adds options of its own only when there are fewer than three.

Word → translation

---
front: яблоко
back: apple
distractors: banana | orange | grape
cloze: I eat an {{apple}} every day.

A word card gets every mode: flip, typing and choice in both directions, pairs and both cloze modes. The blank is the back word itself, so the distractors serve both the choice of the word and the blank.

Synonyms / gender variants → one accepted-forms list

An English speaker learning Russian has to type оба or обе for both. Storing back: оба, обе as one answer is the wrong shape for a word card (Match and the choice options show the whole enumeration). Instead: the canonical form on the side, the other accepted forms next to it:

---
front: both
back: оба
accept: обе

Now typing accepts both оба and обе. The reversed side needs no list: typing both is the one answer there.

A polysemous word (several senses) → one card, one case per sense

The forward side of such cases is unambiguous (справедливый → fair, ярмарка → fair), but the reverse side is not: every case prompts with the same word — fair — and context cannot help there, it is shown with the forward prompt only.

As cases of one card, the senses settle it themselves: typing the reversed prompt accepts every sense of the card, and a sibling sense is never offered as a wrong option. As two separate cards they would share a back, and the app would have to drop the reversed modes of both.

---
title: fair
front: справедливый
back: fair
distractors: unfair | honest | equal
cloze: The judge made a {{fair}} decision.
case:
front: ярмарка
back: fair
distractors: market | festival | exhibition
cloze: We went to a street food {{fair}}.

One word, one card: the senses are learned and scheduled together instead of competing for the same prompt from separate cards. title earns its place here — it names the word itself, which appears in no front.

Dictionary form with to / an article → in-context form + accepted variant

---
front: идти на прогулку
back: to go for a walk
accept: go for a walk
cloze: After dinner we often {{go for a walk|to go for a walk}} in the park.

In the sentence — go for a walk (the in-context form first); the dictionary form is kept as an accepted variant. On the back it is the other way round: the citation form is the canonical one, the bare form goes to accept.

Discontinuous expression from … till … → one blank per part

---
front: с … до …
back: from … till …
cloze: The shop is open {{from}} 9 a.m. {{till|until}} 6 p.m.
distractors: at | on | in

Two {{ }} blanks, both required. The blanks are part of the back, so distractors are the blanks' options; in the choice form a blank shows its first variant (from / till) as the right button, and until is never offered as a wrong one.

Irregular verb (3 forms) → three blanks

---
front: идти (3 формы)
back: go, went, gone
cloze: {{go}}, {{went}}, {{gone}}

Each form is checked in a blank of its own. Typing the back accepts any one of its comma-separated forms, so it is the blanks that make the learner produce all three.

Grammar rule → one card, many cases, blank at the decision point

The learner keeps mixing up do/does. Wrong: one card per corrected sentence — the sentence gets memorized, the rule doesn't. Right: one rule card where every case is a different sentence, the blank sits exactly where the decision happens, and the wrong options are the forms actually being confused:

---
title: Present Simple questions: do or does?
note: he/she/it → does; I/you/we/they → do. After does the main verb returns to its base form.
front: Она живёт в Польше?
back: Does she live in Poland?
cloze: {{Does}} she live in Poland?
distractors: Do | Did | Is
case:
front: Ты работаешь по выходным?
back: Do you work on weekends?
cloze: {{Do}} you work on weekends?
distractors: Does | Did | Are
case:
front: Почему он изучает английский?
back: Why does he study English?
cloze: Why {{does}} he study English?
distractors: do | did | is

A real card continues to 6–12 cases: vary the subjects, verbs and topics, and invent new sentences beyond the ones the learner already saw. Each review shows one random case, so the schedule tracks the rule, not any single sentence. Every case stays on the same decision the card is about — here the blank is always at do/does. A case that blanks a different word (say, the main verb) tests different knowledge and belongs on a different card. The sides are whole sentences, so the card gets Flip and the cloze modes — and no typed side, which would demand the sentence letter for letter. The blank is part of the back, so the distractors are the blank's.

A per-case context is legal in a rule card only when the front admits several correct answers. Articles are the canonical example: a Russian front has no articles, so for front Я вижу птицу. both I see a bird and I see the bird are right — context: какую-то, не конкретную picks the intended meaning, and without that cue the wrong option the would be a second correct option (an invalid choice). Never use context to restate the rule's trigger — context: university starts with the consonant sound [j] on an a/an card gives the answer away before recall. When a case has only one correct answer, leave context out; the rule recap lives in the card's note, shown after answering.

An article card also has cases where the right answer is no article at all. Write that as an empty back and an empty blank {{}}, and keep the wrong options: the zero article is exactly the decision the learner must be able to produce, so it must not be tested only by picking from a list.

---
front: артикль с большинством стран (Франция, Россия)
back:
distractors: a | an | the
cloze: She lives in {{}} France.

Its sibling cases (back: the for the UK, back: a for a doctor) carry "" among their distractors for the same reason: "no article" has to stay a live option everywhere, or the learner picks the right article by elimination.

Confusable words → one discrimination card, cases alternate the correct member

The learner mixes up speak (can use a language) and learn (the process of studying it). One card per confusable set; the other members are the wrong options, and the cases alternate which member is correct — so the learner has to discriminate, not pattern-match one fixed answer:

---
title: speak vs learn
note: speak = уметь говорить на языке; learn = учить, осваивать (процесс).
front: говорить (на языке)
back: speak
cloze: Do you {{speak}} Polish?
distractors: learn | study | talk
case:
front: учить, осваивать (язык)
back: learn
cloze: I {{learn|study}} Polish and English.
distractors: speak | talk

This is a word card, so front/back carry only the word and its meaning — the context sentences live in cloze. That keeps Flip clean (word ↔ meaning, not a sentence pair) and unlocks Match, the fastest mode for running through many word cards at once. The blank is the back word itself, so the distractors serve both the blank and the plain choice of the word. When several members genuinely fit a sentence, accept them all in one group (as {{learn|study}} above) — a wrong option must never coincide with an accepted variant. When the sentence alone does not force one reading, add a per-case context cue instead of distorting the sentence.

One word, several contexts → one card, a case per context

The learner misused a single word (make a service → should be develop a service). Focus the card on that word and show it working in different sentences — one random case per review:

---
title: Collocation: develop (software)
note: develop / build a service, an app — not "make a service".
front: разрабатывать (сервис, приложение)
back: develop
cloze: I {{develop|build}} a spaced repetition service.
case:
front: разрабатывать (сервис, приложение)
back: develop
cloze: We {{develop|build}} mobile apps for banks.
distractors: make | do | invent
case:
front: разрабатывать (сервис, приложение)
back: develop
cloze: Our team {{develops|builds}} new features every month.

The typed answer is always the word, never the whole sentence. Note the third case: the in-context form (develops) comes first in its group, per the blanks rules — and the back stays the dictionary form, because that is what the word card reveals and what Match pairs.

Complete deck example

A valid sample deck in which every mode is derived for at least one card. It can be pasted into the "Import deck" dialog as is:

deck: English basics — sample
description: A tiny sample deck showing every key.
front-language: ru
back-language: en
---
front: яблоко
back: apple
distractors: banana | orange | grape
cloze: I eat an {{apple}} every day.
---
front: язык
back: tongue
context: орган
---
title: Phrasal verb
front: идти на прогулку
back: to go for a walk
accept: go for a walk
cloze: After dinner we often {{go for a walk|to go for a walk}} in the park.
---
note: till и until взаимозаменяемы; from задаёт начало интервала.
front: с … до …
back: from … till …
cloze: The shop is open {{from}} 9 a.m. {{till|until}} 6 p.m.
distractors: at | on | in
---
note: be – was/were – been.
front: быть (3 формы)
back: be – was/were – been
cloze: {{be}}, {{was|were}}, {{been}}
case:
front: он устал (Present Simple, to be)
back: he is tired

The JSON format

The same facts as JSON, one field per key of the text format. Exports, the REST API and the agent API speak it, and the "Import deck" dialog and every paste box accept it. A JSON file with the older modes lists (an export from an earlier version, an answer to the v1 prompt) is imported too: its modes are turned into facts.

Deck JSON contract. The deck object the "Import deck" dialog, POST /api/decks/import-json and the agent API take — the same facts as the cards text, one JSON field per key. Cards carry no deckIds: the deck itself is created by the import.

{
  "title": "string",                  // deck name (required)
  "description": "string | null",
  "frontLanguage": "ru",              // language of the question side (front) — the learner's native language (optional)
  "backLanguage": "en",               // language of the studied side (back) — drives pronunciation (optional)
  "disabledModes": [],                // study modes the deck switches off for every card (optional)
  "cards": [
    {
      "title": "string | null",       // optional label; never copy the front — set it only when it adds information
      "explanation": "string | null", // post-answer note (rule recap / mnemonic); MAY reference the answer
      "contentFormat": "PlainText",   // or "Markdown"
      "cases": [
        {
          "front": "string",          // question side (usually the native language), required
          "back": "string",           // answer side (usually the studied language); "" = "no word belongs here"
          "context": "string | null", // cue shown WITH the question; set ONLY when several answers would be correct without it
          "accept": ["string"],       // other forms of the back the learner may type (optional)
          "distractors": ["string"],  // three plausible wrong options for what the case asks (optional)
          "cloze": "string | null"    // a sentence with the answer in {{ }}: "I eat an {{apple}} every day."
        }
      ]
    }
  ]
}

Leave out what a case does not need — an absent field and an empty one mean the same. Never write frontImage, backImage, backAudio or frontAudio (E19), and never a modes list: the modes are derived from these facts. Where the rules below quote a field in the cards text notation (back: apple, case:), read note as explanation, each case: as one more element of cases, and a |-separated list as a JSON array.

The sample deck in JSON — the same cards as in the text example:

{"title":"English basics — sample","description":"A tiny sample deck showing every key.","frontLanguage":"ru","backLanguage":"en","cards":[{"cases":[{"front":"яблоко","back":"apple","distractors":["banana","orange","grape"],"cloze":"I eat an {{apple}} every day."}]},{"cases":[{"front":"язык","back":"tongue","context":"орган"}]},{"cases":[{"front":"идти на прогулку","back":"to go for a walk","accept":["go for a walk"],"cloze":"After dinner we often {{go for a walk|to go for a walk}} in the park."}],"title":"Phrasal verb"},{"cases":[{"front":"с … до …","back":"from … till …","distractors":["at","on","in"],"cloze":"The shop is open {{from}} 9 a.m. {{till|until}} 6 p.m."}],"explanation":"till и until взаимозаменяемы; from задаёт начало интервала."},{"cases":[{"front":"быть (3 формы)","back":"be – was/were – been","cloze":"{{be}}, {{was|were}}, {{been}}"},{"front":"он устал (Present Simple, to be)","back":"he is tired"}],"explanation":"be – was/were – been."}]}

Pictures and pronunciation

A picture is added in the card form: Upload your own or Find a picture in free photo libraries (Pixabay, Wikimedia Commons, Pexels); the chosen one is saved together with its author and license. A picture on the front is shown with the question, one on the back only after the answer. Pronunciation of the studied word comes from public recordings: Find pronunciation in the card form. Do not write picture or audio links into the text or JSON: a link made up by hand or by a chatbot is almost always broken.

Checklist before importing

The app checks AI answers against these rules: the notes that Copy the notes for your AI hands back to the chat cite them by number.

Validity checklist:

  • E1. Every case has a front (back may be empty — see E16).
  • E2. A cloze holds at least one {{ }} blank — exactly one group per blank.
  • E3. Every answer set — a {{ }} group, the back with its accept — is non-empty, the in-context form first. An item in it may be empty — that is the answer "no word belongs here" (E16).
  • E4. Synonyms are separate items — never a, b as one item.
  • E5. The in-context form is grammatical in its sentence (no "we often to go", no "is be keen on").
  • E6. Wrong options are wrong and never coincide with any accepted variant — with several blanks in one sentence, with the answer of any of them.
  • E7. A fact is given only when it can be filled well: no filler distractors, no stilted cloze. A card meant only to be flipped carries neither — its other modes come from the deck.
  • E8. Answers and options contain no | character (it is a reserved separator).
  • E9. Typed answers — the back of a word card with its accept, every blank — are a word or a short phrase. A sentence-sized back is fine (the app does not ask to type it), but a decision inside it is tested with a cloze blank at that exact point.
  • E10. A rule/pattern card carries several cases (aim for 6+), each a different example sentence; one rule is never split into one card per sentence.
  • E11. distractors are minimal pairs of the tested decision (do/does/did) — wrong here, yet plausibly confusable; never random unrelated words.
  • E12. A distinction typing cannot see — letter case alone (English vs english) or ё/е alone (всё vs все) — is tested with distractors that differ by exactly that. The app then shows the case in choice modes only (typing folds case and ё, so it would accept the wrong form); never put such a variant into accept.
  • E13. Every case and every fact of a card tests the card's one decision. A do/does card never blanks the main verb in one of its cases — a different decision is a different card.
  • E14. Word cards keep front/back to the word itself (word ↔ meaning), never a whole sentence; the context sentences go into cloze. That keeps Flip clean and unlocks Match. And to one form, not a list: upside down; inverted; wrong way up reaches the learner as an enumeration in Match and in the choice options. Equally good wordings are accept items (E17); different senses are different cases with a context (E15).
  • E15. context is set only when the front admits more than one correct answer; it picks the intended reading and never hints at the answer or the rule being drilled (rule recaps live in note).
  • E16. When the correct answer is the absence of a word (zero article, zero preposition), it is written as empty — in back and in the blank ({{}}) alike, consistently across the case. Never a stand-in token (—, 0, no article): the app supplies its own label.
  • E17. Every form you would accept is its own item: politeness (успокойтесь/успокойся), gender and number (оба/обе), equally good synonyms (till/until). Listing them inside one string (оба, обе as one accept item) does not work — the learner would have to type that list verbatim. Letter case, ё/е and edge punctuation need no listing. The converse holds too: an answer the learner owes in full (red, green, blue) and a single slashed term (and/or) are one item.
  • E18. One question, one set of right answers. Two cases of a card (or two cards of a deck) must not answer the same prompt differently — the learner would be guessing which one is being asked. Same front, different back: a distinct context per case settles it (E15). Same back, different front (a polysemous word): context cannot, the reversed modes never show it — make the senses the cases of one card, and the reversed prompt accepts every sense by itself. Two separate cards with one back lose their reversed modes.
  • E19. Never invent a picture or audio link: no front-image, back-image, back-audio, front-audio. Pictures are uploaded by the deck owner and pronunciation is attached by the server; a guessed url is a broken picture, and a broken picture is worse than none.

Creating cards with AI

You do not have to author cards by hand — there are three paths:

  • Basic AI — the "Create with AI" button on the decks page: describe the deck in free text, edit the plan and get ready cards.
  • Your AI — the same dialog assembles a ready prompt: copy it into any chatbot (ChatGPT, Claude, Gemini) and paste the answer back — the ```cards block it prints, or JSON if it insists. "Fill with AI" in the card form and in bulk edit works the same way.
  • An external chat after a lesson — if you have just studied a topic with an AI chat, give it the /prompts/v3/deck-builder link: it will ask a couple of clarifying questions about your weak spots, build a deck and hand you the text to import.

Importing

  1. Open the decks page and press "Import deck" (or follow /decks?import=1 — the dialog opens by itself).
  2. Paste the text: the dialog reads a ```cards block, a deck JSON object { "title", …, "cards": [ … ] }, a bare card array [ { "cases": … }, … ] or one front — back pair per line — the title is taken from the text when it names one, else from the dialog's name field.
  3. Read the preview — how many cards were found and, card by card, anything that could not be read — and confirm: the deck and all its cards are created in one step.

A single card can be pasted into the JSON tab of the card form.