Documentation
IntroductionArchitectureMonorepo & ToolingRunning Locally
Screen Flow MapUser JourneysPersonas & RolesWeb ScreensClient Portal
Convex OverviewData ModelFunctions ReferenceAuth & SessionsRoles & PermissionsJobs & Providers
Web Design SystemAdmin Console DesignPatterns & Conventions
Web AppiOS AppMarketing Website
Testing & HarnessCI Pipeline

Personas & Roles

Personas & Roles

Pawdentity serves four personas across three surfaces, with a six-level role hierarchy shared by every layer of the stack.

Personas

Pet parent (customer)

Books stays, pays deposits and balances, signs agreements, uploads vet records, follows their pet's stay, and messages the front desk. Lives in the customer portal (/o/{slug}/portal) and, in the future, the iOS companion app. Same login door as staff.

Facility staff (volunteer → supervisor)

Runs the day: the facility board, check-ins/outs, care logging, bookings, POS. Front-desk employees handle CRM, messaging, and orders. The volunteer role sees only Dashboard and Board (note: the product decision is to drop volunteer; it still exists in the enum).

Facility manager / owner

Everything staff can do, plus: settings (branding, locations, role policies, agreements, reminders), catalog management, refunds, check-in overrides, time approvals, schedules, staff management (owner), and reports.

Platform owner (landlord)

Reviews tenant applications and provisions orgs at /platform. Defined as holding an active owner membership in any org.

The role hierarchy

Role hierarchy (ROLE_RANK)
owner
rank 150
manager
rank 100
supervisor
rank 75
employee
rank 50
customer
rank 5
Resolving a policy action
orders.refund
a mutation calls requirePolicy
rolePolicies override?
Settings → Roles, per org
none
POLICY_DEFAULTS
orders.refund → manager
requireRole(minRole)
roleAtLeast(my role, min)?
yes
no
handler runs
ConvexError: FORBIDDEN
Authorization = role rank × per-org policy board — enforced server-side in requirePolicy()

Defined once in packages/domain (ROLE_RANK) and used by schema validators, backend policy checks, and frontend nav gating:

RoleRankTypical use
owner150Business owner; staff management, refund overrides
manager100Shift lead with settings access
supervisor75Senior floor staff
employee50Front desk / floor staff — the default working role
volunteer20Board-only access (being phased out)
customer5Pet parents (portal only)

roleAtLeast(role, min) is the comparison helper everywhere.

What each role sees (web app nav)

Nav itemMinimum role
Dashboard, Boardvolunteer
Clients, Pets, Visits, Calendar, Orders, Catalog, Notes, Messages, Schedule, Reportsemployee
Staffowner
Settingsmanager

Nav gating is user experience only — every backend function independently enforces its policy. See Roles & Permissions for the full policy-action table and the per-org override board.

Persona → surface map

PersonaSurfaceEntry
Pet parentCustomer portal/login → portal
Pet parentiOS appnative sign-in (mock today)
Staff / managers / ownersStaff app/login → /accounts → /o/{slug}/dashboard
Platform ownerLandlord admin/platform (link in org sidebar footer)
ProspectMarketing + applypawdentity.com → /apply

The Screen Flow Map uses these personas as swim lanes.