Get in touch

From the workshop

Irenaverse

A universe where kids learn to code by building games.

Iris + Arena + Universe. A browser-based coding playground with its own language for kids (Irene), an in-page editor, a game canvas and a coding buddy who answers with questions. Every line a child writes runs in their own browser, never on the server.

Live Web
Laravel React CodeMirror Irene DSL Socratic tutor Stripe
The build story

The build story

Iris in the loop.

Iris was nearly twelve when this started. She was curious about what Dad did all day, about those screens of gibberish the rest of the family politely walked past. Scratch and the block-based tools were fun for a while, but she could tell they were not the same thing. The cat moved because you dragged a block, not because you had typed words and the computer had read them.

Irenaverse is the bridge I built for her: a browser-based coding playground with its own language, Irene. It is the smallest language that can express the games a twelve-year-old wants to build without lying about how real code works. It sits between Scratch (too magical) and real tooling (too punishing: semicolons, stack traces, blank pages).

A language where the game loop is grammar

Most learn-to-code tools bolt the game loop on as a library. In Irene, on tick:, on key_down "space": and on collide hero, barrels: are part of the language itself, so a beginner writes a real moving game in three lines without ever hearing the word “callback”. This is lesson three of thirty-eight, and it is running here. Change the 5.

Lesson 3 · Move the dog

dog = sprite("dog", 100, 100)

on tick:
    dog.x = dog.x + 
Which way?

Sixty ticks a second, the number added each time. A bigger number is a faster dog. A minus sign sends it the other way.

Change the 5 and the dog runs faster. Change x to y and it falls. That loop, type words and the computer obeys, is the entire point. Even the error messages were written for her: no SyntaxError, no stack traces. Irene says things like “I expected a number here, but I got the word dog. Did you forget quotes?”

Safe by construction

Irene compiles to nothing and ships nowhere. It is a lexer, parser and tree-walking interpreter, about 4,800 lines of TypeScript, running in a Web Worker in the kid’s own browser at 60 Hz. The server never executes a line of user code. A step cap per tick means the classic first crime, while true:, trips a friendly error instead of freezing the editor.

Grown-ups sign up in the open. Children never do: a kid account exists only because an adult issued the invite, which keeps the consent where the law wants it. A published game is visible two invites deep and no further, so a friend of a friend can play it and a stranger cannot. Comments pass through an AI safety check with one hard rule: if the check is down, a kid’s comment is never silently eaten. It posts flagged for review instead. Never silence a kid because of infra.

The month the curriculum ran out

By late July she had finished 37 of the 38 lessons, and her own usage data said something uncomfortable.

lessons finished
37 of 38 lessons finished
lines changed, median
4 lines changed, median
lessons changed 2 lines or fewer
12 lessons changed 2 lines or fewer
started from a blank file
0 started from a blank file

The starters already contained the answer. She was riding the conveyor correctly, which made it my bug, not hers. Three things came out of that. Quests: a goal, a handful of checkpoints and an empty file, with nothing to tweak because there is nothing there. Checks that look for her work, not just the right words: the idea has to turn up on a line she wrote. And an escape hatch, because a line-diff heuristic is only a heuristic, so three refusals in a row let her through anyway, and I count how often that fires.

Ren, and the twelve-line rule

Ren, the coding buddy: a purple owl with big round eyes and an amber beak.

Ren is the coding buddy, and Ren is meant to hint rather than hand over the program. Until July that rule lived only in Ren’s instructions. On the 25th the kid escalated to capital letters, asked for something to copy and paste, and Ren wrote out two complete programs. The rule is now a filter over the streaming reply: past twelve lines inside a code fence it closes the block, past two blocks it stops sending. Ren also says the cap exists up front, instead of promising a file that will not arrive. It is the guardrail I should have built first.

Making it pay for itself

It opened to strangers on 11 June: seven days free with no card, then NZ$5 a month for a whole family. One plan, no tiers, no card up front, because conversion through friction is a trick and the product should have to earn the subscription.

The tutoring budget is a token wallet the whole household shares, and its size came from thirty days of production data rather than a guess: one engaged kid burns about a million tokens a month, so the wallet holds two million. A family that empties a full one costs about NZ$6.50 to serve against NZ$5 of revenue. I know that number and I chose it, because a household metered halfway through the month has been sold something worse than nothing. Entitlement and credit are asked separately, so a subscriber who has spent the month is told to top up rather than told to subscribe, and a canary emails me if a day’s model spend crosses its ceiling.

Docs first, then twenty days

The first commit was documentation: what it is, who it is for, the language spec, the architecture, a phased roadmap, all written before any code. Then the phases landed fast: language and editor, lessons and accounts, Ren, sharing and remixing. First commit on 22 May, open to paying strangers on 11 June. Twenty days of evenings.

And the name on the tin is real. The roadmap’s test for every feature is whether Iris or a real friend would use it. Playtesting her games surfaced physics bugs that were fixed the same week, and the character sprites shipped at 100 pixels until kid feedback shrank them to 70. She is not a persona in a product doc. She is the user, and the loop is short: she plays it at the kitchen table, and the fixes ship before bedtime.

Got a domain that needs its own playground, or its own language? Here’s how we could work together.

Visit Irenaverse