The approach used here focuses on two areas: the generation of learning materials and the provision of means of exploration. We will begin with the first.
Most language teaching software is handcrafted and canned. A learner's trajectory through presentations and exercises may vary, but the materials themselves are pre-built and immutable. In the early 1990's, an alternative was considered but never fully developed: generative computer-aided language learning. In generative CALL, materials are not canned but rather synthesized on the fly by some program. It is this approach that we make use of here. It may be represented graphically as follows:

In this model, the grammar of some part of a language is constructed which permits the generation of a set of utterances. These can be as simple as a noun phrase to show agreement between determiner and noun (le livre vs la table) or more complex, either syntactically or representationally (oral vs written, images vs text). Because the system has generated the questions and some set of expected answers, either correct ones or expected problems, it can deal with a learner's response. In the simplest case, the learner's response matches one of the generated patterns. In a more complex case, the system uses its grammar to attempt to synthesize what the learner has produced. So, for example, if a learner is expected to write something like si tu partais (if you left) but instead produces si tu partait, the system can calculate that partait is a possible form generated by the morphology rule to produce the third person imperfect singular. It can then note this and inform the student of the precise nature of the problem. Or again, if the student has reordered words or used a synonym, the system can calculate this.
On the basis of this, the system can analyze the student's answer and respond appropriately. At the same time, by noting regularities in a student's errors, the system can tailor subsequently generated questions to focus on areas of weakness while ignoring areas of strength.
Let us turn now to exploration. Web technologies have now sufficiently advanced that is is possible, without too much effort, to produce dynamic frameworks where a student explores data, by clicking on candidate items, dragging or dropping, or performing some other manipulation. We will illustrate this with an example. Let us assume that we want students to explore the difference between the required parts of a sentence (roughly, the subject and predicate, or NP and VP) and those which are optional, such as sentence modifying prepositional phrases. So, we can say At 5, she left or She left, but not *At 5, she, or *At 5, left (except perhaps in telegraphic style). So how to let students explore this? The following snapshot shows one means.

Here we have a sentence composed of multiple elements, each of which may be removed by being dragged into a trashcan.
If an element is optional, it will stay in the trashcan, as the following image shows:

However, if it is not optional, it will slide back out of the trashcan to its original place. (This is accomplished simply by some basic html markup, some CSS and some jQuery.) More importantly, this allows students, either individually, or even better as a group around a single computer, to explore the different possibilities and to formulate an explanation of what they find.
In this example the sentences are hand constructed, but the potential exists to combine this exploration approach with the generative approach shown earlier. In other words, since a grammar can produce a whole range of sentences composed of subject, predicate and modifiers, it can 'seed' a drag and drop exercise with an in principle unending set of new utterances to explore.
These two approaches, generation and exploration, are at the core of our project.