How Orbit happened: a short history of questionable decisions
The mildly irresponsible origin story of a Discord bot that kept becoming a platform whenever nobody was looking.
Orbit did not begin with a strategy deck, a market analysis, or a founder staring meaningfully through a glass wall. It began the traditional way: somebody wanted one Discord command to be slightly less annoying.
Phase one: it is only a bot
The first version had a perfectly manageable job. It listened, did a thing, and returned to whatever bots do between gateway events. Then we added settings. Settings needed a dashboard. The dashboard needed accounts. Accounts needed permissions. Permissions needed policies. Policies needed an admin area. At this point the phrase ‘it is only a bot’ had become less of a technical description and more of a coping mechanism.
This should be quick.
Us, immediately before inventing another subsystem
Phase two: the dashboard acquires opinions
Our early dashboard was built on the optimistic belief that every API call succeeds, every guild has an icon, every user has the right role, and nobody opens a website on a phone. Production responded to this belief with the calm patience of a brick through a window.
- Some pages were old.
- Some pages were new.
- A few pages were old and new at the same time, which is technically impressive in the same way a three-legged office chair is technically furniture.
- Navigation occasionally required F5, our most experienced frontend engineer.
Phase three: modules, because apparently we enjoy boundaries
Orbit grew beyond a collection of switches. Communities wanted different tools, different limits, and room for custom behaviour. We introduced modules with explicit capabilities and runtime boundaries. That decision made the architecture harder in exactly the way good architecture is hard: the complexity became visible, named, and testable instead of hiding in a global object with seventeen optional properties.
Phase four: stop lying to the interface
The most important redesign was not a colour or a component. It was deciding that the dashboard must display real system state. Installed modules come from installations. Access comes from current ownership, Discord roles, and policy. Availability comes from services. Errors describe the next useful action. Cached data is labelled by behaviour, and sensitive decisions prefer live truth.
Where that leaves us
Orbit is now a server-management platform with moderation, forms, automation, modules, access control, observability, public content, and enough database migrations to qualify as light reading. It is still built around the same basic idea: running a community should require less repetitive work and fewer secret rituals.