In development

GS Creator

Interactive exercises: editor + engine

GS Creator is a platform for creating and playing interactive educational exercises. The author builds an exercise in the editor, and the engine plays it in an app — in the browser and, eventually, on mobile devices as well.

What GS Creator is made of

GS Engine

v0.0.15

The engine that plays exercises from JSON files. Eventually a JS library for embedding in web apps, and native on iOS/Android.

Haxe 4.3 · OpenFL · target html5

GS Editor

v0.0.47

A visual exercise editor: the scene, the component palette, the property inspector, the asset library, validation and JSON export for the engine.

Angular 22

How it works

  1. 1

    Design in the editor

    In GS Editor you lay out a scene from five components (Image, Text, Component, Container, Target), assign images, captions and sounds, and set the component options, the solution rule and the actions (e.g. a sound, hiding an element or changing its appearance).

  2. 2

    Export the JSON

    The editor saves the exercise as a projekt.json file + a folder of assets. The file format is a schema shared by the editor and the engine.

  3. 3

    The engine plays it

    GS Engine loads the JSON, checks the required features, builds the scene from the components and judges the player's moves by the solution rule (e.g. selecting).

  4. 4

    Embed it in an app

    Eventually the engine will run as a library in web apps (Angular, React) and natively on iOS and Android.

Example: Tidy up the room

JSON schema

The editor and the engine share one exercise file format (version 2.4). Exercise JSON: schema (the schema version), requires (the engine features the exercise uses), size, language, assets (files from the exercise package or shared assets from libraries), elements (a scene of five components: Image, Text, Component, Container, Target — with position, layer, appearance with states, component options, e.g. the line anchor point (anchor) of a connectable point, and actions in on), rule (the solution rule: select, place, connect — with dots at the line ends (endDot) — or open) and on (global actions). Since version 2.4 the labels and descriptions in the engine catalog are multilingual texts (pl, en). An example file with a background, an instruction and one element to select:

{
  "schema": "2.0",
  "requires": ["element.image", "element.text", "element.component", "visual.text", "component.clickable",
               "rule.select", "action.play-sound", "action.hide"],
  "id": "owoce",
  "size": { "width": 1200, "height": 675 },
  "languages": ["pl", "en"],
  "defaultLanguage": "pl",
  "assets": [
    { "id": "background", "kind": "image", "src": { "default": "images/background.png" } },
    { "id": "apple", "kind": "image", "src": { "default": "images/apple.png" } },
    { "id": "good", "kind": "audio", "src": { "default": "sounds/good.wav" } }
  ],
  "elements": [
    { "id": "background", "type": "image", "rect": [0, 0, 1200, 675], "layer": 0,
      "visual": { "type": "image", "asset": "background" } },
    { "id": "instruction", "type": "text", "rect": [60, 50, 1016, 70], "layer": 2,
      "visual": { "type": "text", "text": { "pl": "Zaznacz <b>owoce</b>.", "en": "Select the <b>fruit</b>." },
                  "size": 40, "align": "center" } },
    { "id": "apple-1", "type": "component", "rect": [60, 150, 220, 220], "layer": 1,
      "visual": { "type": "image", "asset": "apple" }, "clickable": true,
      "on": { "correct": [ { "do": "play-sound", "asset": "good" }, { "do": "hide", "target": "self" } ] } }
  ],
  "rule": { "kind": "select", "correct": ["apple-1"] }
}