User Manual

Getting started

A structured system for learning anything deeply. From calculus to Python programming. Everything you need to use the app effectively.

Back to homepage

Getting Started in 5 Steps

01
Create a subject

Click "+ Add subject" at the bottom of the left sidebar. Give it a clear name and pick a colour. One subject, one page. You can promote topics to their own sub-pages later when they grow complex enough to need it.

02
Dump all topics into Uncategorised

Click "+ Add topic" in the Topic Board header. Do not organise yet. Get everything out of your head first. Once they are all visible, drag cards into Core, Important Detail, or Additional Details. Then Ctrl+click two cards to draw a connection between them and describe the relationship.

03
Add your first questions

Click "+ Add question" in the Questions header. Write the question, then click topic names to link it to them. Every question starts at Unknown.

04
Go study. Come back and advance questions as your understanding shifts.

Click any stage dot on a question row to set its stage. When something blocks you, open Deep Dive and use the "Feeling Blocked?" section at the bottom to mark the question as stuck.

05
Work through the depth checks

Click "Deep Dive" on any question at "I Can Explain It". Complete at least two of the six depth check sections by writing answers in the text areas and ticking them. Once two are done, the Advance button unlocks and you can move the question to "I Can Use It".

Do not wait until the Topic Board is perfectly organised before adding questions. Do not wait until all questions are in before starting to study. Structure emerges from use, not from planning.

The goal is not a perfectly filled app. The goal is knowledge you can actually use.

What is this app?

Most people learn by collecting notes, watching videos, and hoping things stick. The problem is not effort, it is structure. Without structure, learning feels productive but results in shallow retention and isolated knowledge that cannot be applied when it matters.

This app gives your learning a system. It helps you capture what you are trying to understand, organise it into meaningful topics, track how well you actually know each thing, and then deeply interrogate that knowledge until it becomes genuinely yours.

It works for any complex subject. Theoretical topics like calculus, procedural topics like Python programming, or anything in between.

The core insight: Most people confuse exposure with understanding. Seeing information once, even understanding it in the moment, is not the same as owning it. This app forces the gap between those two things into view, and gives you the tools to close it.

The Layout

The app is organised into one page per subject. Each page has three sections arranged in an L-shape:

1 - Top left
Subjects: Your list of subjects. Click any subject name to open it. Right-click a subject for edit, duplicate, or delete options. Click "+ Add subject" at the bottom to create a new one.
2 - Bottom
Topic Board: Where you lay out all the topics of your subject across four columns. Drag cards to reorder or move them between columns. Ctrl+click two cards to connect them. Shift+click adjacent cards in the same column to group them.
3 - Middle
Questions: Every question you have about the subject. Click a stage dot (to the right of the question) or the "advance button" on the question itself to set or advance a question's stage. Click "Deep Dive" to open the full study panel for that question. Drag one question on top of another to merge them.
4 - Right
Track your understanding: Six depth check columns sit next to every question row: Teach, Scenario, Limits, Contrast, Mistakes, Apply. Click any cell to tick it. Hover over a cell and click the pencil icon to write a note for that check. All six columns are visible across every question at once without opening anything.

You can drag the horizontal divider between the Questions section and the Topic Board up or down to give more screen space to whichever you are using. The "understanding" panel that opens on the right after you clicik the "deep dive" button on any question can be resized by dragging its left edge.

DaCosta Thinklab interface

The Topic Board

The Topic Board is where you build the structure of your knowledge. A topic is anything you need to learn: a concept, a technique, a tool, a term. Topics do not need to be understood yet. They just need to exist so nothing gets lost.

Adding topics

Click "+ Add topic" in the Topic Board header. A modal appears with the following fields. The name is required; everything else is optional.

Name
The topic name. Keep it short and specific. "Selecting objects" is better than "How object selection works in Cinema 4D for scripting purposes".
Type
An optional category shown as a small badge on the card. Options are 'Concept', 'Mechanism', 'Method / Technique', 'Problem / Use Case', 'Constraint / Limit', and 'Tool / Object'. Pick the one that best describes what kind of knowledge this is. Type choices
Order number
An optional number shown in the card's left side when sequence matters, such as steps in a process or chapters in a course. Numbered topics
Starter questions
Tick "Generate starter questions" to have the app create a set of pre-written questions based on the topic type and name. A second screen appears showing the suggested questions. Tick which ones to include, edit their text if needed, and confirm. The selected questions are added to your Questions section already linked to this topic. This is the fastest way to seed questions without starting from a blank page.

