# Owner Console — Access Guide

**Product:** Below The Show · belowtheshow.com  
**Console:** unlisted `/admin/`  
**Bar:** elite · **Save live** · 2026-09-29

## Start here

| You want… | Go |
|---|---|
| Sign in | `/admin/login.html` |
| Site OK? | Console → **Home** |
| **Accounts** | Console → **People** → Save local accounts live |
| **Subscribers** | Console → **Subscribers** |
| Publish / pause | Console → **Publish / Pause** → **Save live** |

## Live write APIs

| Route | Methods |
|-------|---------|
| `/api/admin/health` (alias `/api/owner/ping`) | GET (public) |
| `/api/admin/status` (alias `/api/owner/status`) | GET, PUT (`action`: live\|hold\|kill) |
| `/api/admin/accounts` | GET, PUT `{ users }` |
| `/api/admin/subscribers` | GET, PUT stub |
| `/data/status.json` | GET live from KV |

Auth: `Authorization: Bearer <passphrase SHA-256>` from Owner sign-in, **or** Pages secret `OWNER_TOKEN`.  
KV: `BTS_KV` \| `BTS_ADMIN` \| `ADMIN_KV`.  
Setup: `../FUNCTIONS.md`. Local: `node ops/owner-api/server.mjs`.

## Passphrase

Default (change ASAP): `BelowTheShow-Owner` → hash in `owner.config.json`. Production: Cloudflare Access + `OWNER_PASS_SHA256` / `OWNER_TOKEN`.


## People / Users (2026-09-29)

Owner Console → **People** shows live users with login counts, last login, engagement, last active, and avatar thumbs.

| Route | Auth | Purpose |
|-------|------|---------|
| `GET /api/admin/accounts` | Bearer | Users + analytics (no password hashes) |
| `POST /api/public/auth/register` | none | Create account → KV |
| `POST /api/public/auth/login` | none | Login · increments `loginCount` |
| `GET/PATCH /api/public/me` | session | Profile |
| `POST/DELETE /api/public/me/avatar` | session | Profile photo |
| `GET /api/public/avatar/:userId` | none | Serve avatar |
| `POST /api/public/telemetry` | session | Page/action engagement |

Local-only accounts need one re-login (or create) to sync onto the live KV registry.
