CentralCloud unified portal — Elixir/Phoenix umbrella (centralcloud_my: customer, centralcloud_ops: staff/oncall, centralcloud_core: shared)
Find a file
2026-05-13 01:58:23 +02:00
.bg-shell Commit current workspace state 2026-05-13 01:58:23 +02:00
.sf Commit current workspace state 2026-05-13 01:58:23 +02:00
_build/dev Commit current workspace state 2026-05-13 01:58:23 +02:00
apps sf snapshot: uncommitted changes after 2133m inactivity 2026-05-13 01:30:33 +02:00
config sf snapshot: uncommitted changes after 2133m inactivity 2026-05-13 01:30:33 +02:00
deps Commit current workspace state 2026-05-13 01:58:23 +02:00
docs sf snapshot: uncommitted changes after 2133m inactivity 2026-05-13 01:30:33 +02:00
rel/overlays/bin fix: make server/migrate scripts app-agnostic 2026-05-11 13:52:44 +02:00
.envrc feat: add flake.nix, .envrc, fix config (runtime.exs), deps compile clean 2026-05-09 19:55:48 +02:00
.gitignore sf snapshot: uncommitted changes after 2133m inactivity 2026-05-13 01:30:33 +02:00
.siftignore sf snapshot: uncommitted changes after 2133m inactivity 2026-05-13 01:30:33 +02:00
AGENTS.md sf snapshot: uncommitted changes after 2133m inactivity 2026-05-13 01:30:33 +02:00
ARCHITECTURE.md sf snapshot: uncommitted changes after 2133m inactivity 2026-05-13 01:30:33 +02:00
Dockerfile sf snapshot: uncommitted changes after 2133m inactivity 2026-05-13 01:30:33 +02:00
erl_crash.dump sf snapshot: uncommitted changes after 2133m inactivity 2026-05-13 01:30:33 +02:00
flake.lock sf snapshot: uncommitted changes after 2133m inactivity 2026-05-13 01:30:33 +02:00
flake.nix sf snapshot: uncommitted changes after 2133m inactivity 2026-05-13 01:30:33 +02:00
mix.exs sf snapshot: uncommitted changes after 2133m inactivity 2026-05-13 01:30:33 +02:00
mix.lock sf snapshot: uncommitted changes after 2133m inactivity 2026-05-13 01:30:33 +02:00
README.md docs: update README and AGENTS.md after centralcloud_staff rename 2026-05-11 13:19:30 +02:00
result sf snapshot: uncommitted changes after 2133m inactivity 2026-05-13 01:30:33 +02:00

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_staff is 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.