Back to Docs

Tech & System Overview

Last updated: March 2026

Architecture Summary

The EXG hub platform is a collection of purpose-built internal tools connected by a central partner portal at exgpro.partners. Each hub is independently deployed and serves a distinct operational function. All hubs sit inside The Oasis — accessible through the Partner Portal with role-based access managed via Microsoft Azure AD.

Access hierarchy:

  • Partner Portal (exgpro.partners) — single access point for all staff, partners, and board
  • EXG Systems (systems.exgpro.partners) — internal directory, policies, docs, and leadership tools
  • Department hubs — each hub is independently accessible from within The Oasis

Hub Inventory

HubPurposeFrameworkHostingHas Database?
Compliance HubEPR reporting, packaging review, AI compliance assistantReact 19 + ViteVercelNo
E-commerce HubChannel management, OMS map, forecasts, strategyReact 19 + ViteNetlifyNo
Marketing HubBrand planning, launch roadmap, KPI frameworkReact 19 + ViteNetlifyNo
Linelist HubProduct linelist, specs, distribution, marketing beatsReact 19 + ViteNetlifyNo
Recon HubFinancial reconciliation across Zoho and XeroNext.js 14NetlifyYes (PostgreSQL + Redis)
EXG SystemsInternal portal — docs, policies, hub directory, boardNext.js 14NetlifyPlanned (PostgreSQL)
Licensing HubLicensing management, partner agreements, royalty tracking and payouts (planned)React 19 + ViteNetlifyTBC

Technology Stack

Static SPA Hubs

(Compliance, E-commerce, Marketing, Linelist, Peek Site, The Vault)

  • React 19 + TypeScript — UI layer
  • Vite — build tooling and dev server
  • Tailwind CSS — styling
  • React Router — client-side routing
  • Netlify — hosting (CDN-served static files + serverless functions)
  • Netlify Functions — server-side API proxying (secrets never in client bundle)

SPA redirect rule (/* → /index.html) enables client-side routing on all Netlify deployments.

Dev vs production API routing: In development, Vite's proxy middleware forwards API calls to avoid CORS. In production, Netlify Functions act as the secure server-side proxy.

Full-Stack Hubs

(Recon Hub, EXG Systems, future Finance hubs)

  • Next.js 14 + TypeScript — SSR and API routes
  • Prisma ORM + PostgreSQL — relational data persistence
  • Redis (Recon only) — session storage and background job queue (BullMQ)
  • NextAuth.js — OAuth session management
  • Tailwind CSS — styling
  • Netlify — hosting

API Integrations

APIUsed ByAuth MethodWhere Credentials Live
Claude / AnthropicCompliance HubAPI KeyNetlify env var
Zoho InventoryCompliance, E-commerce, ReconOAuth 2.0Netlify env var
Shopify Admin APIE-commerce HubAccess TokenNetlify env var via function
Amazon SP-APIE-commerce HubLWA OAuthNetlify env var via function
Amazon Advertising APIE-commerce HubLWA OAuthNetlify env var via function
Xero Accounting APIRecon HubOAuth 2.0Netlify env var
Azure ADEXG SystemsOAuth 2.0 / OIDCNetlify env var

Rule: All API secrets live in hosting platform environment variables. Secrets are never bundled into client-side JavaScript and never hardcoded in source code. All credentials are also documented in the shared secrets manager (1Password / Bitwarden).


Security Model

Static SPA Hubs

RiskMitigation
Secrets in client bundleAll API calls go through Netlify Functions — secrets are server-side only
No database to breachThese hubs hold zero persistent data; read from third-party APIs at runtime
XSS / injectionReact's virtual DOM escapes output by default; TypeScript enforces type safety at build
CORSNetlify Functions act as same-origin proxy — third-party APIs never called directly from browser in production

Key point: Static hubs contain no user data and no server infrastructure. Worst-case incident is a temporary outage, not a data breach.

Full-Stack Hubs

RiskMitigation
Database credentials exposedStored in server-side env vars only — never client-visible
OAuth token leakageTokens persisted to server-side storage — not exposed to browser
Session hijackingNextAuth.js manages sessions with signed JWTs + NEXTAUTH_SECRET
SQL injectionPrisma ORM uses parameterised queries by default
Redis exposureRedis runs on private network — not publicly accessible

Ports & Domains

HubDev PortProduction DomainHosting
Compliance Hub5173TBCNetlify
E-commerce Hub5174TBCNetlify
Recon Hub5175TBCNetlify
Peek Site5176peekos.exgpro.comNetlify
The Vault5177vault.exgpro.comNetlify
EXG Systems5178systems.exgpro.partnersNetlify
Marketing Hub5179TBCNetlify
Linelist Hub5180TBCNetlify
Partner Portalexgpro.partners

Future Hub Standards

Read-only / analytics hubs (no user-generated data):

  • Use React 19 + Vite + Netlify pattern
  • No database required; data read from third-party APIs at runtime
  • API credentials in Netlify env vars + documented in secrets manager

Hubs that store processed/calculated data:

  • Use Next.js 14 + PostgreSQL pattern (matching Recon Hub)
  • Provision a managed PostgreSQL service (Railway / Supabase / Render) with automated backups from day one
  • Document all OAuth tokens and env vars in the shared secrets manager immediately

Common to all hubs:

  • Source code in Git (GitHub) — version controlled, no secrets in repo
  • All API secrets in environment variables — never hardcoded, never in client bundle
  • SPA redirect rules configured for all Vite hubs
  • Follow the indigo-600 accent colour convention for EXG Systems; each hub uses its own accent (see Brand Guidelines)

For backup schedules, RTO/RPO targets, and disaster recovery procedures, see the Backup & Disaster Recovery Policy.

Document maintained by EXG Engineering. Review when new hubs are added or hosting configuration changes.