CentralCloud unified portal — Elixir/Phoenix umbrella (centralcloud_my: customer, centralcloud_ops: staff/oncall, centralcloud_core: shared)
- README: correct app names (centralcloud_staff not centralcloud_ops) - README: add ROUTER_AGENT_URL/KEY env vars, nix develop quick start - README: clarify staff UI vs backend engine distinction Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> |
||
|---|---|---|
| _build/dev | ||
| apps | ||
| config | ||
| deps | ||
| rel/overlays/bin | ||
| .envrc | ||
| .gitignore | ||
| Dockerfile | ||
| erl_crash.dump | ||
| flake.lock | ||
| flake.nix | ||
| mix.exs | ||
| mix.lock | ||
| README.md | ||
centralcloud/portal
Elixir/Phoenix umbrella — two web surfaces from one codebase.
Apps
| App | URL | Audience |
|---|---|---|
centralcloud_staff |
ops.centralcloud.com |
Staff — ops cockpit, AI chat, on-call |
centralcloud_my |
my.centralcloud.com |
Customers — dashboard, DR, billing, support |
centralcloud_core |
(library) | Shared: HostBill client, DR API client, OIDC |
Note:
centralcloud_staffis the thin UI layer. All business logic (incidents, pager, oncall engine, AI triage) lives in../infra/apps/centralcloud_ops(the backend engine).
my.centralcloud.com will also serve www.centralcloud.com (marketing pages) when DNS is repointed.
Quick start
# Enter dev shell (Elixir 1.20-rc.4 + OTP 28 via Nix)
nix develop
# Install deps (from umbrella root)
mix deps.get
# Run customer portal (port 4001)
cd apps/centralcloud_my && mix phx.server
# Run staff portal (port 4000)
cd apps/centralcloud_staff && mix phx.server
Required env vars
MY_SECRET_KEY_BASE=... # mix phx.gen.secret
OPS_SECRET_KEY_BASE=...
HOSTBILL_API_ID=... # from HostBill admin API keys
HOSTBILL_API_KEY=...
DR_PORTAL_URL=https://dr.centralcloud.com
DR_PORTAL_API_KEY=...
OIDC_CLIENT_ID=... # Authentik application client ID
OIDC_CLIENT_SECRET=...
ROUTER_AGENT_URL=http://router-agent.router-agent.svc:8642
ROUTER_AGENT_API_KEY=... # from OpenBao / k8s secret
Architecture
See ../AGENTS.md for the full codebase map and how portal, engine, and agents relate.