Cloud-agnostic React dashboard for managing environments, deployments, and operations.
src/
auth/ Auth abstraction layer
adapters/ Provider-specific implementations (Cognito, OIDC)
AuthProvider.tsx React context provider
useAuth.ts Hook for consuming auth state
api/client.ts API client with token refresh
config.ts Runtime config (reads window.__CONFIG__)
components/ Shared UI + business components
pages/ Route-level page components
context/ React contexts (favorites, SSM sessions)
public/
config.js Runtime config placeholder (overwritten in Docker)
docker/
nginx.conf Nginx SPA config with API proxy
generate-config.sh Writes config.js from env vars
entrypoint.sh Docker entrypoint
npm install
npm run devThe dev server runs on http://localhost:5173 and proxies /api to http://localhost:3001.
For auth config during local dev, either:
- Edit
public/config.jsdirectly, or - Set
VITE_*env vars (e.g.VITE_COGNITO_CLIENT_ID)
docker build -t admin-mc-ui .
docker run -p 8080:80 \
-e AUTH_PROVIDER=cognito \
-e COGNITO_POOL_ID=us-east-1_xxxxx \
-e COGNITO_CLIENT_ID=abc123 \
-e COGNITO_DOMAIN=myapp \
-e API_UPSTREAM=http://backend:3001 \
admin-mc-uidocker compose up --build- Push image to ECR/GHCR
- Create ECS task definition with environment variables (see
.env.example) - Set
API_UPSTREAMto your backend ALB URL - Map port 80 to your load balancer target group
- Health check path:
/health
apiVersion: apps/v1
kind: Deployment
metadata:
name: admin-mc-ui
spec:
replicas: 2
selector:
matchLabels:
app: admin-mc-ui
template:
metadata:
labels:
app: admin-mc-ui
spec:
containers:
- name: ui
image: ghcr.io/your-org/admin-mc-ui:latest
ports:
- containerPort: 80
env:
- name: AUTH_PROVIDER
value: "oidc"
- name: OIDC_AUTHORITY
value: "https://your-idp.example.com"
- name: OIDC_CLIENT_ID
value: "your-client-id"
- name: API_UPSTREAM
value: "http://backend-service:3001"
livenessProbe:
httpGet:
path: /health
port: 80
readinessProbe:
httpGet:
path: /health
port: 80
---
apiVersion: v1
kind: Service
metadata:
name: admin-mc-ui
spec:
selector:
app: admin-mc-ui
ports:
- port: 80
targetPort: 80| Variable | Default | Description |
|---|---|---|
AUTH_PROVIDER |
cognito |
Auth provider: cognito or oidc |
COGNITO_POOL_ID |
Cognito User Pool ID | |
COGNITO_CLIENT_ID |
Cognito App Client ID | |
COGNITO_DOMAIN |
Cognito domain prefix | |
COGNITO_REGION |
us-east-1 |
AWS region for Cognito |
OIDC_AUTHORITY |
OIDC issuer URL (Auth0, Okta, Keycloak) | |
OIDC_CLIENT_ID |
OIDC client ID | |
OIDC_REDIRECT_URI |
{origin}/ |
Post-login redirect |
OIDC_POST_LOGOUT_REDIRECT_URI |
{origin}/ |
Post-logout redirect |
API_BASE_URL |
/api |
API base path (frontend) |
API_UPSTREAM |
http://host.docker.internal:3001 |
Backend URL (nginx proxy) |
APP_TITLE |
Admin Mission Control |
Browser title |
Set AUTH_PROVIDER=cognito and provide COGNITO_POOL_ID, COGNITO_CLIENT_ID, COGNITO_DOMAIN. The app uses the Cognito Hosted UI with authorization code flow.
Set AUTH_PROVIDER=oidc and provide OIDC_AUTHORITY (issuer URL) and OIDC_CLIENT_ID. Uses oidc-client-ts with authorization code + PKCE flow.