Engineering

Building Rukia Labs

How the platform is built, and what we got wrong on the way.

PerformanceFrontend

The chat panel nobody opened was costing us 400MB

The lesson editor is where an instructor writes a lesson: a rich text editor for the body, a place for a video link, file attachments, and a preview showing what a student will see. Instructors spend hours in it. It is, more than anything else we ship, the thing our customers actually work in. And for a few months, it…

SecurityMulti-tenancyArchitecture

The browser is not a witness

We found the same hole twice, in two systems written a year and a half apart by people solving unrelated problems. Neither was a subtle cryptographic mistake. Both were the same se…

DocumentationMulti-tenancyEdge

One documentation site, two front doors

This site is served at two addresses: Same words, same pages, same build inputs. Only the branding differs — and, less obviously, the path everything is mounted at.

EdgeFrontend

The 404 that moved every deploy

A bulk-enrolment dialog stopped opening. No error, no spinner, nothing — the button simply did not respond. Everything around it worked. It worked in development. It worked against…

ArchitectureMulti-tenancy

Four frontends, one address

An organisation's address serves three separate applications: They are three builds, from three directories, with three bundles. They share a domain, a session and a design system,…

FrontendArchitecture

A dash is not a zero

A learner scored 120 out of 300 on a project. The admin console showed 300%. The instructor console showed 0%. The student's own course card showed 12000%. Nobody had written a bug…

EdgeMulti-tenancyArchitecture

Branding that arrives before the JavaScript does

Every organisation on the platform gets its own address and its own branding. The obvious way to build that is to fetch the branding when the app starts. We did, and it was wrong i…