For your IT team

The stack you'd choose if you could start from scratch.

OdonHub isn't a black box. It's documented for the people who run it: a small core, modules that plug in, a stack chosen by serious teams, and no hidden magic — self-hostable under license, with a stable public API.

Four decisions that govern the code

Principles, not just features.

Small core, modules that plug in

The core handles auth, RBAC, clinics and users. Everything else lives as a module — installable and removable without touching the rest.

Contracts before classes

Each module exposes typed events and endpoints with Pydantic. Modules react to events, not to each other's internal imports.

API first, interface second

Everything you see in the UI goes through the same public API that integrators and AI agents use. OpenAPI is generated automatically.

A deliberately boring stack

We pick tools with years of production behind them. The exotic stuff we leave for side projects.

What's inside a module

The module system isn't a metaphor.

Each module ships its own manifest, its Alembic migrations, its YAML seeds, its auto-registered navigation, and subscribes to the internal event bus. Enable the ones your clinic needs; the rest add zero weight.

manifest.json declares the module Alembic per-module migrations YAML seeds reference data Event bus typed, decoupled RBAC namespaced permissions OpenAPI auto-generated
The stack

Modern, and deliberately boring.

FrontendVue 3 · Nuxt 4 · TypeScript · Nuxt UI
BackendFastAPI · Python 3.11+ · SQLAlchemy 2.0 · Pydantic
DataPostgreSQL · Alembic · asyncpg · JSONB
Runtime & QADocker Compose · pytest · Playwright · ruff

Documented for the people who run it.

Self-host it on your own infrastructure under a clinic license, with a stable public API and a documented module system.