# service-bot/servicebot architecture

> Architecture diagram of the GitHub repository service-bot/servicebot, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-27). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/service-bot/servicebot
- Repository: https://github.com/service-bot/servicebot

## Overview

Servicebot is an XaaS subscription-management platform: customers browse service offerings, submit service requests, and manage active services and billing; staff configure the catalog, users, and permissions. The React client communicates with a REST API gateway, whose routes expose domain operations backed by models and plugin services. The README also documents quotes, trials, add-on pricing, invoicing, refunds, messaging, and extensibility. Some plugin and domain implementations are not sampled, so links for those capabilities are limited to documented boundaries rather than inferred call chains.

Main entry points: [`plugins/api-gateway/app.js`](https://github.com/service-bot/servicebot/blob/master/plugins/api-gateway/app.js) (API gateway), [`views/index.jsx`](https://github.com/service-bot/servicebot/blob/master/views/index.jsx) (React application), [`api/service-instances.js`](https://github.com/service-bot/servicebot/blob/master/api/service-instances.js) (REST route modules), [`plugins/database/database.js`](https://github.com/service-bot/servicebot/blob/master/plugins/database/database.js) (Database plugin)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Customer and Staff UI"]
  node_react_app["React application<br/>[index.jsx]"]
  node_service_catalog_ui["Service catalog"]
  node_service_request_ui["Service request"]
  node_my_services_ui["My services<br/>[my-services.jsx]"]
  node_admin_ui["Admin pages<br/>[manage-catalog.jsx]"]
end

subgraph group_api["REST API"]
  node_gateway["API gateway<br/>[app.js]"]
  node_api_routes["REST route modules"]
  node_auth_routes["Authentication routes<br/>[auth.js]"]
end

subgraph group_domain["Service and Billing Domain"]
  node_service_templates["Service templates"]
  node_service_instances["Service instances"]
  node_charges_invoices["Charges and invoices<br/>[charge.js]"]
  node_users_roles["Users and roles<br/>[user.js]"]
end

subgraph group_platform["Platform Services"]
  node_database_plugin["Database plugin<br/>[database.js]"]
  node_lifecycle["Lifecycle manager<br/>[main.js]"]
  node_payment_manager["Payment manager<br/>[main.js]"]
  node_notification["Notifications<br/>[saga.js]"]
  node_webhooks["Webhook dispatch<br/>[main.js]"]
  node_setup["Initial setup<br/>[app.js]"]
end

subgraph group_integration["External Integrations"]
  node_postgres[("PostgreSQL")]
  node_stripe["Stripe"]
end

node_customer(("Customer"))
node_staff(("Staff"))
node_webhook_targets(("Customer endpoints"))

node_customer -->|"uses"| node_react_app
node_staff -->|"uses"| node_react_app
node_react_app -->|"renders"| node_service_catalog_ui
node_react_app -->|"renders"| node_service_request_ui
node_react_app -->|"renders"| node_my_services_ui
node_react_app -->|"renders"| node_admin_ui
node_service_catalog_ui -->|"fetches catalog"| node_gateway
node_service_request_ui -->|"submits requests"| node_gateway
node_my_services_ui -->|"requests services"| node_gateway
node_admin_ui -->|"manages catalog"| node_gateway
node_gateway -->|"dispatches routes"| node_api_routes
node_gateway -->|"registers routes"| node_auth_routes
node_api_routes -->|"accesses templates"| node_service_templates
node_api_routes -->|"accesses instances"| node_service_instances
node_api_routes -->|"accesses billing"| node_charges_invoices
node_api_routes -->|"accesses users"| node_users_roles
node_service_templates -->|"persists data"| node_database_plugin
node_service_instances -->|"persists data"| node_database_plugin
node_charges_invoices -->|"persists data"| node_database_plugin
node_users_roles -->|"persists data"| node_database_plugin
node_database_plugin -->|"reads and writes"| node_postgres
node_payment_manager -->|"checks subscriptions"| node_service_instances
node_payment_manager -->|"creates charges"| node_charges_invoices
node_lifecycle -->|"runs lifecycle hooks"| node_webhooks
node_webhooks -->|"posts events"| node_webhook_targets
node_setup -->|"provides setup routes"| node_gateway
node_payment_manager -.->|"billing integration"| node_stripe
node_notification -.->|"sends notices"| node_customer

click node_react_app "https://github.com/service-bot/servicebot/blob/master/views/index.jsx"
click node_service_catalog_ui "https://github.com/service-bot/servicebot/blob/master/views/components/pages/service-catalog.jsx"
click node_service_request_ui "https://github.com/service-bot/servicebot/blob/master/views/components/pages/service-request.jsx"
click node_my_services_ui "https://github.com/service-bot/servicebot/blob/master/views/components/pages/my-services.jsx"
click node_admin_ui "https://github.com/service-bot/servicebot/blob/master/views/components/pages/manage-catalog.jsx"
click node_gateway "https://github.com/service-bot/servicebot/blob/master/plugins/api-gateway/app.js"
click node_api_routes "https://github.com/service-bot/servicebot/blob/master/api/service-instances.js"
click node_auth_routes "https://github.com/service-bot/servicebot/blob/master/api/auth.js"
click node_service_templates "https://github.com/service-bot/servicebot/blob/master/models/service-template.js"
click node_service_instances "https://github.com/service-bot/servicebot/blob/master/models/service-instance.js"
click node_charges_invoices "https://github.com/service-bot/servicebot/blob/master/models/charge.js"
click node_users_roles "https://github.com/service-bot/servicebot/blob/master/models/user.js"
click node_database_plugin "https://github.com/service-bot/servicebot/blob/master/plugins/database/database.js"
click node_lifecycle "https://github.com/service-bot/servicebot/blob/master/plugins/service-lifecycle/main.js"
click node_payment_manager "https://github.com/service-bot/servicebot/blob/master/plugins/payment-manager/main.js"
click node_notification "https://github.com/service-bot/servicebot/blob/master/plugins/notification/saga.js"
click node_webhooks "https://github.com/service-bot/servicebot/blob/master/plugins/webhooks/main.js"
click node_setup "https://github.com/service-bot/servicebot/blob/master/plugins/setup/app.js"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_react_app,node_service_catalog_ui,node_service_request_ui,node_my_services_ui,node_admin_ui toneBlue
class node_gateway,node_api_routes,node_auth_routes toneAmber
class node_service_templates,node_service_instances,node_charges_invoices,node_users_roles toneMint
class node_database_plugin,node_lifecycle,node_payment_manager,node_notification,node_webhooks,node_setup toneRose
class node_postgres,node_stripe,node_customer,node_staff,node_webhook_targets toneIndigo
```

## Components

### Customer and Staff UI

- [React application](https://github.com/service-bot/servicebot/blob/master/views/index.jsx): `views/index.jsx`
- [Service catalog](https://github.com/service-bot/servicebot/blob/master/views/components/pages/service-catalog.jsx): `views/components/pages/service-catalog.jsx`
- [Service request](https://github.com/service-bot/servicebot/blob/master/views/components/pages/service-request.jsx): `views/components/pages/service-request.jsx`
- [My services](https://github.com/service-bot/servicebot/blob/master/views/components/pages/my-services.jsx): `views/components/pages/my-services.jsx`
- [Admin pages](https://github.com/service-bot/servicebot/blob/master/views/components/pages/manage-catalog.jsx): `views/components/pages/manage-catalog.jsx`

### REST API

- [API gateway](https://github.com/service-bot/servicebot/blob/master/plugins/api-gateway/app.js): `plugins/api-gateway/app.js`
- [REST route modules](https://github.com/service-bot/servicebot/blob/master/api/service-instances.js): `api/service-instances.js`
- [Authentication routes](https://github.com/service-bot/servicebot/blob/master/api/auth.js): `api/auth.js`

### Service and Billing Domain

- [Service templates](https://github.com/service-bot/servicebot/blob/master/models/service-template.js): `models/service-template.js`
- [Service instances](https://github.com/service-bot/servicebot/blob/master/models/service-instance.js): `models/service-instance.js`
- [Charges and invoices](https://github.com/service-bot/servicebot/blob/master/models/charge.js): `models/charge.js`
- [Users and roles](https://github.com/service-bot/servicebot/blob/master/models/user.js): `models/user.js`

### Platform Services

- [Database plugin](https://github.com/service-bot/servicebot/blob/master/plugins/database/database.js): `plugins/database/database.js`
- [Lifecycle manager](https://github.com/service-bot/servicebot/blob/master/plugins/service-lifecycle/main.js): `plugins/service-lifecycle/main.js`
- [Payment manager](https://github.com/service-bot/servicebot/blob/master/plugins/payment-manager/main.js): `plugins/payment-manager/main.js`
- [Notifications](https://github.com/service-bot/servicebot/blob/master/plugins/notification/saga.js): `plugins/notification/saga.js`
- [Webhook dispatch](https://github.com/service-bot/servicebot/blob/master/plugins/webhooks/main.js): `plugins/webhooks/main.js`
- [Initial setup](https://github.com/service-bot/servicebot/blob/master/plugins/setup/app.js): `plugins/setup/app.js`

### External Integrations

- **PostgreSQL**
- **Stripe**

### Other components

- **Customer**
- **Staff**
- **Customer endpoints**

## Connections

- Customer → React application: uses
- Staff → React application: uses
- React application → Service catalog: renders
- React application → Service request: renders
- React application → My services: renders
- React application → Admin pages: renders
- Service catalog → API gateway: fetches catalog
- Service request → API gateway: submits requests
- My services → API gateway: requests services
- Admin pages → API gateway: manages catalog
- API gateway → REST route modules: dispatches routes
- API gateway → Authentication routes: registers routes
- REST route modules → Service templates: accesses templates
- REST route modules → Service instances: accesses instances
- REST route modules → Charges and invoices: accesses billing
- REST route modules → Users and roles: accesses users
- Service templates → Database plugin: persists data
- Service instances → Database plugin: persists data
- Charges and invoices → Database plugin: persists data
- Users and roles → Database plugin: persists data
- Database plugin → PostgreSQL: reads and writes
- Payment manager → Service instances: checks subscriptions
- Payment manager → Charges and invoices: creates charges
- Lifecycle manager → Webhook dispatch: runs lifecycle hooks
- Webhook dispatch → Customer endpoints: posts events
- Initial setup → API gateway: provides setup routes
- Payment manager → Stripe: billing integration
- Notifications → Customer: sends notices
