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”:

  1. Take the original text (lyrics, article, story, etc.).
  2. Extract parts of speech — nouns, verbs, adjectives, adverbs.
  3. Translate them into the secondary language.
  4. Organize each group into a separate chapter.
  5. Combine all chapters into one JSON file and save it, for example as zeit_chapters_en.json.
  6. 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

  1. Collect source text
  2. Extract words by part of speech
  3. Translate and structure pairs
  4. Create JSON file
  5. Import into the app