projectadg last reviewed 2026-05-20

Aspire Hub โ€” internal staff launchpad + SSO IdP

Context

Aspire staff need a single entry point to access ~20 internal apps (Coolify, GitLab, smart-dashboard, secrets vault, MCP registry, audit log viewer, brand-specific dashboards). Previously they'd bookmark each one. Aspire Hub is the launchpad + SSO identity provider that all internal apps now federate to.

Architecture

graph TD S["Staff"] --> HUB["Aspire Hub<br/>hub.aspiredigital.group"] HUB --> LP["Tile launchpad"] HUB --> SSO["OIDC IdP"] HUB --> SV["Secrets vault"] SSO --> SD["smart-dashboard"] SSO --> OTHER["other internal apps"] HUB --> ODOO[("Odoo res.users<br/>via XML-RPC")] classDef hub fill:#715EE3,color:#fff,stroke:#291F50; class HUB hub;

Detail

Goal

One URL (hub.aspiredigital.group) lists every Aspire internal tool the staff member has access to, with one-click SSO into each.

Stack

Features shipped

FeatureStatus
Tile launchpad (icons for each app, scoped by user role)โœ…
OIDC IdP at /.well-known/openid-configurationโœ…
Secrets vault (SecretVault model + /secrets UI + reveal API)โœ…
MCP registry + audit logโœ…
First-app SSO pilot โ€” smart-dashboardโœ… LIVE 2026-05-12
Per-app signIn() client helper patternโœ…

Per-app SSO enablement pattern

  1. Add signIn() client helper in the target app
  2. Set AUTH_TRUST_HOST=true in target app env
  3. Set HUB_* env trio (URL, client ID, client secret) from Hub /apps UI
  4. Click Enable SSO in Hub /apps
  5. Discovery doc lives at <hub>/.well-known/openid-configuration

Known issue: XML-RPC decoder for nested tags

Open questions

  1. Next 2-3 apps to onboard to SSO (Coolify wrapper? GitLab via SAML proxy?)
  2. Off-boarding flow when staff leave Aspire โ€” currently manual

Provenance

Source: apps/aspire-staff-portal/ in aspire-digital-group monorepo. Deploy: Coolify (rolling).

Related

๐Ÿ”— Relationships

graph LR aspire_hub["aspire-hub"]:::self aspire_hub --> gitlab_self_hosted_not_github["gitlab-self-hosted-not-github"] aspire_hub --> aspire_llm_gateway["aspire-llm-gateway"] classDef self fill:#715EE3,color:#fff,stroke:#291F50;