Right-click any card at any time to edit its name, type, number, or to retire it. Retired topics are hidden but not deleted; a toggle in the Topic Board header (on the top right) reveals them.

The four columns

Drag any topic card left or right to move it between columns. The columns are not labels you assign once. They should reflect your current understanding of the subject and you should update them as that understanding deepens.

Uncategorised
Just collected. You do not yet know where it fits.
Core / Foundational
Everything else depends on or connects to this. Without it, other topics make no sense.
Important Detail
Directly supports or extends a core topic. Significant but not foundational on its own.
Additional Details
Useful context, edge cases, or niche knowledge. Worth knowing but not always urgent.

To reorder cards within a column, drag them up or down. To move multiple cards at once, click and drag across empty column space to draw a selection rectangle, then drag any selected card and the rest follow. Right-click a column header to rename it if the default label does not fit your subject.

What a topic card shows

Each card gives you live information about that topic's state without opening anything.

Type badge
A small icon and label below the card name showing the type you assigned. Type indicator
Strength bar
A thin horizontal bar across the bottom of the card. It fills automatically based on how far the linked questions have progressed through the four stages. You never set this manually. A full bar means the linked questions are mostly at "I Can Use It". Strength indicator
Question count
A small chip showing how many questions are linked to this topic. Depth indicator
Stuck dot
A red dot in the top-right corner when any linked question is marked as stuck. This keeps blocked topics visible without scanning every question. Stuck indicator
Linked subject badge
When a topic has been promoted to its own full subject page, a badge shows the linked subject name. Click it to navigate to that subject directly. Linked subject
Colour group border
A coloured background and border shared by all cards in the same group, with a label at the bottom of the group box. Colour grouping

Drawing connections between topics

Ctrl+click the first card, then Ctrl+click the second. A bar appears at the top of the Topic Board showing both card names. In that bar, open the dropdown and select a relationship type such as Requires, Leads to, Extends, or Causes. Then type a one-sentence description of the specific relationship in the text field. Click "Add connection". A curved arrow appears between the two cards, colour-coded by its relationship type, with the first letter of the label on the curve. Hover over any arrow to read the full sentence in the header bar.

To create a custom connection type that does not exist in the list, select "+ Custom..." from the dropdown. A small modal opens where you define the label and colour. That type is then available for all future connections in this subject.

To edit or delete an existing connection, click "Connections" in the Topic Board header to open the Connection Manager. Every connection is listed with its two endpoints, editable label, sentence, colour, and line style. Click the X on any row to delete it. Changes save immediately.

Grouping topics

Shift+click two or more cards that are adjacent in the same column. A bar appears at the top of the Topic Board showing the count selected and whether they are contiguous. Cards must be adjacent; the bar shows a warning if they are not. Once "Ready to group" appears, click the "Group" button in the bar. A modal opens where you type the group name, pick a colour, and optionally choose an icon from the icon picker. Click "Create group". The selected cards get a shared coloured border and a named label at the bottom of the group box. To delete a group, right-click the group label area and select the delete option.

Promoting a topic to its own subject

Right-click any topic card and select "Promote to subject". A new subject is created named after that topic and linked to the original card. The card stays on the parent board with a badge showing the linked subject's name. Click that badge to navigate to the new subject. Use this when a single topic grows complex enough to need its own full Topic Board and Questions section rather than just a few linked questions.

A topic might be a secondary detail in a specific subject, but it might warrants its own dedicated subject page for you to learn that topic in much more depth in its own isolated environment.

Questions

Every question you have about your subject lives here. Each question tracks one thing: how well you actually understand the answer right now. The stage is yours to set, and you move it forward only when your understanding genuinely shifts.

Adding questions

Click "+ Add question" in the Questions header. A modal opens. Type your question in the text area, then click topic names below to link the question to them. You can link one question to multiple topics. Click "Add question" to confirm. The question appears in the list at the Unknown stage.

If no topics apply yet, leave the list empty. Unlinked questions collect in a separate "Unlinked" group at the bottom of the Questions section. To link a question later, right-click it and select "Edit question". The same modal reopens with all fields editable.

The four stages

Each question row shows four stage dots on the right side. The filled dot is the current stage. Click any dot to jump directly to that stage. The stages are intentionally honest. It's recommended not to move a question to "I Can Explain It" when you cannot.

