Skip to content

Instantly share code, notes, and snippets.

@patcito
Last active May 19, 2026 12:52
Show Gist options
  • Select an option

  • Save patcito/8f1553aa6cc930d134d9807abbbce388 to your computer and use it in GitHub Desktop.

Select an option

Save patcito/8f1553aa6cc930d134d9807abbbce388 to your computer and use it in GitHub Desktop.
Admin Dashboard v2 — status by route (what works / what's missing)

Admin Dashboard v2 — status by route

Live URL: https://admin-dashboard-v2-bay.vercel.app/

What works, what's mocked, what's missing — one row per route. Backend lives in asp-v2 at api-dev.0xbow.io.

Status legend:

  • ✅ Live and wired to the real backend
  • 🟡 Partial / mock data / cosmetic gaps
  • 🟠 Backend endpoint exists, frontend not yet using it
  • 🔴 No backend endpoint — screen 404s or shows placeholder

Overview

Route Status What works What's missing
/ Sign in with Google (OIDC), session persists, permissions come from /admin/verify-token
/auth/callback OIDC code+PKCE exchange against /admin/auth/oidc/exchange
/(admin) (dashboard) Global statistics, entrypoints, token prices. Pool cards grid linking to each pool dashboard. All money values now use the shared utils/money.ts formatter (USD → no decimals, ETH → 2 decimals, both compact above 100K).

Deposits / Withdrawals

Route Status What works What's missing
/deposits List with filters (status, address), paged, multi-select, bulk Approve / Decline / Revalidate, CSV export across all pages
/deposits/[id] Real detail page (overview / risk / onchain block), per-row Approve / Decline / Revalidate / Comment, formatted money Decision history + comment thread feed (backend serializer needs decisions and adminComments)
/withdrawals List with address filter, paged, CSV export across all pages, formatted amounts

Pools

Pool configuration (which pools exist, their min/max deposit, etc.) is read-only because pools are deployed onchain. Per-pool actions (approve/decline deposits, post comments, revalidate) work the same as on the global screens.

Route Status What works What's missing
/pools Read-only listing from /admin/assets, chain-name mapping. New Pool / Edit buttons removed (pools are deployed onchain).
/pools/[poolId] Per-pool dashboard wired to fetchPool + chain-scoped events for deposit/withdrawal counts, formatted min/max deposit TVL is hardcoded to 0 until /admin/assets-stats accepts a per-asset filter
/pools/[poolId]/deposits Real deposits list scoped to the pool's chainId, with multi-select + bulk Approve / Decline / Revalidate (same actions as /deposits) and CSV export Pool/asset-scoped filter; right now this shows all deposits on the chain
/pools/[poolId]/withdrawals Real withdrawals list scoped to chain, with CSV export Same chain-vs-asset scope caveat
/pools/[poolId]/addresses Informational redirect — backend whitelist/blacklist is global, not pool-scoped

Addresses (Whitelist / Blacklist)

Route Status What works What's missing
/addresses Full CRUD on whitelist + blacklist (/admin/whitelist, /admin/blacklist), paged, permission-gated

Risk / Alerts / Investigations (PR #69, merged)

Route Status What works What's missing
/risk/rules Full CRUD on /admin/risk/rules — New / Edit / Toggle / Delete Runtime risk evaluator still doesn't read these rules (config-only for now)
/risk/policy 🟡 UI scaffold only No backend
/risk/checks 🟡 UI scaffold only No backend
/risk/changelog 🟡 UI scaffold only No backend
/risk/lists 🟡 UI scaffold only No backend
/alerts Full CRUD on /admin/alerts/rules + history acknowledge Alert generation (no engine emits alert_event rows yet); delivery-channel CRUD removed (no backend)
/investigations List, New modal (title + description + severity), refresh; rows link to detail; permission-gated on MANAGE_INVESTIGATIONS "Add Evidence" hidden until backend supports evidence
/investigations/[id] Real detail view with Edit modal (title/description/status/severity) and Conclude action Linked deposits / addresses / evidence — backend has no relations table yet

Operations

Route Status What works What's missing
/users Admin users list, invite, role editor, deactivate
/killswitch Global + per-chain killswitches via /admin/settings/killswitches Per-pool / per-asset scope is not modelled on backend
/merkle-tree Read-only association set view via public endpoints Admin merkle tree rollback / push-empty / push-filtered actions aren't surfaced in the UI yet
/audit-log 🔴 UI exists No /admin/audit-log endpoint on backend

Settings

Route Status What works What's missing
/settings 🟡 Tabs scaffold Most tabs hit endpoints that don't exist yet
/settings/password Static "managed by Google" notice (federated auth)
/settings/security Static "2FA managed by Google" notice; native biometric unlock toggle
/settings/configuration 🟡 Reads /admin/settings/current and lets super_admin patch JSON Schema-aware editor; for now it's a raw JSON form
/settings/history 🟡 Reads /admin/settings/history + rollback
/settings/sessions 🔴 UI exists No /admin/sessions endpoint
/settings/notifications 🔴 UI exists No /admin/notifications/* endpoints
/settings/permissions 🟡 Static rendering of role → permission matrix
/settings/integrations 🟡 Static scaffold No backend for integration CRUD
/settings/asp-config 🟡 Static scaffold No backend
/settings/system-settings 🟡 Tab navigates between global / chain / pool sub-views — only global works via /admin/settings/* Per-chain / per-pool settings aren't first-class on backend
/settings/shortcuts 🟡 Static list of keyboard shortcuts

Stats / Other

Route Status What works What's missing
/stats 🟡 Reuses public statistics Risk-distribution view is mock-only
/stats/health Live via /:chainId/health/*
/stats/pools 🟡 Renders against fetchPools; per-asset TVL is 0; money values use the shared formatter Backend asset stats need per-asset filter
/stats/risk 🔴 UI exists, fetchRiskDistribution throws No backend
/compliance 🔴 UI exists No /admin/compliance/* endpoints
/cross-pool 🟡 Scaffold No backend
/kyt 🟡 Scaffold No backend
/search Cross-deposit/withdrawal search, formatted amounts
/glossary Static glossary content

What v1 had that v2 still doesn't

  • POI (Proof of Innocence) flow on deposits — deliberately deferred (per Patrick).
  • Per-asset TVL on pool dashboards — needs backend filter on /:chainId/admin/assets-stats.
  • Audit log, sessions, notifications, compliance — frontend screens exist, no backend.

What changed in this batch

  • Pool sub-routes (/pools/:poolId/{deposits,withdrawals,addresses}) — wired to real data; no more "unavailable" placeholders.
  • Main dashboard — new Pools card grid above Supported Chains, each card links to the per-pool dashboard.
  • Money formatting — shared utils/money.ts applied everywhere amounts are shown: USD/stablecoin → integer thousand-separated, ETH-style → up to 2 decimals, anything above 100K → compact (250K / 1.2M / 4.5B).
  • Investigations — Conclude works; View now navigates by the real numeric id; detail page is a real Edit form.
  • Alerts — dead "Configure / Edit" channel buttons removed.
  • Per-pool dashboard — TVL hero + range cards use the shared formatter.

Open asp-v2 PRs that move the dial

No open backend PRs for audit log, sessions, notifications, compliance, deposit decisions feed, or POI.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment