v1.3 — Standalone Admin Dashboard
Every operator-facing surface lifted out of the mobile app and into a desktop-first Vue 3 SPA —
admin_dashboard/— with Clerk auth, role-based access, and an approval workflow wired end-to-end before public launch.
Summary
Pre-v1.3, Objectuve's admin surface lived as an eight-tab segment inside the Ionic mobile app. It worked for a founder on a laptop, but every admin workflow — moderation, user investigation, billing reconciliation, log inspection — is a desktop task. The Ionic segmented-tab pattern collapses at eight tabs even on tablet; there was no RBAC, no audit log, and no GDPR tooling. The original PRD (Standalone Admin App PRD) argued that waiting for Phase 7 to extract was too late — public launch would arrive first.
v1.3 executed the extraction. admin_dashboard/ shipped as a new Vue 3 + Vite + Tailwind SPA (no Ionic) alongside the existing frontend, with eleven functional views (Dashboard, Users, Moderation, Analytics, Monitoring, Feedback, AI Workforce, Review Queue, Employee Detail, Run Detail, Sign-In), Clerk auth with a fallback token for outages, an AdminRole join table replacing the old User.admin boolean, and an AdminAction audit log wrapping every admin mutation via the Admin::Logged interaction concern.
The dashboard also introduced the Review Queue that v1.4 AI Workforce would rely on, and a first-pass moderation + feedback ingestion surface. The evolution of this dashboard — pagination, GDPR wizards, billing console, observability — is scoped in the follow-up Admin Evolution PRD.
Goal
Extract operator-facing work from the mobile app into a standalone Vue 3 + Vite + Tailwind admin dashboard, enforce RBAC via
AdminRole, audit every admin action viaAdminAction, and give the Review Queue a desktop-first home before public launch.
Scope — What Shipped
- New monorepo app at
admin_dashboard/— Vue 3 + Vite + Tailwind + Headless UI + Heroicons (no Ionic). - Clerk OAuth with a fallback-token path for Clerk outages or local testing.
- 11 functional views — Dashboard (activity log + 8 stat cards), Users (backend search + role editor), Moderation (content flags + reports), Analytics (growth + engagement + activity), Monitoring (health + Sidekiq + AI usage), Feedback, AI Workforce, Review Queue, Employee Detail, Run Detail, Sign-In.
AdminRolemodel with four roles (super_admin,admin,support,moderator); replaces the legacyUser.adminboolean (kept as a derived shim).AdminActionaudit log — every admin mutation wrapsAdmin::Logged, capturing actor, target (polymorphic), action type, metadata, and before/after state.Admin::UserSearchinteraction — backend-side ILIKE search overconcat_ws(username, first_name, last_name, email, public_id)(trigram indexes deferred to the follow-up evolution PRD).Admin::UpdateUserRolesmutation — grant/revoke admin roles with audit trail.- Moderation queue + review mutations —
review_content_flag,review_content_reportwith severity-aware sorting. - Feedback ingestion surface — post list, status updates, top posts, category breakdown.
- Firebase Hosting target
enkidu-admin(+ staging). - Shared Apollo client config — reuses the ionic_frontend's
SessionTokenheader contract. - Unit tests — 24 Vitest specs across 15 components and 9 views.
Phases
| Phase | Name | Status | Highlights |
|---|---|---|---|
| 1–7 | Initial admin app extraction | Shipped | Shell, auth, layout, Dashboard, Users, Moderation |
| 8–12 | Ionic feature parity + supporting views | Shipped | Analytics, Monitoring, Feedback, AI Workforce prep, Review Queue |
Exact phase-by-phase breakdown was not archived under .planning/milestones/v1.3-* — the work shipped via PR #312 across 12 phases on the feature/admin-dashboard-v1.3 branch.
Key Decisions
- Separate monorepo app, not a new repo — reuses monorepo conventions (Apollo, Tailwind, Vitest, Storybook, Firebase Hosting targets). A sibling app directory is the lowest-friction extraction.
- Vue 3 + Vite + Tailwind without Ionic — desktop-first layouts need dense tables, multi-column forms, and keyboard shortcuts. Ionic's mobile-optimised components fight those patterns.
AdminRoleas a join table, not a new enum column — supports multiple roles per user, role history, and future scoping (e.g.team_admin(team_id)).User.adminkept as a derived boolean — backward compatibility for one release; downstream code can keep askinguser.admin?without migration pressure.- Audit log enforced at the interaction layer — every admin mutation must wrap
Admin::Loggedor RuboCop/CI catches it. Frontend gates are UX; backend gates are truth.
Requirements Coverage
Requirements were tracked informally through phase checklists on the branch; there is no canonical v1.3-REQUIREMENTS.md. The follow-up Admin Evolution PRD restates the scope gaps (pagination, GDPR, billing console, feature flags, observability parity) that v1.3 intentionally deferred.
Outcomes
- Eleven functional admin views live on
staging.admin.objectuve.comand (post-release) the production admin origin. - Role delegation possible. First support or moderator hire gets a scoped account, not super_admin.
- AI Workforce unblocked. v1.4 shipped its Review Queue and Employee Detail views into this shell instead of bolting tabs onto Ionic.
- Mobile bundle shrank. Admin code was removed from the user-facing Ionic build, reducing attack surface and install size.
Known Gaps (addressed in follow-up)
- No pagination on admin queries (at 5K MAU this starts to hurt).
- No frontend RBAC enforcement — all authenticated admins currently see every button; backend rejects but UI doesn't hint.
- No GDPR request queue / export wizard / deletion wizard.
- No Stripe webhook log, refund workflow, or reconciliation tool.
- No feature flag UI; flags still in
config/settings/*.yml. - No Sentry / PostHog on the admin app itself.
All tracked in Admin Evolution PRD.
Related Artifacts
- Planning trail: not archived under
.planning/milestones/v1.3-*; work shipped on thefeature/admin-dashboard-v1.3branch. - Original PRD: Standalone Admin App PRD
- Follow-up PRD: Admin Evolution PRD
- Merge PR: #312 Feature/admin dashboard v1.3
- Git tag: none (no v1.3 release tag was cut; the work merged to master as part of the v1.4 preparation cycle)
Related Commits
6d61ee0c1—Feature/admin dashboard v1.3 (#312)102d9ee95—docs: add phases 8-12 to v1.3 roadmap for Ionic admin feature parityb1fdc7860—docs: save requirements and roadmap for v1.359c2c87df—docs: start milestone v1.3 Standalone Admin App856d3bd4c—feat(admin): restore analytics, monitoring, moderation, and feedback views
Last updated: 2026-05-22