Appearance
Unified Admin + Staff — summary
One workspace app (Admin/) replaces the retired teams portal (staff/UI/ removed from repo; local archive optional). Roles and RBAC control what each user sees; both beentara.com and teams.beentara.com should serve the same build after cutover.
Status
Implementation complete (M1–M23). Local verify: 7/7 API + 8/8 browser green (npm run verify:unified-cutover).
Your next steps are operational: production deploy and DNS. Optional: drop Backend legacy API aliases when logs show zero traffic.
Architecture at a glance
mermaid
flowchart LR
subgraph clients [Browsers]
A[beentara.com]
T[teams.beentara.com]
end
subgraph static [One deploy]
B[Admin/build]
end
subgraph api [Backend]
API[api.beentara.com]
end
A --> B
T --> B
B --> API| Layer | Canonical path | Notes |
|---|---|---|
| Frontend | Admin/ | Staff Login on /login; home /dashboard |
| Legacy staff app | (removed) | Archived locally; see staff-ui-retirement.md |
| RBAC catalog | Backend/utils/rbacCatalog.js | Run npm run sync:rbac after path changes |
| Staff API auth | JWT + permissionGuard | Admin/SuperAdmin bypass; Staff fail-closed |
Milestone index
Full history: unified-app-migration.md.
| Phase | Milestones | Outcome |
|---|---|---|
| Unify UX | M1–M5 | Staff auth, guards, menu, dashboard, route parity |
| API cleanup | M6–M7, M11–M13 | Task list/history, archives, notes, enquiry create |
| Ship readiness | M8–M10 | Env example, API + browser smoke, go-live sign-off |
| QA | M9 | Playwright unified app smoke |
Docs map
| Document | Use when |
|---|---|
unified-app-go-live.md | Pre-production sign-off |
unified-app-cutover.md | DNS, single artifact, legacy URLs |
unified-app-browser-qa.md | Manual + Playwright UI checks |
api-consolidation.md | Which API paths are canonical vs legacy |
staff-ui-retirement.md | After go-live: stop teams deploy |
Verify locally
Backend on :5000, Admin on :3000:
bash
npm run dev:unified:backend
npm start --prefix Admin
npm run verify:unified-cutover:waitProduction: set REACT_APP_LINK in Admin/.env.production (not .env), then:
bash
npm run build:admin
# after deploy:
SMOKE_API_BASE=https://api.beentara.com ADMIN_URL=https://beentara.com npm run verify:unified-stagingLocal Backend: Redis/FCM errors in the console are common without Redis; smokes only need /healthz + DB. Optional: DISABLE_REDIS=1, DISABLE_NOTIFICATION_WORKER=1 in Backend/.env (see .env.example).
Future (not scheduled)
- Drop legacy API aliases once access logs show zero use