Aspire smart-dashboard โ internal BI + KPIs
Context
Aspire staff need cross-brand KPI visibility (revenue, bookings, payroll cadence, supplier spend) without logging into 8 different vendor tools. smart-dashboard is the internal BI layer that pulls data from connected MCPs (Xero, Tanda, STAAH, PowerEPOS, GA4) and surfaces it as a single dashboard.
Architecture
graph LR
X["Xero x5 orgs"] --> SD
T["Tanda"] --> SD
P["PowerEPOS"] --> SD
G["GA4 x7 brands"] --> SD
CL["Clarity"] --> SD
SD["smart-dashboard<br/>BI / KPIs"] --> HUB["Aspire Hub SSO"]
classDef app fill:#715EE3,color:#fff,stroke:#291F50;
class SD app;
Detail
What's live
apps/smart-dashboardin theaspire-digital-groupTurborepo monorepo- Production deploy via Coolify
- Deep-linked from Aspire Hub launchpad
- First app onboarded to Aspire Hub OIDC SSO (LIVE 2026-05-12) โ the SSO pilot per aspire-hub
Data sources (connected MCPs)
| Source | What it pulls |
|---|---|
| Xero (5 orgs) | Revenue, expenses, P&L by entity |
| Tanda | Roster, timesheet, leave, payroll spend |
| PowerEPOS | POS sales, top items, daily totals (3 venues) |
| STAAH โ Zinga CM | Accommodation bookings, occupancy |
| GA4 (7 brands) | Web traffic, conversions per brand |
| Microsoft Clarity (8 brand tokens) | UX friction, session recordings |
| Search Console + Bing | Organic search performance |
SSO pilot status (2026-05-12 LIVE)
Per aspire-hub, smart-dashboard was the first app onboarded to Aspire Hub OIDC SSO. The pattern that worked:
- Add
signIn()client helper to smart-dashboard - Set
AUTH_TRUST_HOST=true - Set
HUB_*env trio (URL, client ID, client secret) from Hub/appsUI - Click Enable SSO in Hub
/apps - Discovery doc at
<hub>/.well-known/openid-configuration - NextAuth v5 rejects GET to
/api/auth/signin/{provider}โ known gotcha
This template is now reusable for other internal apps.
Stack
- Next.js (legacy from monorepo era)
- NextAuth v5 + Aspire Hub OIDC provider (per SSO pilot)
- Data fetched via the same MCP clients used by other Aspire tools โ not duplicated
Coverage gaps (per MEMORY.md project_brand_ecosystem)
- Brand Ecosystem outreach data (180 Thai businesses) โ separate dashboard, not yet integrated
- Frigate analytics (NVR at 3 venues) โ separate project, see MEMORY.md
project_frigate_analytics
Open questions
- Real-time vs daily-batch โ currently daily aggregation. Real-time hits MCP rate limits + cost.
- Who has dashboard access? Currently any Aspire Hub staff member; should be role-gated (e.g., venue managers see only their venue).
- Mobile view โ currently desktop-first; staff often need to check on-the-go.
Related
- aspire-hub โ Hub OIDC IdP that smart-dashboard federates to
- aspire-mcp-ecosystem โ the MCP sources smart-dashboard pulls from
๐ Relationships
graph LR
smart_dashboard["smart-dashboard"]:::self
smart_dashboard --> aspire_hub["aspire-hub"]
smart_dashboard --> aspire_mcp_ecosystem["aspire-mcp-ecosystem"]
classDef self fill:#715EE3,color:#fff,stroke:#291F50;