Unknown
You have the question but no real answer yet. Every question starts here.
I've Seen It
You have come across relevant material (for example: a YouTube video or book chapter). You could not explain it if asked yet.
I Can Explain It
You could give a reasonable answer from memory. Not fully confident in unfamiliar contexts yet.
I Can Use It
You can explain it clearly and have completed at least two depth checks. The Advance button is mechanically locked until those two checks exist. If it is locked, a message appears in the panel telling you to open Deep Dive and complete the checks first.

Linking questions to topics

When a question is linked to a topic, a coloured tag appears on the question row showing the topic name. The tag colour matches the column that topic is in. To change links after creation, right-click the question and select "Edit question". Toggle topics on or off in the modal and confirm.

Linking questions
Link confirmation

Filtering by topic

Click any topic card in the Topic Board below to select it. Then toggle the filter button at the top of the Questions header to show only questions linked to that topic. Click the filter button again to return to showing all questions. This is essential for focused study sessions where you want to work through one area without distraction from the rest of the subject.

Sorting and view options

Click the hamburger menu in the Questions header to reveal additional controls. You can sort by stage (best to worst or worst to best), alphabetically, or by newest first. You can switch to a compact "thin" view that shows more questions on screen with less detail per row. Pinned questions always stay at the top regardless of sort order. To pin a question, right-click it and select "Pin question". To unpin, right-click again and select "Unpin question".

sorting

Question evolution: merging one question into another

As you study, a vague early question often becomes obsolete once a sharper one replaces it. To absorb the old question into the new one, drag the older question by its row and drop it directly on top of the newer, sharper question. A confirmation modal appears showing both questions. Confirm the merge. The old question disappears from the main list. Its text is preserved inside the new question as a strikethrough line with a small arrow indicator showing it is a predecessor. To restore it as an independent question, right-click the strikethrough line and select the restore option.

Example: "How do I get the selected object in Cinema 4D?" becomes obsolete once you learn there are two methods. Drag it onto "When do I use GetActiveObject() vs GetActiveObjects()?" and the original is preserved as a strikethrough ancestor inside the sharper question.

Dependency chains

If one question cannot be understood until another is clear, you can link them in a sequence. Open a question's Deep Dive panel and scroll to the "This depends on" section near the top. Click it to open a search field. Type part of any other question's text and select it from the list that appears. Once linked, both questions show a small chain badge: position 1 means it should be learned first, 2 means it depends on something, and higher numbers extend the chain. Use this to make learning order explicit when your questions have a genuine prerequisite structure.

The Stuck indicator

If a question is genuinely blocking you, open its Deep Dive panel and look at the "Feeling Blocked?" section at the bottom. Three options appear: Missing Something (you lack a prerequisite or resource), I Don't Get It (it makes no sense yet), or Not Confident Using It (you understand it but would probably apply it wrong). Click the one that matches. It highlights in red. A red dot appears on the question row. The parent topic card also shows a red dot in its corner. To clear the stuck status, open Deep Dive again and click the active option to toggle it off.

Quiz Mistakes

Quiz Mistakes is a flashcard-style review mode built entirely from mistakes you log yourself inside individual Deep Dive panels. Here is the full workflow.

Adding quiz questions (inside Deep Dive): Open any question's Deep Dive panel and scroll to the Mistakes section. Below the personal mistakes list there is an "Add to Mistake Quiz" area. Click "+ Add your question" and type a quiz question designed to catch that mistake again, for example "What does GetActiveObject() return when three objects are selected?" Add as many as you want across different questions. Each one is stored against the question it came from.

Running the quiz: Click the "Quiz Mistakes" button in the Questions header. The panel opens. If you have quiz questions, one appears at random. Try to answer it mentally. Click "Show context" to reveal the original question it came from. Click "Next question" to move to the next one. The quiz cycles through all active questions in random order.

Managing the quiz: Click "Manage" in the Quiz panel header to enter manage mode. Here you see two controls. First, a topic filter list with checkboxes: unchecking a topic removes all of its quiz questions from the active rotation. Second, an individual question list where you can uncheck specific quiz questions to disable them without deleting them. Click "Done" to return to quiz mode. Only the active (checked) questions will appear in the rotation.

Confusing Terms

Confusing Terms captures words and phrases that keep interrupting your understanding as you write. It is not a glossary you build manually.

