Technologies: Meteor, Node.js, MongoDB, Cordova

I've been attending a Japanese class at the university for some months and I had some troubles reviewing lessons, especially with the workbooks — which tended to be about repeating the same pattern and substituting words over and over — without learning how to recall them from memory. For the above reason — and since I was also experimenting Meteor — I quickly made a prototype of a webapp to help myself recalling fading memories and applying them on different subjects and phrases.

Gakusei is a realtime Meteor-powered webapp I made to study, learn and test your knowledge of the Japanese language.
The app can generate thousands of different questions by connecting word types, on a variety of situations. It is actually complex than it seems, but something like "The apple is on the table" would become "The {{object}} is {{position}} the {{object.container}}", so then I can replace the placeholders with thousands of different words.

Have you ever built something just because you need a tool you can't find out there?

It is also realtime, so you can see other users answering questions while you are attempting to answer yours! I've also recently introduced new features such as learning kanjis and applying them to a sentences, to make sure you get right the way they should be used. Gakusei has been posted more than once on some subreddits such as LearnJapanese and Meteor and I was pleased to read such great comments around this tiny prototype.

Gakusei similarly to a quiz made of stories, which consists of phrases that have some entropy about the entities that get attached or generated. Here's below an extract of the phrases in the source code:

As you can might have noticed, the above JSON contains many placeholder variables which tell the system how to construct the final phrase at runtime. Each placeholder gets replaced with one of the same type from a huge list of words that I have prepared, like:

— which is basically declaring an adjective with a subtype "value".

The project is open-source and can be found on its GitHub repository. Feel free to contribute and tell me your ideas about possible features to include!