User Journey Docs: Property Manager/Owner Role
Purpose: This document describes the complete user journey for the Property Manager/Owner role in the CasaHub (MiCasa) application. It serves as a reference for QA testers and anyone who needs to understand how this role flows through the application.
Companion Document: QA test Plan
Table of Contents
- Authentication
- Onboarding Flow
- Manager Dashboard
- Project Management
- Unit Management
- Building & Phase Management
- Team Management
- Applications & Contracts
- Agent Directory
- Billing & Subscriptions
- Permission Boundaries
1. Authentication
1.1 Registration (New Account)
User Story:
As a new Property Manager, I want to create an account so that I can access the platform and manage my properties.
User Journey:
-
User navigates to
casahub.jh.frappe.cloud/micasa -
User clicks "Create Account" or "Sign Up" button
-
User chooses registration method:
- Manual Registration:
- User enters first name, last name, email, and password
- User clicks "Create Account" button
- Account is created in the system
- Single Sign-On (Google):
- User clicks "Sign in with Google" button
- User is redirected to Google OAuth flow
- User selects/confirms Google account
- Account is created and linked to Google identity
- Manual Registration:
-
After successful registration, user is automatically logged in
-
User is redirected to
/onboarding-check
Expected Behavior:
-
Registration form validates all required fields before submission
-
Password must meet minimum requirements (8+ characters)
-
Email must be unique in the system
-
User receives a welcome email after account creation
-
Upon successful registration, user has only the base "MiCasa User" role
-
User cannot access any dashboard or protected routes until onboarding is complete
Success Criteria:
-
Account created successfully in database
-
User session is established (logged in)
-
User is redirected to onboarding flow
-
User has only "MiCasa User" role at this point
1.2 Login (Existing Account)
User Story:
As a returning Property Manager, I want to log in to my account so that I can access my dashboard and manage my properties.
User Journey:
-
User navigates to
/micasa/login -
User chooses login method:
- Email/Password:
- User enters registered email address
- User enters password
- User clicks "Sign In" button
- Google SSO:
- User clicks "Sign in with Google" button
- User completes Google OAuth flow
- Email/Password:
-
System validates credentials
-
Upon successful login:
- If onboarding incomplete → redirect to
/onboarding-check - If onboarding complete → redirect to role-specific dashboard (
/manager/dashboardor/owner/dashboard)
- If onboarding incomplete → redirect to
Expected Behavior:
-
Invalid credentials show clear error message
-
"Forgot Password" link is available for password recovery
-
Session persists across browser tabs
-
User's active role determines which dashboard they land on
Success Criteria:
-
User is authenticated and session is established
-
User is redirected to appropriate destination based on onboarding status
-
Dashboard loads with user's data
1.3 Logout
User Story:
As a logged-in user, I want to log out so that my session is securely ended.
User Journey:
-
User clicks on their profile/avatar in the sidebar
-
User clicks "Logout" option
-
System clears session and authentication tokens
-
User is redirected to login page
Expected Behavior:
-
All protected routes become inaccessible after logout
-
Attempting to access
/manager/dashboarddirectly redirects to login -
Session storage is cleared
Success Criteria:
-
User session is terminated
-
User cannot access protected routes
-
User is redirected to login page
2. Onboarding Flow
2.1 Onboarding Check
User Story:
As a new user, I want the system to guide me through required setup steps so that my account is properly configured.
User Journey:
-
User arrives at
/onboarding-check(automatically after registration/login) -
System checks user's onboarding status:
profile_completed: Has user filled in required profile fields?primary_role_selected: Has user chosen their primary role?
-
System redirects based on status:
- If profile not completed →
/onboarding/profile - If profile completed but role not selected →
/onboarding/role - If both completed → role-specific dashboard
- If profile not completed →
Expected Behavior:
-
Loading spinner shows while checking status
-
User cannot bypass onboarding gates
-
Onboarding status is checked on every login until complete
Success Criteria:
-
User is routed to the correct onboarding step
-
Completed steps are not repeated
2.2 Profile Gate (Profile Completion)
User Story:
As a new user, I want to complete my profile with essential information so that I can proceed to use the platform.
User Journey:
-
User arrives at
/onboarding/profile -
User sees profile completion form with fields:
- Phone number (required) - with country code selector (default: +254 Kenya)
- Gender (required) - dropdown selection
- Date of Birth (required) - date picker
-
User fills in all required fields
-
User clicks "Continue" or "Save & Continue" button
-
System validates and saves profile data
-
User is redirected to
/onboarding/role
Expected Behavior:
-
Phone number validates format based on country code
-
All fields are required before proceeding
-
User cannot skip this step
-
"Logout" option is available if user wants to exit
Success Criteria:
-
Profile data is saved to user's CasaHub Profile
-
profile_completedflag is set to true -
User is redirected to role selection
2.3 Role Selection Gate
User Story:
As a new user, I want to select my primary role so that the platform shows me relevant features and dashboards.
User Journey:
-
User arrives at
/onboarding/role -
User sees role selection cards:
- Property Owner - "I own real estate properties and want to monitor my investments"
- Property Manager - "I manage properties and operations on behalf of owners"
- Real Estate Agent - "I help clients find and transact properties"
- Client/Tenant - "I am looking to buy, rent, or view properties"
-
User clicks on their desired role card (e.g., "Property Manager")
-
Selected card shows visual confirmation (checkmark, highlight)
-
User clicks "Continue" button
-
System assigns the corresponding role to user
-
User is redirected to role-specific dashboard
Expected Behavior:
-
Only one role can be selected at a time
-
Selected role is visually highlighted
-
User must select a role before proceeding
-
Role assignment happens server-side for security
Success Criteria:
-
User is assigned the correct Frappe role:
- "Property Owner" → "MiCasa Owner" role
- "Property Manager" → "MiCasa Manager" role
-
primary_role_selectedflag is set to true -
User is redirected to
/manager/dashboardor/owner/dashboard -
User can now access role-specific features
3. Manager Dashboard
3.1 Dashboard Overview
User Story:
As a Property Manager, I want to see a comprehensive overview of my managed properties so that I can quickly assess the status of my portfolio.
User Journey:
-
User navigates to
/manager/dashboard(or lands here after login) -
Dashboard loads with the following sections:
- Header: Welcome message with user's name
- KPI Cards Row: 4 key metrics displayed as clickable cards
- Financial Health Section: Revenue and collection metrics
- Project Breakdown: Status of managed projects
- Recent Activity: Latest access requests and updates
Expected Behavior:
- All sections load with data or appropriate empty states
- Loading spinners show while data is being fetched
- KPI cards are clickable and navigate to relevant pages
- Period filter (This Month, This Quarter, etc.) updates financial metrics
Success Criteria:
- Dashboard loads within 3 seconds
- All KPI values are accurate and reflect current data
- No console errors or stuck loading states
3.2 KPI Cards
User Story:
As a Property Manager, I want to see key metrics at a glance so that I can quickly understand my portfolio status.
User Journey:
-
User views the 4 KPI cards on the dashboard:
-
Managed Projects: Total number of projects user manages
-
Pending Requests: Number of agent access requests awaiting approval
-
Total Units: Total units across all projects (with available count)
-
Active Agents: Number of agents with project access
-
-
User clicks on a KPI card to navigate to the relevant page:
-
"Pending Requests" →
/manager/applications?tab=requests -
"Active Agents" →
/manager/agents
-
Expected Behavior:
-
Cards display accurate counts
-
Clickable cards have hover effects
-
Clicking navigates to the correct page
Success Criteria:
-
All counts match actual data in the system
-
Navigation works correctly from each clickable card
3.3 Financial Metrics
User Story:
As a Property Manager, I want to see financial performance metrics so that I can track revenue and collections.
User Journey:
-
User views the Financial Health section showing:
-
Total Collected: Sum of all payments received
-
Pending Payments: Outstanding amounts due
-
Overdue Payments: Payments past their due date
-
Collection Rate: Percentage of expected payments collected
-
-
User can change the period filter (This Month, This Quarter, This Year)
-
Metrics update to reflect the selected period
Expected Behavior:
-
Currency is displayed in KES (Kenyan Shillings)
-
Period filter triggers data refresh
-
Loading indicator shows during data fetch
Success Criteria:
-
Financial figures are accurate for the selected period
-
Period changes update all relevant metrics
4. Project Management
4.1 View Projects List
User Story:
As a Property Manager, I want to see all projects I manage so that I can access and manage them.
User Journey:
-
User clicks "Projects" in the sidebar navigation
-
User is navigated to
/projectsor/projects/my-projects -
Projects list displays as cards showing:
- Project name
- Location
- Status (Active, Draft, Completed, etc.)
- Unit count
- Cover image (if available)
-
User can search projects by name
-
User can filter projects by status or category
Expected Behavior:
-
Projects load with pagination if more than 20
-
Empty state shows if no projects exist
-
Search filters results in real-time
Success Criteria:
-
All user's managed projects are displayed
-
Search and filter work correctly
-
Clicking a project card opens project details
4.2 Create New Project
User Story:
As a Property Manager, I want to create a new project so that I can start managing a new property development.
User Journey:
-
User clicks "Create Project" button on projects page
-
User is taken to the Project Setup Wizard
-
User completes the wizard steps:
-
Step 1 - Basics: Project name, company, template, category, development type, description
-
Step 2 - Location: Address, county, coordinates (optional)
-
Step 3 - Media: Cover image, gallery images, videos
-
Step 4 - Structure: Phases, buildings configuration
-
Step 5 - Units: Bulk unit creation or skip for later
-
Step 6 - Team: Add team members (optional)
-
Step 7 - Review: Review all information before creation
-
-
User clicks "Create Project" on the final step
-
Project is created and user is redirected to project detail page
Expected Behavior:
-
Wizard shows clear progress indicator
-
User can navigate back to previous steps
-
Required fields are validated before proceeding
-
Image uploads show progress and preview
-
User is automatically added as a team member with "Manager" role
Success Criteria:
-
Project is created in the database
-
User has management access to the project
-
Toast notification confirms success
-
User is redirected to the new project's detail page
4.3 View Project Details
User Story:
As a Property Manager, I want to view detailed information about a project so that I can understand its current status.
User Journey:
-
User clicks on a project card from the projects list
-
User is navigated to
/projects/{project-id} -
Project detail page displays:
-
Cover image/hero section
-
Project name and description
-
Location information
-
Unit statistics (total, available, sold, reserved)
-
"Manage" button for accessing management features
-
-
User can see project status and completion percentage
Expected Behavior:
-
All project information loads correctly
-
Images display properly
-
Statistics are accurate and up-to-date
Success Criteria:
-
Project details match what was entered during creation
-
Unit statistics are accurate
-
"Manage" button is visible and functional
4.4 Access Project Management
User Story:
As a Property Manager, I want to access the management interface so that I can manage units, buildings, phases, and team.
User Journey:
-
User clicks "Manage" button on project detail page
-
User is navigated to
/projects/{project-id}/manage -
Management interface displays with tabbed navigation:
-
Units: List and manage all units
-
Buildings: List and manage buildings
-
Phases: List and manage project phases
-
Team: View and manage team members
-
Templates: Manage unit templates
-
Payment Plans: Configure payment plans
-
Settings: Project settings and configuration
-
-
User clicks on tabs to switch between sections
Expected Behavior:
-
All tabs load their respective content
-
Active tab is visually highlighted
-
Tab content is scrollable if needed
Success Criteria:
-
All management tabs are accessible
-
Each tab displays correct content
-
No console errors when switching tabs
4.5 Edit Project Settings
User Story:
As a Property Manager, I want to edit project settings so that I can update project information.
User Journey:
-
User navigates to project management → Settings tab
-
User toggles "Edit Mode" on
-
User modifies project fields (name, description, status, etc.)
-
User clicks "Save" button
-
Changes are saved and confirmed with toast notification
Expected Behavior:
-
Edit mode clearly indicates editable state
-
Changes are validated before saving
-
Save button is disabled while saving
-
Success/error feedback is provided
Success Criteria:
-
Changes are persisted to the database
-
Updated values appear when viewing project details
-
Toast confirms successful save
5. Unit Management
5.1 View Units List
User Story:
As a Property Manager, I want to see all units in a project so that I can manage their status and details.
User Journey:
-
User navigates to project management → Units tab
-
Units list/table displays showing:
- Unit number/name
- Unit type (Apartment, Villa, Plot, etc.)
- Status (Available, Reserved, Sold, etc.)
- Price
- Building/Phase assignment
-
User can search units by number or name
-
User can filter units by status, type, or building
Expected Behavior:
-
Table is sortable by columns
-
Search filters results in real-time
-
Pagination works for large unit counts
-
Empty state shows if no units exist
Success Criteria:
-
All project units are displayed
-
Search and filters work correctly
-
Unit count matches project statistics
5.2 Create Single Unit
User Story:
As a Property Manager, I want to create a new unit so that I can add it to my project inventory.
User Journey:
-
User clicks "Add Unit" button in units management
-
Modal or form appears with fields:
- Unit number/name (required)
- Unit type (required)
- Price (required)
- Building assignment (required)
- Phase assignment (optional)
- Floor number (optional)
- Bedrooms, bathrooms, size (optional)
-
User fills in required fields
-
User clicks "Save" or "Create" button
-
Unit is created and appears in the units list
Expected Behavior:
-
Form validates required fields
-
Building dropdown shows available buildings
-
Price field accepts numeric input
-
Success toast confirms creation
Success Criteria:
-
Unit is created in the database
-
Unit appears in the units list
-
Unit status defaults to "Available"
-
Subscription usage count is incremented
5.3 Bulk Create Units
User Story:
As a Property Manager, I want to create multiple units at once so that I can quickly populate a building with units.
User Journey:
-
User clicks "Bulk Create" button in units management
-
Bulk creation modal appears with fields:
- Select building (required)
- Number of units to create (required)
- Naming pattern (e.g., "Unit-", "Apt-")
- Starting number
- Unit type
- Default price
-
User configures the bulk creation settings
-
User clicks "Generate" or "Create" button
-
System creates units with sequential naming
-
Progress indicator shows creation status
-
Units appear in the list after completion
Expected Behavior:
-
Subscription limit is checked before creation
-
If limit would be exceeded, error message shows with upgrade prompt
-
Progress indicator shows for large batches
-
All units are created with consistent naming
Success Criteria:
-
Requested number of units are created
-
Units have sequential names (e.g., Unit-001, Unit-002)
-
Subscription usage is updated
-
Toast confirms successful creation
5.4 Edit Unit Details
User Story:
As a Property Manager, I want to edit unit details so that I can update pricing or status.
User Journey:
-
User clicks on a unit row in the units list
-
Unit detail view or edit modal opens
-
User clicks "Edit" button
-
User modifies unit fields (price, status, details)
-
User clicks "Save" button
-
Changes are saved and confirmed
Expected Behavior:
- All editable fields are accessible
- Status changes are reflected immediately
- Price changes are validated
Success Criteria:
- Changes are persisted to the database
- Updated values appear in the units list
- Toast confirms successful save
5.5 Filter and Search Units
User Story:
As a Property Manager, I want to filter and search units so that I can quickly find specific units.
User Journey:
-
User locates the search input in units management
-
User types a partial unit number or name
-
Results filter in real-time as user types
-
User can also use filter dropdowns:
- Status filter (Available, Reserved, Sold, etc.)
- Type filter (Apartment, Villa, etc.)
- Building filter
-
Filters can be combined for precise results
Expected Behavior:
-
Search is case-insensitive
-
Filters update results immediately
-
Clear button resets all filters
-
Result count updates with filters
Success Criteria:
-
Search returns matching units
-
Filters correctly narrow results
-
Combined filters work together
6. Building & Phase Management
6.1 View Buildings List
User Story:
As a Property Manager, I want to see all buildings in a project so that I can manage the project structure.
User Journey:
-
User navigates to project management → Buildings tab
-
Buildings list displays as cards showing:
- Building name
- Number of floors (if set)
- Unit count
- Occupancy rate
-
User can add new buildings or edit existing ones
Expected Behavior:
-
Buildings display with accurate unit counts
-
Empty state shows if no buildings exist
-
Add button is visible and functional
Success Criteria:
-
All project buildings are displayed
-
Unit counts are accurate
-
Building cards are clickable for details
6.2 Create New Building
User Story:
As a Property Manager, I want to create a new building so that I can organize units within the project.
User Journey:
-
User clicks "Add Building" button
-
Modal or form appears with fields:
- Building name (required)
- Number of floors (optional)
- Description (optional)
-
User fills in the building name
-
User clicks "Save" button
-
Building is created and appears in the list
Expected Behavior:
-
Form validates required fields
-
Subscription limit is checked (if applicable)
-
Success toast confirms creation
Success Criteria:
-
Building is created in the database
-
Building appears in the buildings list
-
Building is available for unit assignment
6.3 View Phases List
User Story:
As a Property Manager, I want to see all phases in a project so that I can track development progress.
User Journey:
-
User navigates to project management → Phases tab
-
Phases list displays showing:
- Phase name
- Start and end dates (if set)
- Unit count
- Completion status
-
User can add new phases or edit existing ones
Expected Behavior:
-
Phases display in chronological order
-
Dates are formatted clearly
-
Empty state shows if no phases exist
Success Criteria:
-
All project phases are displayed
-
Phase information is accurate
-
Add button is functional
6.4 Create New Phase
User Story:
As a Property Manager, I want to create a new phase so that I can organize the project timeline.
User Journey:
-
User clicks "Add Phase" button
-
Modal or form appears with fields:
- Phase name (required)
- Start date (optional)
- End date (optional)
- Description (optional)
-
User fills in the phase name
-
User optionally sets dates
-
User clicks "Save" button
-
Phase is created and appears in the list
Expected Behavior:
-
Date picker allows easy date selection
-
End date must be after start date (if both set)
-
Success toast confirms creation
Success Criteria:
-
Phase is created in the database
-
Phase appears in the phases list
-
Phase is available for unit/building assignment
7. Team Management
7.1 View Team Members
User Story:
As a Property Manager, I want to see all team members on a project so that I can manage project access.
User Journey:
-
User navigates to project management → Team tab
-
Team members list displays showing:
- Member name and profile photo
- Email address
- Role on project (Manager, Sales Manager, Agent, etc.)
- Join date
-
User can see their own entry in the list
-
User can switch between "Active Members" and "Pending Invitations" views
Expected Behavior:
-
Current user is visible in the team list
-
Roles are clearly displayed
-
Empty state shows if only the current user is on the team
Success Criteria:
-
All team members are displayed
-
Role information is accurate
-
Pending invitations are shown separately
7.2 Invite Team Member
User Story:
As a Property Manager, I want to invite new team members so that they can help manage the project.
User Journey:
-
User clicks "Invite Member" button
-
Invitation modal appears with fields:
- Email address (required)
- Role selection (Manager, Sales Manager, Agent)
- Optional personal message
-
User enters the invitee's email
-
User selects the role to assign
-
User clicks "Send Invitation" button
-
Invitation is sent via email
-
Pending invitation appears in the invitations list
Expected Behavior:
-
Email is validated for correct format
-
Role options are clearly described
-
Success toast confirms invitation sent
-
Invitation appears in "Pending Invitations" tab
Success Criteria:
-
Invitation record is created in the database
-
Email is sent to the invitee
-
Invitation shows in pending list with status
-
Invitee can accept and join the project
7.3 Remove Team Member
User Story:
As a Property Manager, I want to remove team members so that I can revoke their project access.
User Journey:
-
User locates the team member to remove in the list
-
User clicks "Remove" button or menu option
-
Confirmation dialog appears
-
User confirms the removal
-
Team member is removed from the project
Expected Behavior:
-
Confirmation is required before removal
-
User cannot remove themselves
-
Success toast confirms removal
-
Removed member loses project access immediately
Success Criteria:
-
Team member is removed from the project
-
Member no longer appears in team list
-
Member can no longer access the project
8. Applications & Contracts
8.1 View Access Requests
User Story:
As a Property Manager, I want to see agent access requests so that I can approve or reject them.
User Journey:
-
User clicks "Applications" in the sidebar navigation
-
User is navigated to
/manager/applications -
"Requests" tab is active by default
-
Access requests list displays showing:
- Agent name and profile photo
- Project they're requesting access to
- Request date
- Status (Pending, Approved, Rejected)
-
User can filter by status or project
Expected Behavior:
-
Pending requests are highlighted or shown first
-
Request details are clearly visible
-
Action buttons are accessible for pending requests
Success Criteria:
-
All access requests are displayed
-
Filtering works correctly
-
Pending count matches dashboard KPI
8.2 Approve Access Request
User Story:
As a Property Manager, I want to approve agent access requests so that agents can start working on my projects.
User Journey:
-
User locates a pending access request
-
User clicks "Approve" button
-
Optional: User adds approval notes
-
User confirms the approval
-
Request status changes to "Approved"
-
Agent receives notification of approval
Expected Behavior:
-
Approval is processed immediately
-
Status updates in the list
-
Success toast confirms approval
-
Agent gains project access
Success Criteria:
-
Request status is updated to "Approved"
-
Agent can now access the project
-
Agent receives email/in-app notification
8.3 Reject Access Request
User Story:
As a Property Manager, I want to reject access requests so that I can decline agents who don't meet my criteria.
User Journey:
-
User locates a pending access request
-
User clicks "Reject" button
-
User enters rejection reason (required)
-
User confirms the rejection
-
Request status changes to "Rejected"
-
Agent receives notification with reason
Expected Behavior:
-
Rejection reason is required
-
Status updates in the list
-
Agent is notified with the reason provided
Success Criteria:
-
Request status is updated to "Rejected"
-
Agent receives notification with reason
-
Agent does not gain project access
8.4 View Contracts
User Story:
As a Property Manager, I want to see all agent contracts so that I can manage formal agreements.
User Journey:
-
User clicks "Contracts" tab on the Applications page
-
Contracts list displays showing:
- Agent name
- Project name
- Contract status (Draft, Sent, Signed, Active, Expired)
- Contract dates
-
User can filter by status or project
Expected Behavior:
-
Contracts are organized by status
-
Status badges are color-coded
-
Action buttons vary by contract status
Success Criteria:
-
All contracts are displayed
-
Status information is accurate
-
Filtering works correctly
8.5 Create Agent Contract
User Story:
As a Property Manager, I want to create contracts for agents so that we have formal agreements in place.
User Journey:
-
User clicks "Create Contract" button (or from an approved request)
-
Contract creation form appears with fields:
- Select agent (if not pre-filled)
- Select project
- Contract title
- Contract type
- Start and end dates
- Terms and conditions
-
User fills in contract details
-
User clicks "Create" button
-
Contract is created in "Draft" status
Expected Behavior:
-
Form validates required fields
-
Agent dropdown shows approved agents
-
Contract is saved as draft initially
Success Criteria:
-
Contract is created in the database
-
Contract appears in contracts list with "Draft" status
-
Contract can be edited before sending
8.6 Send Contract to Agent
User Story:
As a Property Manager, I want to send contracts to agents so that they can review and sign them.
User Journey:
-
User locates a draft contract
-
User clicks "Send" or "Send to Agent" button
-
User confirms sending
-
Contract status changes to "Sent"
-
Agent receives email notification with contract
Expected Behavior:
-
Confirmation is required before sending
-
Status updates immediately
-
Agent receives email with contract details/link
Success Criteria:
-
Contract status is updated to "Sent"
-
Agent receives email notification
-
Agent can view and respond to contract
8.7 Activate Signed Contract
User Story:
As a Property Manager, I want to activate signed contracts so that agents have full project access.
User Journey:
-
User locates a contract in "Signed" status (agent has signed)
-
User reviews the signed document
-
User clicks "Activate" or "Confirm" button
-
User confirms activation
-
Contract status changes to "Active"
-
Agent receives confirmation
Expected Behavior:
-
Only signed contracts can be activated
-
Activation grants full project access
-
Success toast confirms activation
Success Criteria:
-
Contract status is updated to "Active"
-
Agent has full project access
-
Contract dates are enforced
9. Agent Directory
9.1 View All Agents
User Story:
As a Property Manager, I want to browse all registered agents so that I can discover potential partners for my projects.
User Journey:
-
User clicks "Agents" in the sidebar navigation
-
User is navigated to
/manager/agents -
Agent directory displays as a grid of agent cards showing:
- Agent profile photo
- Agent name
- Agency/company (if set)
- KYC verification status badge
- Active project count
-
User can scroll through the list to browse agents
Expected Behavior:
-
Agents are loaded with pagination
-
Verified agents show a verification badge
-
Loading skeleton shows while data loads
-
Empty state shows if no agents registered
Success Criteria:
-
All registered agents are accessible
-
Profile information is accurate
-
Verification status is correctly displayed
9.2 Search Agents
User Story:
As a Property Manager, I want to search for agents by name so that I can find specific agents quickly.
User Journey:
-
User locates the search input on the agents page
-
User types agent name or partial name
-
Results filter in real-time as user types
-
Matching agents are displayed
Expected Behavior:
-
Search is case-insensitive
-
Results update with each keystroke (debounced)
-
Clear button resets the search
-
"No results" message if no matches
Success Criteria:
-
Search returns relevant agents
-
Performance is acceptable (no lag)
-
Clearing search shows all agents
9.3 Filter Agents by KYC Status
User Story:
As a Property Manager, I want to filter agents by verification status so that I can find verified professionals.
User Journey:
-
User locates the filter/dropdown on the agents page
-
User selects KYC status filter:
- All Agents
- Verified Only
- Pending Verification
- Not Verified
-
Agent list updates to show only matching agents
Expected Behavior:
-
Filter updates results immediately
-
Filter can be combined with search
-
Count updates to show filtered results
Success Criteria:
-
Filter correctly shows agents by KYC status
-
Multiple filters work together
-
Clear/reset option is available
9.4 View Agent Profile
User Story:
As a Property Manager, I want to view an agent's full profile so that I can assess their qualifications.
User Journey:
-
User clicks on an agent card in the directory
-
Agent profile page or modal opens showing:
- Full name and photo
- Contact information (if visible)
- Bio/description
- KYC verification status and details
- List of current active projects
- Performance metrics (if available)
-
User can close the profile and return to the directory
Expected Behavior:
-
Profile loads completely
-
Sensitive information is appropriately hidden
-
Back button returns to directory
-
"Request Access" or "Invite to Project" options may be available
Success Criteria:
-
Full agent profile is displayed
-
Information is accurate and up-to-date
-
Navigation back to directory works
10. Billing & Subscriptions
10.1 Access Billing Page
User Story:
As a Property Manager, I want to access billing settings so that I can manage my subscription and payments.
User Journey:
-
User clicks "Settings" in the sidebar navigation
-
User clicks "Billing" option (or navigates directly to
/billing) -
Billing page loads with tabbed interface:
- Plans tab (default)
- Payment History tab
- Payment Methods tab
Expected Behavior:
-
Default tab is "Plans"
-
Tab state is reflected in URL (
/billing?tab=plans) -
Tabs are clearly labeled with icons
-
Back button returns to previous page
Success Criteria:
-
Billing page loads correctly
-
All three tabs are accessible
-
URL updates when switching tabs
10.2 View Current Subscription Plan
User Story:
As a Property Manager, I want to see my current subscription plan so that I understand my limits and benefits.
User Journey:
-
User is on the Billing page, Plans tab
-
User sees subscription plan cards:
- Free Plan: Basic features with limits
- Enterprise Plan: Full features with higher/no limits
-
Current plan is highlighted with "Current Plan" badge
-
Plan cards show:
- Monthly/Annual pricing toggle
- Feature list with checkmarks
- Limits (units, projects, agents, etc.)
-
User can compare plans side-by-side
Expected Behavior:
-
Current plan is clearly identified
-
Pricing updates when toggling monthly/annual
-
Feature comparison is accurate
-
"Upgrade" button shows on non-current plans
Success Criteria:
-
Current plan is correctly identified
-
Pricing and features are accurate
-
Toggle between monthly/annual works
10.3 View Payment History
User Story:
As a Property Manager, I want to see my payment history so that I can track my billing transactions.
User Journey:
-
User clicks "Payment History" tab on the Billing page
-
Payment history section displays:
- Billing Status Card: Next payment date, last payment info
- Payment History List: All past payments
-
Each payment entry shows:
- Date
- Amount (in KES)
- Payment method (M-Pesa, Card)
- Status badge (Completed, Failed, Pending)
- Invoice number/reference
-
List is scrollable for many entries
Expected Behavior:
-
Payments are sorted by date (newest first)
-
Status badges are color-coded
-
Empty state if no payments exist
-
Clicking a payment may show details
Success Criteria:
-
All payments are listed
-
Payment details are accurate
-
Status reflects actual payment state
10.4 Manage Payment Methods
User Story:
As a Property Manager, I want to manage my payment methods so that I can update how I pay for subscriptions.
User Journey:
-
User clicks "Payment Methods" tab on the Billing page
-
Payment methods section displays:
- List of saved payment methods
- Each method shows type (M-Pesa, Card), last digits, expiry
- Default method is indicated
-
User can:
- Add new payment method
- Remove existing method
- Set default payment method
Expected Behavior:
-
Saved methods are displayed clearly
-
Add method opens appropriate flow (M-Pesa or Card)
-
Remove requires confirmation
-
Default method is visually distinct
Success Criteria:
-
All saved methods are displayed
-
Add/remove functionality works
-
Default can be changed
10.5 Upgrade Subscription
User Story:
As a Property Manager, I want to upgrade my subscription so that I can access more features and higher limits.
User Journey:
-
User is on the Billing page, Plans tab
-
User clicks "Upgrade" on the Enterprise plan card
-
User is navigated to upgrade/payment page
-
User selects billing cycle (monthly/annual)
-
User chooses payment method:
- M-Pesa: Enter phone number, receive STK push
- Card: Enter card details or use saved card
-
User confirms payment
-
Payment is processed
-
Subscription is upgraded immediately
-
User receives confirmation email
Expected Behavior:
-
Upgrade flow guides user through payment
-
Price is clearly displayed before payment
-
STK push (M-Pesa) is sent to user's phone
-
Loading state shows during processing
-
Success/failure feedback is immediate
Success Criteria:
-
Payment is processed successfully
-
Subscription tier is updated
-
New limits are applied immediately
-
Confirmation email is received
11. Permission Boundaries
11.1 What Property Managers CAN Do
Property Managers have the following capabilities within CasaHub:
Project Management:
-
Create new projects (within subscription limits)
-
Edit project settings and information
-
Configure project structure (phases, buildings)
-
Upload project media and documentation
-
View project analytics and reports
Unit Management:
-
Create units (single or bulk, within limits)
-
Edit unit details (price, status, specifications)
-
Change unit status (Available, Reserved, Sold)
-
Assign units to buildings and phases
-
Search and filter units
Team Management:
-
View all team members on their projects
-
Invite new team members via email
-
Assign roles to team members (Manager, Sales Manager, Agent)
-
Remove team members from projects
-
View pending invitations
Agent & Application Management:
-
View all registered agents in the directory
-
Approve agent access requests for their projects
-
Reject access requests with reason
-
Create, send, and manage agent contracts
-
Activate signed contracts
Billing (Self-Service):
-
View current subscription plan
-
View payment history
-
Manage payment methods
-
Upgrade subscription
11.2 What Property Managers CANNOT Do
Property Managers have the following restrictions:
Project Restrictions:
-
Cannot delete projects (only Owners can delete)
-
Cannot transfer project ownership
-
Cannot access projects they don't manage
Administrative Restrictions:
-
Cannot modify system-wide settings
-
Cannot access other users' billing information
-
Cannot view other managers' projects
-
Cannot modify subscription tiers (pricing, features)
User Management Restrictions:
-
Cannot create user accounts directly (invitations only)
-
Cannot modify other users' profiles
-
Cannot assign system roles (only project roles)
-
Cannot bypass KYC verification requirements
Financial Restrictions:
-
Cannot issue refunds directly
-
Cannot modify payment plan configurations for the system
-
Cannot access revenue reports for projects they don't manage
11.3 Subscription Limit Enforcement
Property Managers are subject to subscription limits based on their plan:
Free Tier Limits:
-
Maximum 5 units total
-
Maximum 1 project
-
Maximum 1 agent slot
-
Maximum 1 building per project
-
Maximum 1 phase per project
-
Maximum 1 unit template
-
Maximum 1 payment plan
When Limits Are Reached:
-
User sees "Limit Reached" message when trying to create beyond limits
-
Upgrade prompt is displayed with link to billing page
-
Creation is blocked until upgrade or resource deletion
Enterprise Tier:
-
Higher or unlimited resources (configurable by system)
-
Prorated billing for mid-cycle additions
-
Priority support access
11.4 Route Access Restrictions
Property Managers can access the following routes:
Accessible Routes:
-
/manager/dashboard- Manager dashboard -
/projects- Projects list -
/projects/:id- Project details -
/projects/:id/manage- Project management -
/manager/applications- Access requests and contracts -
/manager/agents- Agent directory -
/billing- Billing and subscription -
/profile- User profile settings -
/settings- General settings
Restricted Routes:
-
/owner/*- Owner-specific routes (requires Owner role) -
/agent/*- Agent-specific routes (requires Agent role) -
/admin/*- Administrative routes (requires Admin role) -
/client/*- Client-specific routes (requires Client role)
Behavior on Restricted Access:
-
User is redirected to
/unauthorizedpage -
Clear message explains access is denied
-
Link to return to appropriate dashboard
End of Document
This document describes the complete user journey for the Property Manager/Owner role in CasaHub. For specific test cases and validation criteria, refer to the companion document. QA test Plan