How to add a term: Open any question's Deep Dive panel. In the "My current understanding" rich text editor, type or paste your notes. Select any word or phrase that confuses you. In the formatting toolbar above the editor, click the "Confusing term" button on the right side. The selected text is saved immediately and a toast notification confirms it. If you flag the same term three or more times, the toast offers a direct shortcut to create a question for it.

Viewing and acting on terms: Click the "Confusing terms" button in the Questions header (it shows a count badge when terms exist). The drawer opens listing every saved term. Terms flagged more than once show a count badge. Each term has three action buttons: "+ Question" opens the add question modal to create a question about that term, "+ Topic" opens the add topic modal to create a topic for it, and the X button deletes the term. Use this list regularly to convert accumulated confusion into concrete questions and topics.

Test Your Understanding

Reaching "I Can Explain It" means you can describe the answer. That is not the same as owning it. Owning it means knowing when to use it, where it fails, what mistakes you are likely to make, and whether you have actually applied it in the real world. The six depth checks close that gap.

The checks live in two places. The six depth columns on every question row let you tick checks at a glance across your entire question list. The Deep Dive panel gives you a writing space for each check with prompts. Both update the same state.

Using the depth columns on the question row

Each question row has six small square cells on the far right, one per check. Click any cell to tick it. A ticked cell turns teal (amber for Apply). Click it again to untick. To write a note for a check without opening Deep Dive, hover over any cell and click the small pencil icon that appears. A compact note panel slides up from the bottom of the screen with the prompt for that check visible above a text area. Write your notes and close the panel. The note is saved against that specific check for that question.

Using the Deep Dive panel

Click "Deep Dive" on any question row to open its full study panel on the right. Drag the panel's left edge to resize it. While a panel is open, press the up and down arrow keys to move to the previous or next question in the list without closing and reopening. Each depth check appears as a collapsible section. Click the section header to expand it. Prompts appear above a text area where you write your answer. Aim for 1 to 4 lines. If your answer is several paragraphs, you are writing notes, not interrogating your understanding. Click the checkbox on the right of the header to mark the section complete. The header turns teal to confirm.

The six depth checks

# Check What it asks and how to complete it
1
Teach
Write an explanation of this concept from memory, in plain language, as if talking to someone who has never heard of it. No jargon. No looking at your notes. 3 to 5 sentences. If you get stuck mid-sentence, note exactly where you lose clarity. That is the gap. Tick the check only when you can produce a complete, jargon-free explanation without going back to your sources.
2
Scenario
Name one specific real situation where this concept matters. Not a hypothetical. A concrete moment: what is happening, what decision is being made, and how does this concept guide that decision. Tick the check when your scenario is specific enough that someone else could visualise exactly what is happening.
3
Limits
Describe when this concept does not apply, gives the wrong result, or breaks down. Give at least one concrete example of a situation where you would not use it or where it fails. Tick the check when you have identified at least one real boundary condition with a concrete case.
4
Contrast
Name the thing most similar to this concept that you might confuse it with. Describe what overlaps between them, then state the key difference. Finish by explaining in which situation you would choose one over the other. Tick the check when you can distinguish the two clearly enough to explain the choice to someone else.
5
Mistakes
This section has two parts. In the top text area, write common pitfalls: what usually goes wrong, what the tempting-but-wrong approach looks like, what beginners typically misunderstand. Below that, click "+ Add my mistake" to log personal mistakes from your own attempts. Each mistake entry is a text field with a "No Longer an Issue" checkbox to mark it resolved once you have corrected it. In the "Add to Mistake Quiz" area below, click "+ Add your question" to write a quiz question designed to catch this mistake again. These questions feed directly into the Quiz Mistakes panel. You do not tick this check manually. It ticks automatically when any content exists in either the text area or the personal mistakes list.
6
Apply
This check cannot be ticked directly. Three sub-options appear. Check whichever are true: "Used to solve a real problem", "Tested on a concrete example", or "Used to make a decision". Checking any one of them marks Apply as complete automatically and the cell turns amber. You must have actually done one of those three things. Completing Apply is what makes "I Can Use It" meaningful rather than just a stage you clicked.

The Advance button and stage gate

At the bottom of the Deep Dive panel is an Advance button. It is greyed out and locked until at least two depth checks are complete. The gate only applies to the final step from "I Can Explain It" to "I Can Use It". If you click the stage dot on the question row directly, the same gate applies and a tooltip explains that you need to open Deep Dive and complete two checks first.

