Interface
Representative interface stills.
- Role
- Solo
- Organisation
- Personal project
- Period
- 2022
- Stack
- Node.js
- Express
- PHP
Short explanation
Onlearn is a learning platform split into separate services behind a single API gateway. Four repositories: the gateway, plus user, media and course services.
It exists because I wanted to understand service boundaries by building them rather than by reading about them.
- An API gateway as the single entry point.
- Three domain services — user, media, courses.
- Deliberately different languages per service, to find out where the seams actually hurt.
Why split it at all
For a project this size, a monolith would have been the correct engineering decision. That wasn't the point. I wanted to feel the costs of distribution first-hand — the extra hop, the duplicated types, the question of who owns a piece of data when two services want it.
Using a different language per service was the same instinct taken further. It removes the option of quietly sharing code between services, which is the thing that makes a nominal microservice architecture secretly a monolith.
What it taught me
That the boundary is the design. Once user and course are separate services, 'which courses has this user enrolled in' stops being a join and starts being an architectural question — and you get exactly one chance to put that answer in the right place.
It also taught me why gateways exist. Three services means three base URLs, three auth stories and three failure modes, unless something in front of them makes it look like one.
Gateway and services
Four repositories, one entry point.
Service topology: gateway fronting user, media and course services

