Jak tworzyć fiszki — przewodnik 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:
frontandback— 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
backholds the canonical form: what the card reveals as the correct answer.- Accepted answers are every form a typed answer is graded correct against: the
backitself, its parts separated by,or;, and every item ofaccept. 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 secondfront: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,{{ }}insidecloze. - 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 promptfairthen 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:
contextis 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 istongue, notlanguage. An article case:front: Я вижу птицу.,back: I see a bird.— the bird is an equally correct translation, socontext: какую-то, не конкретнуюselects a. The litmus test: would a different answer also be correct without the cue? If not, leavecontextout — no cue is the default.contextclarifies 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 innote. A learner who does not know the rule must learn nothing fromcontext.contextis shown only when the prompt is thefrontside; the reversed modes andMatchdo not display it. Socontextcannot resolve ambiguity on the reverse side: when onebackanswers several different fronts (a polysemous word), make them the cases of one card — see E18. Keep the cue incontextonly — never bake it intofrontitself (front: высокий/context: о росте— NOTfront: высокий (о росте)): anything insidefrontbecomes part of the term in the reversed modes, choice options, typed answers and term listings.frontholds the clean term only.note(explanationin 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/backto the word itself (word ↔ meaning), never a sentence; the context sentences live incloze. That keepsFlipclean and unlocksMatch— 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
distractorsthat differ by case (Englishvsenglish); 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, aclozeblank) 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, goneis 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(backmay be empty — see E16). - E2. A
clozeholds at least one{{ }}blank — exactly one group per blank. - E3. Every answer set — a
{{ }}group, thebackwith itsaccept— 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, bas 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 stiltedcloze. 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
backof a word card with itsaccept, every blank — are a word or a short phrase. A sentence-sizedbackis fine (the app does not ask to type it), but a decision inside it is tested with aclozeblank 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.
distractorsare 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 (
Englishvsenglish) orё/еalone (всёvsвсе) — is tested withdistractorsthat 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 intoaccept. - 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/backto the word itself (word ↔ meaning), never a whole sentence; the context sentences go intocloze. That keepsFlipclean and unlocksMatch. And to one form, not a list:upside down; inverted; wrong way upreaches the learner as an enumeration inMatchand in the choice options. Equally good wordings areacceptitems (E17); different senses are different cases with acontext(E15). - E15.
contextis 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 innote). - E16. When the correct answer is the absence of a word (zero article, zero preposition), it is
written as empty — in
backand 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 oneacceptitem) 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, differentback: a distinctcontextper case settles it (E15). Sameback, differentfront(a polysemous word):contextcannot, 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 onebacklose 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-builderlink: it will ask a couple of clarifying questions about your weak spots, build a deck and hand you the text to import.
Importing
- Open the decks page and press "Import deck" (or follow
/decks?import=1— the dialog opens by itself). - Paste the text: the dialog reads a ```cards block, a deck JSON object
{ "title", …, "cards": [ … ] }, a bare card array[ { "cases": … }, … ]or onefront — backpair per line — the title is taken from the text when it names one, else from the dialog's name field. - 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.