If you have personal mistakes logged under the Mistakes check that are not yet marked as resolved, the app shows a modal before advancing. It lists the unresolved mistakes and asks whether you are past them. You can confirm and advance anyway, or go back and resolve them first.

Sources

At the top of each Deep Dive panel is a Sources section. Click "+ Add source" to add a reference. Each source entry has two parts: a type tag and a text field. The type tag is a dropdown with options including Book, Article, Video, Course, Documentation, Person, and Podcast. Select "+ Add type..." to create a custom tag that will then be available for all other sources. The text field holds the title, URL, or name. Each source also has two checkboxes: "Confirmed" (you found a usable answer there) and "Not found" (you checked and it was not useful). These let you track which resources actually answered the question so you can reference them again later and know which to skip.

My current understanding

Below Sources is a rich text editor labelled "My current understanding". This is a free-form space for your own sense-making notes on this question. Write what you believe in your own words. Update it as your understanding changes. The formatting toolbar above the editor includes bold, italic, underline, lists, code toggle, and five highlight colours. The "Confusing term" button on the right of the toolbar saves any text you have selected as a confusing term without leaving the panel. The editor content is not a summary of your sources. It is your active thinking about the answer.

How Everything Connects

The three sections communicate automatically. You never need to manually update the Topic Board based on what you do in Questions.

Strength bar
The strength bar on each topic card fills as its linked questions advance through stages. Unknown contributes nothing. I've Seen It contributes a little. I Can Explain It contributes more. I Can Use It fills that question's share completely. A topic with five questions all at I Can Use It shows a full bar.
Question count vs. strength
The question count chip shows depth: how many angles you are interrogating the topic from. The strength bar shows quality: how far those questions have progressed. A topic can have ten questions (high depth) and a nearly empty bar (low strength), meaning you have identified a lot to learn but have not worked through it. Both numbers matter.
Stage gate
A question cannot reach "I Can Use It" without at least two depth checks completed. This is mechanically enforced. You cannot bypass it by clicking the stage dot; the lock message will tell you exactly what to do.
Stuck propagation
When you mark a question as stuck, the red dot appears on the question row and on the parent topic card. Scanning the Topic Board tells you immediately which topics have unresolved blocks without looking at individual questions.
Merged question history
When you merge a question into another, the original is preserved as a strikethrough ancestor inside the new question. Depth check notes from the original carry over. Work is never lost when a question evolves.

Learning Python inside Cinema 4D

You create a new subject called "Python in Cinema 4D". You click "+ Add topic" five times: Selecting objects, Traversing the object hierarchy, Creating and inserting new objects, Getting and setting object properties, Tags and their methods. All land in Uncategorised.

Initial topics

Selecting objects · Traversing the object hierarchy · Creating and inserting new objects · Getting and setting object properties · Tags and their methods

After reading, you drag "Selecting objects" into Core / Foundational. You drag "Traversing the object hierarchy" into Important Detail. You Ctrl+click both cards, choose "Requires" from the connection type dropdown, and type "You must be able to select an object before traversing from it." You click "Add connection". A curved arrow appears between the two cards labelled "R".

You click "+ Add question" and type "How do I get the currently selected object?" You click the "Selecting objects" topic button to link it. It lands at Unknown.

After studying you find two methods: GetActiveObject() and GetActiveObjects(). The original question is now too vague. You add a sharper one: "When do I use GetActiveObject() vs GetActiveObjects()?" You then drag the old question onto the new one. The confirmation modal appears. You confirm. The old question's text appears as a strikethrough inside the new one.

You advance the merged question to I Can Explain It and click Deep Dive.

Depth check responses

Limits: You write "Both return None or an empty list if nothing is selected. Without a None check, the script crashes silently." You tick the Limits checkbox. It turns teal.

Mistakes: In the text area you write "Using GetActiveObject() when the user has multiple objects selected." You click "+ Add my mistake" and write "I used GetActiveObject() in my first real script and silently ignored two of three selected objects." You click "+ Add your question" in the quiz area and write "What does GetActiveObject() return when three objects are selected?" The Mistakes check ticks automatically because content exists.

Apply: You tick "Used to solve a real problem". Apply turns amber.

Three checks are complete. The Advance button unlocks. You click it. The question moves to I Can Use It. The strength bar on the Selecting objects topic card updates automatically.

