Open source · MIT

ItCube

A coding school platform: tasks checked against several sets of data, hidden cases included

v2.1.0 A dashboard with analytics and a parent's view
Laravel 13PHP 8.3PostgreSQLTailwind 4WandboxОчереди
ItCube

The tests grade the work, not the teacher

A student writes a program, the teacher looks at it and says it seems right. A week later it turns out that it crashes on zero and returns nonsense on a negative number. Reading code by eye catches typos, not edge cases — there is neither the time nor the attention for those with eighteen people in the group.

ItCube runs the solution against several sets of data. A task carries cases: an input, an expected answer, points. Some are hidden — the student sees only whether the case passed, never its input or its answer. Otherwise a solution gets fitted to the known answer instead of being made to work. The first version of this service ran in 2023 on procedural PHP; only the domain survived.

What is inside

Fourteen languages, no sandbox of its own

Python, JavaScript, TypeScript, PHP, C, C++, Java, C#, Go, Rust, Ruby, Pascal, SQL, Bash. Code goes to Wandbox: running untrusted code is infrastructure a school platform cannot afford to maintain, and Wandbox already maintains it.

One backend instead of three, because of stdin

The Go Playground does not accept input, and without input there is no such thing as a test case with data — and so no assessment worth the name. Wandbox covers everything itself, Rust, Pascal and SQL included.

Grading on a queue, not in the request

Not architecture for its own sake but a consequence of measuring: one Go build takes about twenty seconds, five cases take a minute. Cases go out in parallel and the page polls for the result.

Timed quizzes and assessments

When the time runs out the answers submit themselves. An assessment gathers quizzes and coding tasks into one paper with an open window, and the sheet scales each piece of work to the weight the teacher gave it.

A register that tells groups apart

A mark belongs to a group and, where known, to a lesson. In the 2023 schema attendance was a pair of student and date, so a student enrolled in two tracks was indistinguishable on the same day.

Three languages, the source string is the key

Russian, English and German in the gettext style: anything untranslated stays readable text rather than a key name in the middle of the page. A command compares the dictionaries against the code and a test keeps them from drifting.

A dashboard that answers questions

The table that matters lists tasks by the share of students who solved them, lowest first: it points at the topic worth explaining again, which no activity counter ever does. Beside it, attendance by week and by group, submissions per day, and the quiz questions people get wrong most.

A parent's view without the code

An adult sees their children's attendance, results, timetable and assessments. They do not see the code, on purpose: a parent asks whether the child turns up and keeps up, and going through a solution is the teacher's job.

Screenshots

A task: the editor, a run on your own input, and the case-by-case report
A task: the editor, a run on your own input, and the case-by-case report
The dashboard: tasks by share solved, attendance by week
The dashboard: tasks by share solved, attendance by week
The register: the day's marks and each student's attendance share
The register: the day's marks and each student's attendance share
The sheet: every piece of work scaled to its weight
The sheet: every piece of work scaled to its weight
A parent's view: attendance and results, no code
A parent's view: attendance and results, no code
A quiz with a timer that submits the answers itself
A quiz with a timer that submits the answers itself

Installation

git clone https://github.com/dripips/ItCube.git cd ItCube composer install && npm install && npm run build cp .env.example .env && php artisan key:generate createdb itcube php artisan migrate --seed php artisan serve

Have a project or idea?

Write to me and we will talk the task through.