diff --git a/README.md b/README.md index fcda39b..d60386c 100644 --- a/README.md +++ b/README.md @@ -47,6 +47,7 @@ The Inference Cooperative runs a self-hosted stack on [Cloudron](https://cloudro | **LiteLLM** | AI gateway — keys, metering, model routing | gateway.inference.coop | | **Member Portal** | Membership middleware — onboarding, key provisioning, Loomio sync | portal.inference.coop | | **Member Dashboard** | Member-facing usage view + API key management | dashboard.inference.coop | +| **Admin Panel** | Admin-only member overview, spend, and balance management | panel.inference.coop | | **SearXNG** | Self-hosted web search (feeds the chat's search tool) | search.inference.coop | | **Gitea** | Git hosting (code + docs) | git.inference.coop | | **Loomio** | Member governance | forum.inference.coop | @@ -108,7 +109,7 @@ By creating your account, you agree to these terms. ## Planning -- [API access, member dashboard & admin dashboard](implementation-plan-api-dashboards.md) — the plan for API access, key management, and dashboards (Steps 1–4 complete; admin dashboard pending). +- [API access, member dashboard & admin dashboard](implementation-plan-api-dashboards.md) — the plan for API access, key management, and dashboards (Steps 1–5 complete). --- diff --git a/implementation-plan-api-dashboards.md b/implementation-plan-api-dashboards.md index 5145cd4..7e02f4a 100644 --- a/implementation-plan-api-dashboards.md +++ b/implementation-plan-api-dashboards.md @@ -175,13 +175,16 @@ Member (browser) ──SSO──▶ Member Dashboard (new Cloudron app, "members ### Step 5 — Admin dashboard (Phase 4) -- Co-op-wide view, admin-gated. Build after the member dashboard stabilizes (lower urgency — LiteLLM's UI covers some of it). -- **Gate:** admins see all members + aggregate spend; members cannot reach it. +**COMPLETED (2026-09-14).** New Cloudron app `code/admin-panel`, deployed at `panel.inference.coop`. + +- **App**: FastAPI, `proxyAuth` SSO + an `ADMIN_USERNAMES` allowlist (so only `ntnsndr` / `inference-admin` reach it, not ordinary members). +- **Data**: calls the portal's `GET /admin/overview/{token}` (member list + balance + spend + reset date + co-op aggregates) and `POST /admin/set-balance/{token}` (top-up / adjust a member's balance). +- **UI**: co-op totals (members / active / total spend) + a member table with per-row balance, spend, remaining, reset date, and an inline "add balance" action. +- **Gate:** admin identity reaches the overview; a non-admin member gets 403. ### Step 6 — Documentation (Phase 5) -- API endpoint + format + budget-sharing note; member dashboard how-to; add the budget-split open question. -- **Gate:** a brand-new member could follow the docs to retrieve a key and make an API call without help. +- README now has an **API access** section (endpoint, auth, example curl, same-balance note) and lists the Admin Panel in the components table. ### Rollback