Learning Calculus Derivatives

You create a new subject called "Calculus". You add nine topics to Uncategorised: Limits, Derivatives, Integration, Functions, Rate of Change, Chain Rule, Product Rule, Optimization, Higher Order Derivatives.

After reading, you drag Limits, Functions, Rate of Change, and Derivatives into Core / Foundational. You Ctrl+click Derivatives and Limits, choose "Requires", and type "A derivative is defined as a limit, so limits must be understood first." You Ctrl+click Derivatives and Rate of Change, choose "Results in", and type "Computing a derivative gives you the instantaneous rate of change at any point." You drag Chain Rule and Product Rule into Important Detail and draw "Supports" connections to Derivatives. You drag Optimization into Important Detail and draw "Leads to" from Derivatives.

You add your first question: "What even is a derivative?" Linked to Derivatives. Unknown. After studying you advance it to I Can Explain It. But the textbook definition still feels disconnected from anything real. You add a second question: "What does a derivative actually mean in real life, not in math language?" Unknown.

You study further. You find the car example. Distance gives speed. Speed gives acceleration. Each derivative answers the same question one level deeper. That question reaches I Can Explain It. You open Deep Dive.

Depth check responses

Teach: You write "A derivative measures how fast something is changing at one specific moment. If you know your position over time, the derivative gives you your speed at any instant. Take the derivative of speed and you get acceleration. Each level asks: how fast is this changing right now?" You tick the Teach checkbox.

Scenario: You write "A car journey. I have a graph of distance versus time. The derivative at any point gives my speed at that exact second. If my speed is increasing, the second derivative tells me the acceleration." You tick the Scenario checkbox.

Apply: You tick "Tested on a concrete example". Apply turns amber.

Two checks complete. The Advance button unlocks. You click it. The question moves to I Can Use It. The strength bar on the Derivatives topic card updates automatically.

Writing a Custom JSON File for Import

If you already have a course outline, a syllabus, or an AI-generated topic map, you can write a JSON file by hand and import it straight into the app instead of adding everything manually. The result is identical to using the app to build the subject from scratch.

How to import: Click the gear icon in the top-right of the subject header, then select Restore. Pick your .json file. The app creates a new subject immediately. If a subject with the same name already exists, it appends "(2)", "(3)", and so on to avoid overwriting anything.

The minimum valid file

Save the text below as anything.json and it imports as a blank subject. Add topics, questions, arrows, and groups around it to populate it.

{
  "_type":     "dacosta-thinklab-backup",
  "_version":  3,
  "subject": {
    "id":    1,
    "name":  "My Subject",
    "color": "#2455a4"
  },
  "topics":    [],
  "questions": [],
  "arrows":    [],
  "groups":    []
}

The _type string must be exactly "dacosta-thinklab-backup"; the app rejects any file that does not match. Use 3 for _version. The subject id can be any number; the app replaces it with a new one on import.

Topics

Each object in the topics array becomes one card on the Topic Board. You invent the id strings yourself; they just need to be unique within your file, because questions and arrows reference them. The app remaps everything to new IDs on import.

"topics": [
  {
    "id":        "t1",          // unique string, you choose
    "name":      "Derivatives",
    "col":       "core",        // "uncat" | "core" | "detail" | "secondary"
    "slot":      0,             // vertical position, 0 is top of column
    "orderNum":  1,             // number shown on card corner (optional)
    "topicType": "concept"      // type badge (optional, see values below)
  },
  {
    "id":   "t2",
    "name": "Chain Rule",
    "col":  "detail",
    "slot": 0
  }
]
FieldTypeDetails
id required
string
Any unique string, e.g. "t1", "topic-limits". Referenced in questions and arrows.
name required
string
The topic name shown on the card.
col required
string
Column the card starts in. One of: "uncat", "core", "detail", "secondary".
slot optional
number
Vertical position within the column. 0 is the top card. Give topics in the same column consecutive numbers to set order. Omit to let the app place them automatically.
orderNum optional
number
Number shown on the card's left edge. Use when sequence matters, e.g. steps in a process or chapters in a course.
topicType optional
string
Small badge shown below the card name. Values: "concept", "mechanism", "method", "problem", "constraint", "tool". Omit or set to null for no badge.

Questions

Each object in the questions array becomes one row in the Questions section. Link a question to topics using the id strings you defined above.

