Skip to content

Admin panel

Stack: Vue 3, Vuetify 3, Vue Router, Pinia, Vite.

Role: the central, operator-facing app. It never operates as a tenant, it manages tenants, the opposite side of the fence from the POS frontend. It talks to the same API base URL as the frontend, authenticates via Sanctum, and never sends X-Tenant-ID.

From routes/admin.php on the API side, the main areas are:

  • Auth: login, logout, profile, password.
  • Dashboard: tenant statistics.
  • Admins: CRUD, activate/deactivate.
  • Tenants: CRUD, activate/deactivate, extend subscription, change plan, suspend, reactivate, cancel, renew, subscription history, usage.
  • Tenant contacts and domains: set a tenant’s frontend domain.
  • Packages / features: package CRUD, package-features, tenant-features (grant/revoke/disable per tenant).
  • Per-tenant operational views: system config overrides, stores list, eTIMS config, Tuma businesses.
  • Broadcast: notify tenants/stores, force refresh.
  • Notifications history.
  • Backups: trigger central/all-tenants/single-tenant backups, restore (super_admin only).
Terminal window
pnpm install
pnpm run dev # :3000
pnpm run build
pnpm run lint

Needs VITE_TITAN_API_URL pointing at the API, no trailing slash. There’s no tenant-setup step to get through, unlike the frontend.