Skip to content

Product Engineering

Add a feature without shipping code: the case for registry-driven platforms

Scient Systems2 min read

There is a quiet tax most platforms pay without noticing. Every new item of content, a lesson, a game, a template, arrives as a small engineering task: a component to wire up, a route to add, a deploy to run. It feels minor each time. Multiplied across a growing catalogue, it turns the engineering team into a permanent bottleneck between the people who make content and the users who want it.

Stem Rabbit was built to not pay that tax. It is registry-driven: every course and every arcade game registers through its own metadata, so adding one is a data change, not a code change.

What a registry buys you

The immediate win is that content stops requiring a release. When a lesson is defined by a metadata entry the platform knows how to render, the catalogue grows by adding entries, not by shipping code. The people responsible for content can add to it without waiting in an engineering queue, and the engineering team stops spending its attention on work that was never really engineering.

The subtler win is consistency by construction. Because everything registers the same way, every lesson and every game gets the same handling, the same shape, the same guarantees. You do not have to remember to make the hundredth item behave like the first. The registry makes that the default.

The single codebase underneath

Stem Rabbit runs its student and teacher editions on one Next.js 16 and React 19 codebase, with a coin-based gamification layer that rewards progress and admin tooling for managing content and access. Sessions are HMAC-signed so student and teacher permissions stay cleanly separated. The registry pattern is what lets one codebase serve a growing, varied catalogue without splintering into special cases.

Where it costs you

Registry-driven design is not free. The cost is paid up front, in the design of the metadata contract: you have to decide, carefully and early, what a "lesson" or a "game" actually is, because that definition becomes the thing everything else depends on. Get it too narrow and you will be widening it forever. Get it too loose and it guarantees nothing.

But that is a good trade. You do the hard thinking once, when you define what an item is, and in exchange adding the next thousand of them is nearly free. The fastest deploy really is the one you never have to do.

Working on something like this?

Let’s talk it through.

Start a conversation