Content Preparation
Overview
Cruise Learn uses a structured content model for language learning. Materials are stored as Chapters containing Topics, and can be combined into a chapter_collection file for easy import or export.
Structure
Each topic represents a single pair of primary and secondary texts. Chapters define which languages are used, and the app handles playback and display automatically.
{
"type": "chapter_collection",
"version": 1,
"chapters": [
{
"name": "Example Chapter",
"description": "Sample content for German learning",
"primaryLanguage": "de",
"secondaryLanguage": "en",
"topics": [
{ "primaryText": "das Haus", "secondaryText": "the house" },
{ "primaryText": "die Zeit", "secondaryText": "the time" }
]
}
]
}
Basic content structure in JSON
Creating Content
You can create new learning materials in two ways:
- Inside the app — create chapters and add topics manually.
- Externally — prepare a JSON file and import it into the app.
Additionally, Cruise Learn provides a Content Editor that lets you create, edit, and preview chapters right in your browser.
The editor supports import and export of JSON files, live structure validation, and syntax highlighting for easier editing.
Example Workflow
For larger sets, external preparation is recommended. Here’s how we created a complete set from Rammstein’s song “Zeit”:
- Take the original text (lyrics, article, story, etc.).
- Extract parts of speech — nouns, verbs, adjectives, adverbs.
- Translate them into the secondary language.
- Organize each group into a separate chapter.
- Combine all chapters into one JSON file and save it, for example as
zeit_chapters_en.json. - Import the file via Library → Import in the app.
Full Example: From Text to Chapter Collection
Below you can see the complete process — from the original text to the generated JSON file.
Original text (lyrics of "Zeit" by Rammstein)
Manches sollte, manches nicht Wir sehen, doch sind wir blind Wir werfen Schatten ohne Licht Nach uns wird es vorher geben Aus der Jugend wird schon Not Wir sterben weiter, bis wir leben Sterben lebend in den Tod Dem Ende treiben wir entgegen Keine Rast, nur vorwärtsstreben Am Ufer winkt Unendlichkeit Gefangen so im Fluss der Zeit Bitte bleib stehen, bleib stehen Zeit, das soll immer so weitergehen Warmer Körper ist bald kalt Zukunft kann man nicht beschwören Duldet keinen Aufenthalt Erschaffen und sogleich zerstören Ich liege hier in deinen Armen Ach, könnt es doch für immer sein Doch die Zeit kennt kein Erbarmen Schon ist der Moment vorbei Zeit, bitte bleib stehen, bleib stehen Zeit, das soll immer so weitergehen Zeit, es ist so schön, so schön Ein jeder kennt den perfekten Moment Zeit, bitte bleib stehen, bleib stehen Wenn unsere Zeit gekommen ist Dann ist es Zeit zu gehen Aufhören, wenn's am schönsten ist Die Uhren bleiben stehen So perfekt ist der Moment Doch weiter läuft die Zeit Augenblick, verweile doch Ich bin noch nicht bereit Zeit, bitte bleib stehen, bleib stehen Zeit, das soll immer so weitergehen Zeit, es ist so schön, so schön Ein jeder kennt den perfekten Moment
Example of the AI request
You are a German linguist. Pay attention to the gender and correct articles of nouns. Create several sections corresponding to parts of speech. Primary language is German, secondary is English. Select all nouns, restore the correct articles (der/die/das), and translate them into English. Select all verbs, convert them to infinitive form, and if a verb has a separable prefix, write that prefix in parentheses both in German and English. Select all adjectives, convert them to masculine form, and translate into English. Select all adverbs and translate them into English as well. Process the text below:
Resulting JSON (ready for import)
{
"type": "chapter_collection",
"version": 1,
"chapters": [
{
"name": "Substantive aus dem Lied 'Zeit'",
"description": "Nouns with correct articles and English translations",
"primaryLanguage": "de",
"secondaryLanguage": "en",
"topics": [
{ "primaryText": "das Manches", "secondaryText": "the something / some things" },
{ "primaryText": "der Schatten", "secondaryText": "the shadow" },
{ "primaryText": "das Licht", "secondaryText": "the light" },
{ "primaryText": "die Jugend", "secondaryText": "the youth" },
{ "primaryText": "der Tod", "secondaryText": "the death" },
{ "primaryText": "das Ende", "secondaryText": "the end" },
{ "primaryText": "die Rast", "secondaryText": "the rest (pause)" },
{ "primaryText": "das Ufer", "secondaryText": "the shore" },
{ "primaryText": "die Unendlichkeit", "secondaryText": "the infinity" },
{ "primaryText": "der Fluss", "secondaryText": "the river" },
{ "primaryText": "die Zeit", "secondaryText": "the time" },
{ "primaryText": "der Körper", "secondaryText": "the body" },
{ "primaryText": "die Zukunft", "secondaryText": "the future" },
{ "primaryText": "der Aufenthalt", "secondaryText": "the stay" },
{ "primaryText": "die Arme", "secondaryText": "the arms" },
{ "primaryText": "der Moment", "secondaryText": "the moment" },
{ "primaryText": "das Erbarmen", "secondaryText": "the mercy" },
{ "primaryText": "die Uhren", "secondaryText": "the clocks" },
{ "primaryText": "der Augenblick", "secondaryText": "the instant / moment" }
]
},
{
"name": "Verben aus dem Lied 'Zeit'",
"description": "Verbs in infinitive form with separable prefixes and English translations",
"primaryLanguage": "de",
"secondaryLanguage": "en",
"topics": [
{ "primaryText": "sollen", "secondaryText": "shall / should" },
{ "primaryText": "sehen", "secondaryText": "to see" },
{ "primaryText": "sein", "secondaryText": "to be" },
{ "primaryText": "werfen", "secondaryText": "to throw" },
{ "primaryText": "geben", "secondaryText": "to give" },
{ "primaryText": "werden", "secondaryText": "to become" },
{ "primaryText": "sterben", "secondaryText": "to die" },
{ "primaryText": "leben", "secondaryText": "to live" },
{ "primaryText": "treiben", "secondaryText": "to drive / push" },
{ "primaryText": "entgegen*treiben*", "secondaryText": "(entgegen) to drive towards" },
{ "primaryText": "bleiben", "secondaryText": "to stay" },
{ "primaryText": "winken", "secondaryText": "to wave" },
{ "primaryText": "gefangen sein", "secondaryText": "to be caught" },
{ "primaryText": "liegen", "secondaryText": "to lie" },
{ "primaryText": "können", "secondaryText": "can / be able" },
{ "primaryText": "beschwören", "secondaryText": "to conjure / swear" },
{ "primaryText": "dulden", "secondaryText": "to tolerate" },
{ "primaryText": "erschaffen", "secondaryText": "to create" },
{ "primaryText": "zerstören", "secondaryText": "to destroy" },
{ "primaryText": "kennen", "secondaryText": "to know" },
{ "primaryText": "auf*hören*", "secondaryText": "(auf) to stop" },
{ "primaryText": "verweilen", "secondaryText": "to linger" },
{ "primaryText": "laufen", "secondaryText": "to run" }
]
},
{
"name": "Adjektive aus dem Lied 'Zeit'",
"description": "Adjectives in masculine form with English translations",
"primaryLanguage": "de",
"secondaryLanguage": "en",
"topics": [
{ "primaryText": "blind", "secondaryText": "blind" },
{ "primaryText": "lebend", "secondaryText": "living" },
{ "primaryText": "gekommen", "secondaryText": "come (arrived)" },
{ "primaryText": "warm", "secondaryText": "warm" },
{ "primaryText": "kalt", "secondaryText": "cold" },
{ "primaryText": "schön", "secondaryText": "beautiful" },
{ "primaryText": "perfekt", "secondaryText": "perfect" },
{ "primaryText": "bereit", "secondaryText": "ready" }
]
},
{
"name": "Adverbien aus dem Lied 'Zeit'",
"description": "Adverbs with English translations",
"primaryLanguage": "de",
"secondaryLanguage": "en",
"topics": [
{ "primaryText": "doch", "secondaryText": "yet / still" },
{ "primaryText": "nach", "secondaryText": "after" },
{ "primaryText": "vorwärts", "secondaryText": "forward" },
{ "primaryText": "bald", "secondaryText": "soon" },
{ "primaryText": "schon", "secondaryText": "already" },
{ "primaryText": "immer", "secondaryText": "always" },
{ "primaryText": "nur", "secondaryText": "only" },
{ "primaryText": "so", "secondaryText": "so / thus" }
]
}
]
}
Validation
If import fails, verify that:
- type is "chapter_collection"
- Each chapter object has a topics array
- All text fields use quotes
Summary
- Collect source text
- Extract words by part of speech
- Translate and structure pairs
- Create JSON file
- Import into the app