"questions": [
  {
    "id":       101,
    "text":     "What is a derivative?",
    "stage":    "unknown",        // "unknown" | "heard" | "think" | "understood"
    "topicIds": ["t1"],            // array of topic id strings, use [] for unlinked
    "stuck":    false             // false | "missing" | "dontget" | "notconfident"
  }
]
FieldTypeDetails
id required
number
Any unique number. The app reassigns IDs on import.
text required
string
The question text.
stage required
string
Starting stage. Use "unknown" for all fresh questions. Other options: "heard", "think", "understood".
topicIds required
array
Array of topic id strings. Use [] for an unlinked question.
stuck optional
string/false
false for not stuck. Or one of: "missing", "dontget", "notconfident". Omit if not stuck.
myAnswer optional
string
Pre-filled content for the "My current understanding" editor. Plain text or basic HTML both work. Omit for a blank editor.
depthChecks optional
array
Array of 6 booleans, one per check in order: Teach, Scenario, Limits, Contrast, Mistakes, Apply. E.g. [true,false,false,false,false,false]. Omit to start all unchecked.
depthNotes optional
array
Array of 6 strings, one note per depth check in the same order. E.g. ["My teach note","","","","",""]. Omit to start blank.
dependsOn optional
number
The id of another question this one depends on. Creates a dependency chain. Omit if none.

Arrows (connections between topics)

Each object in the arrows array draws a curved line between two topic cards. The from and to values must match id strings from your topics array.

"arrows": [
  {
    "id":        "a1",
    "from":      "t2",           // topic id
    "to":        "t1",           // topic id
    "type":      "requires",     // see built-in types below
    "color":     "#2455a4",
    "label":     "Requires",     // short label shown on the curve
    "sentence":  "Chain Rule requires Derivatives first.",
    "direction": "forward",      // "forward" | "backward" | "both"
    "lineStyle": "dashed"        // "dashed" | "solid" | "dotted"
  }
]

Built-in type values you can use: "requires", "leads-to", "extends", "causes", "supports", "opposes", "results". You can also write any custom string; the app will use it as-is with the colour you provide.

Groups

Groups visually cluster adjacent cards in the same column under a shared colour and label. The topicIds must all share the same col value and have consecutive slot numbers. Groups with gaps between their member cards will not render correctly.

"groups": [
  {
    "id":       "g1",
    "name":     "Differentiation Rules",
    "color":    "#1a7a60",
    "col":      "detail",        // must match the col of all member topics
    "topicIds": ["t2", "t3"],   // must be consecutive slots in the same column
    "icon":     ""               // icon id string or empty string
  }
]

Complete working example

Three topics, two questions, one connection, one group. Copy this, save it as calculus.json, and restore it in the app.

{
  "_type": "dacosta-thinklab-backup",
  "_version": 3,
  "subject": { "id": 1, "name": "Calculus", "color": "#2455a4" },

  "topics": [
    { "id": "t1", "name": "Derivatives",  "col": "core",   "slot": 0, "topicType": "concept" },
    { "id": "t2", "name": "Chain Rule",  "col": "detail", "slot": 0, "topicType": "method"  },
    { "id": "t3", "name": "Product Rule", "col": "detail", "slot": 1, "topicType": "method"  }
  ],

  "questions": [
    {
      "id": 101, "text": "What is a derivative?",
      "stage": "unknown", "topicIds": ["t1"], "stuck": false
    },
    {
      "id": 102, "text": "When do I use Chain Rule vs Product Rule?",
      "stage": "unknown", "topicIds": ["t2", "t3"], "stuck": false
    }
  ],

  "arrows": [
    {
      "id": "a1", "from": "t2", "to": "t1",
      "type": "requires", "color": "#2455a4", "label": "Requires",
      "direction": "forward", "lineStyle": "dashed",
      "sentence": "Chain Rule requires understanding Derivatives first."
    }
  ],

  "groups": [
    {
      "id": "g1", "name": "Differentiation Rules",
      "color": "#1a7a60", "col": "detail",
      "topicIds": ["t2", "t3"], "icon": ""
    }
  ]
}

Before importing, check: Valid JSON with no trailing commas. Every topic id referenced in questions or arrows exists in the topics array. Topics in the same group share the same col and have consecutive slot numbers. The _type field is exactly "dacosta-thinklab-backup".

If the import silently fails, paste your file into jsonlint.com to find syntax errors first.