Skip to content

Architecture overview ​

When this page and the rules files disagree, the rules files decide.

The pieces ​

Browser
  ├── Admin panel (admin/)      calls    API
  └── Client portal (client/)   calls    server routes  calls  API
                                                                 │
                                                   Database, Queue, Cache
PieceWhat it is
API (Innovayse.Hostpanel.API)The backend. Handles all HTTP requests, runs background jobs, talks to the database, message queue and cache.
Admin panel (admin/)Single-page application for staff. Reads and writes the API.
Client portal (client/)Server-rendered application for customers. Has its own server routes that proxy the API, so the API is never called directly from the browser.
DatabaseRelational store. Every table, column, key, index and constraint name is PascalCase.
Message queueCarries commands and queries between the API process and its background workers.
CacheShared cache used for rate limiting, session state and short-lived data.

The plugin SDK (Hostpanel.Sdk) is MIT-licensed and lives as a git submodule at backend/src/Hostpanel.Sdk. It is the only part of the codebase that third-party plugin authors consume.

The layers ​

Dependencies point inward. Outer layers may reference inner ones; inner layers never reference outer ones. Architecture tests in Innovayse.Hostpanel.Architecture.Tests enforce this.

LayerProjectHolds
SharedKernelInnovayse.Hostpanel.SharedKernelPrimitives shared across all layers: base types, result types, extension methods.
DomainInnovayse.Hostpanel.DomainEntities, enums and domain logic. No dependency on infrastructure or application concerns.
ApplicationInnovayse.Hostpanel.ApplicationUse cases: commands, queries, handlers, validators. Defines ports (I<Port> interfaces) for everything the application needs from the outside.
InfrastructureInnovayse.Hostpanel.InfrastructureAdapters that implement the application's ports: the ORM, email, storage, the message bus, background jobs.
APIInnovayse.Hostpanel.APIControllers, middleware, startup. The composition root: wires everything together.
SharedSharedCross-cutting code for the main project: BaseApiController, StatusMapping, shared models. Plugins do not reference this project.

The plugin SDK and bundled plugins ​

The SDK lives at backend/src/Hostpanel.Sdk as a git submodule (hosted separately at github.com/innovayse/hostpanel-sdk). Clone the repository with --recurse-submodules, or run git submodule update --init after a plain clone.

Bundled plugins ship with the server image and live under backend/src/Innovayse.Providers.*. They are the reference implementations for plugin authors.

See the Write a plugin guide for the full plugin authoring guide.

The repository ​

FolderContents
backend/src/ (projects), tests/ (test projects), plugins/ (migration addon), agent/ (SSH key agent)
admin/Admin panel
client/Client portal
docker/Compose files, environment templates, nginx config
docs/This documentation site
rules/Code style rules. The source of truth for code style decisions.
scripts/CI and maintenance scripts

The rules folder ​

rules/*.md is the source of truth for code style. When this page and the rules disagree, the rules win.

FileCovers
rules/project.mdProject overview, where things go, what differs from workspace conventions
rules/clean-architecture.mdLayer rules and dependency direction
rules/csharp-style.mdC# style: braces, constructors, naming, one type per file
rules/dotnet-format.mdFormatter setup and pre-commit steps
rules/xml-docs.mdXML doc comment requirements for C#
rules/jsdoc.mdJSDoc requirements for TypeScript and Vue
rules/vuejs-style.mdVue component and composable conventions
Was this page helpful?

Released under the AGPL-3.0 License.