Files
oO/apps/admin
alvis 9e96540bcc feat(admin): per-user profile view + rebuild action (#81 phase B.1)
Surfaces phase A's profile features in /admin/users/:id so we can verify
they're actually computing useful values before investing in bandit
consumption. The detail GET now includes profile rows joined with registry
metadata (name, value, age, fresh badge, ttlSec, description). Read does
NOT trigger compute — staleness must be visible. A new POST
.../profile/rebuild button force-recomputes and is audit-logged like
reset-bandit.

Refs #81.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-25 00:27:08 +00:00
..

apps/admin — oO Admin Console

Next.js 15 app. Deployed at admin.o.alogins.net (dev: http://localhost:3080).

Contract

  • All routes are admin-only. The Next.js middleware calls GET /api/user/me on every request and checks role === 'admin'. First admin is seeded via ADMIN_SEED_EMAIL env var at API startup.
  • Admin write actions are appended to the admin_actions audit log in the DB.

Pages

Route Description
/ Overview: DAU/WAU KPI cards, tips served, reaction breakdown, activation funnel
/users User list (paginated)
/users/:id User detail: identity, consents, integrations, profile features (#81 phase B), tip stats, reward history; revoke-integration + reset-bandit + rebuild-profile actions
/audit Admin action audit log
/events Event stream viewer (stub — pending API history endpoint)
/reward-analytics Reaction distribution + per-policy / per-model / per-prompt-version / per-tip-kind breakdowns with avg reward

Dev

pnpm --filter @oo/admin dev   # starts on :3080
# also run the API: pnpm --filter @oo/api dev  (port 3078)

Extraction criteria

Stays as a Next.js app in the monorepo permanently — it's not a candidate for extraction. It gets richer (more pages, embedded MLflow/Grafana) but not split.

Known issues

  • @tremor/react 3.x declares a peer dep on React 18; the workspace uses React 19. Works in practice. Will resolve naturally when Tremor ships React 19 support or when we switch to Tremor v4 (which targets React 18+).