CentralCloud unified portal — Elixir/Phoenix umbrella (centralcloud_my: customer, centralcloud_ops: staff/oncall, centralcloud_core: shared)
- flake.nix: Elixir 1.18.4 / OTP 27 / Node 22 dev shell - .envrc: use flake - config/config.exs: move fetch_env! to runtime.exs (compile-time safe) - config/runtime.exs: all secrets loaded at runtime via env vars - mix.lock: generated after mix deps.get - All 3 apps compile cleanly Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> |
||
|---|---|---|
| _build/dev | ||
| apps | ||
| config | ||
| deps | ||
| .envrc | ||
| erl_crash.dump | ||
| flake.lock | ||
| flake.nix | ||
| mix.exs | ||
| mix.lock | ||
| README.md | ||
centralcloud
Elixir umbrella app for CentralCloud customer and staff portals.
Apps
| App | URL | Audience |
|---|---|---|
centralcloud_my |
my.centralcloud.com |
Customers — unified dashboard |
centralcloud_ops |
ops.centralcloud.com |
Staff — ops and on-call |
centralcloud_core |
(library) | Shared: HostBill client, DR API client, OIDC |
my.centralcloud.com will also serve www.centralcloud.com (marketing pages) when DNS is repointed.
Quick start
# Install Elixir 1.17+ and Phoenix
mix local.hex --force
mix archive.install hex phx_new --force
# Install deps
mix deps.get
# Run my. portal (port 4001)
cd apps/centralcloud_my
mix phx.server
# Run ops portal (port 4000)
cd apps/centralcloud_ops
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=...
Architecture
See ../dr-repo/docs/adr/001-unified-portal-architecture.md