38. Client Portal
Pixally CRM✅ Client Auth
Client Portal Auth
Functional Requirement Document
BA & Ideation: Dakshraj Jhala
Reviewed By: KG (Project Manager)
Updated Date: 06 October 2025
Status: Approved
Version 1.0
Functional Requirements Document (FRD) - Client Portal Sign In
1. Module Overview
- Module Name: Client Portal Authentication (Login, Create Password, Forgot Password, and Magic Link Login)
- Purpose: To enable clients associated with agency projects to securely access their brand-specific client portals using multiple authentication methods, including magic link login or password-based login, and to provide a secure process for password creation and recovery.
- Business Goal: To offer clients a seamless, secure, and flexible authentication experience across brand-specific portals, allowing them to easily log in, create or reset passwords, and access all associated project details, communications, and account information while maintaining brand and data security standards.
2. User Roles & Permissions
Role
Description
Key Permissions
Client
A client associated with at least one project under the brand who accesses their brand-specific portal
- Access the client portal only if associated with at least one project of the brand
- Login via password-based authentication or magic link
- Create a password for first-time access
- Reset forgotten password
- Request and use magic links for authentication
- View all projects associated with their email under the specific brand and Access project details
- No access to projects from other brands (separate portals required)
- No access if not associated with any project of the brand
3. User Flow
3.1 Client Login - Need to add if the client is invited to the project
3.2 Create Password First Time
3.3 Forgot Password
3.4 Magic Link Login - Check magic link validation rule
4. Functional Logic
4.1 Client Login
- Client Portal Access
- The client receives a client portal link at the email address used during client creation by the agency or the email address submitted through the lead form
- The portal link is sent when the agency associates the client with a project or when the client submits a lead form
- The client will receive the portal link only if they are attached to a project under any brand of any agency, regardless of whether the project is in the New Lead stage or any other stage
- To access the portal, the client must be associated with at least one project within the current brand
- Brand-Specific Client Portal Access
- Each brand has its own unique client portal URL.
- If a client is associated with projects from multiple brands (within the same or different agencies), a separate portal URL is generated for each brand.
- Each client portal is brand-specific and provides access only to projects under that particular brand.
- Clients log in once using their registered email and password to access all their projects within that brand.
- The authentication system validates the client’s credentials and grants access to every project linked to their account under the same brand’s portal.
- The client can access the client portal through the provided client portal link and log in either using the magic link or by creating a password and logging in with it.
- Log in using magic link - Refer, Click Here
- Log in using create password - Refer, Click Here
- Account Login (email & password): This sign-in using credentials (email and password) flow is designed for clients who have already completed their password creation. Clients must use their previously set password to authenticate and access their brand's project portal with all associated projects
- Forgot Password: If the client forgot their password, they can reset their password using the Forgot Password functionality from the login screen - Refer - Click Here
- Failed Attempt Counter: The system monitors consecutive failed login attempts for each email address. If a user enters an incorrect password 5+ times in a row, their account will be locked for 1 hour, preventing further login during the lockout period
- Account Lockout: Locked accounts automatically unlock after exactly 1 hour from the lockout time
- Case Insensitive Email: Email validation treats uppercase and lowercase letters as identical
4.2 Create Password First Time
Email Validation & Create Password Logic:
Email must exist in the agency portal as a registered client email address
The client must be associated with at least one project for the brand that the user tries to log into
Client must not have an existing password (first-time password creation only)
-
- The client must not have created a password previously in the system.
- The client may have logged in earlier using a magic link, but the password has not been set yet.
- This process applies only to first-time password creation. If a password has already been created and the user attempts to use the “Create a Password” option, an error message will be displayed when they click “Send Link” after entering their email address.
- Email format must be valid according to standard email validation rules
- Upon successful validation, immediately redirect the user to the password creation screen, where they will be prompted to enter a new password and confirm it.
Progressive Password Validation Logic:
Display only the next missing requirement as the user types in the Password field
Update the validation message dynamically after each requirement is met
Validation order: Length (6+ chars) → Uppercase → Number → Special character → Lowercase → Max length (20 chars)
Real-time validation for the Repeat Password field to check that it matches the entered Password
Brand Security:
Password creation flow is brand-specific and only provides access to the appropriate brand portal
Email validation ensures the client belongs to the current brand
Post-Password Creation:
After successful password creation, the client will be redirected to the login screen
Client must manually enter their email and newly created password to access the portal
4.3 Forgot Password
The users should be able to reset their passwords by clicking the "Forgot Password" option.
They will be redirected to a page where they must enter their registered email address for the client portal.
Email Validation Logic:
Email must exist in the client portal as a registered client email address and must be associated with at least one project for the brand that the user tries to log into.
Email format must be valid according to standard email validation rules.
If the email is invalid or unregistered, an inline error message is displayed, and the process stops.
- Upon successful validation, a secure password recovery link will be sent to the user’s registered email address, allowing them to reset their password.
Recovery Link Logic:
Each password reset request generates a unique link valid for 10 minutes.
If a new request is made, the previous link is automatically invalidated.
Rate limiting applies - only one password reset request is allowed per email every 15 minutes.
Once the recovery link is sent, the confirmation screen is displayed, showing the recipient's email with an option to resend the link after the cooldown period.
Password Reset Page Access:
When the client opens the recovery link, the system verifies that the link is valid, active, and not previously used.
If verification succeeds, the client is redirected to the “Set New Password” screen.
If verification fails due to expiration or invalidity, an error message is displayed with an option to request a new link.
Progressive Password Validation Logic: Refer - Click Here
Post-Password Reset:
After successful password creation, the client will be redirected to the login screen.
Clients must manually enter their email and newly created password to access the portal.
All previously active sessions are logged out to ensure account security.
Password reset flow is brand-specific and provides access only to the respective brand portal.
4.4 Magic Link Login
- The client should be able to access the client portal at any time using a magic link - regardless of whether they have already created a password or not.
- When the client clicks the “Login using a Magic Link” button, they will be prompted to enter a valid email address to receive the magic link.
- The entered email must exist in the agency portal as a registered client email address by the agency
- The client should be associated with at least one project of that brand to access its brand-specific client portal
- Magic Link Generation Rules:
- Magic links are brand-specific and generated only for the current brand's portal
- Magic links expire automatically after 7 days from generation
- Rate Limiting Logic:
- No restriction on magic link generation requests per email address
- Resend functionality is available with a 60-second cooldown between each request
- When the client clicks the link received in the email, they will be automatically logged in to the client portal without needing to enter any additional credentials.
- After successful login, they will be redirected to the Project Details page → Overview tab of the project they are associated with.
- If the client is associated with multiple projects, they will be redirected to the most recently added project.
5. Field Details & Validations
5.1 Client Login
Field Name
Type
Required
Validation Rules
Email Address
Yes
- Valid email format (user@example.com)
- No spaces allowed
- Must be registered in the system by the agency
- Case insensitive
Password
Password
Yes
- Must match the already created password by the agency
- No spaces allowed
- Min 6 and Max 20 characters
- After 5+ incorrect attempts, restrict submission for one hour for the particular email and display a relevant error message
Eye Icon Toggle
Toggle
Optional
- Shows/hides password text
- Default state: password hidden
Forgot Password
Button
Optional
- On click, redirects the user to the forgot password screen
Sign In Button
CTA
Mandatory
- Validates all fields before submission and displays the relevant error message
- Triggers the authentication process
- Logs the client into the client portal if no validation error
5.2 Create Password First Time
5.2.1. Step 1: Ready to Set Your Password Page
Field Name
Type
Required
Validation Rules
Email Address
Yes
Valid email format
Continue Button
Button
N/A
Triggers email validation and directs a redirect to password creation
Already have an account? Sign In
Link
N/A
Redirects to the main client login page of that brand
5.2.2. Step 2: Let's Secure Your Account Page
Field Name
Type
Required
Validation Rules
Password
Password
Yes
6-20 characters, must contain: uppercase, lowercase, number, special character
Repeat Password
Password
Yes
Must match the Password field exactly
Create Password Button
Button
N/A
Triggers password creation and validation
5.3 Forgot Password
5.3.1 Step 1: Forgot your password?
Field Name
Type
Required
Validation Rules
Email address
Yes
- Valid email format
- Must be registered in the client portal system
Send request
Button
Yes
- Validates email field on click
- Sends password reset link if validation passes
- Displays a relevant error message if validation fails
Return to login
Link
Optional
On click, it redirects the client to the login screen
5.3.2 Step 2: Recovery link sent!
Field Name
Type
Validation Rules
Confirmation message
Text
Display confirmation text and email address where the reset link was sent
Resend Link
Button
- Subject to rate limiting (60-second cooldown)
- Invalidates previous link when a new one is sent
Return to login
Button
On click, it redirects the client to the login screen
5.3.3 Step 3: Set new password
Field Name
Type
Validation Rules
New Password
Password
Min 6 - Max 20 chars, 1 uppercase, 1 number, 1 special char, no spaces
Repeat Password
Password
Must match the new password exactly
Create New Password
Button
- Validates password fields before submission
- Saves new password and redirects to login screen when successful
- Displays relevant error messages if validation fails
6. Success Message Handling
6.1 Client Login
Validation Scenario
Success Message
On successfully signing in
"You've logged in successfully."
6.2 Create Password First Time
Validation Scenario
Success Message
Password created successfully
“Your password has been created successfully.”
6.3 Forgot Password
Validation Scenario
Success Message
Password reset link sent successfully
"Recovery link has been sent successfully."
Password changed successfully
"Your password has been changed successfully."
6.4 Magic Link Login
Validation Scenario
Success Message
Magic link sent successfully
"Magic link has been sent successfully."
7. Error Message Handling
7.1 Client Login
Field
Validation Scenario
Error Message
Empty submission
"Please enter your email address."
Not associated with any project of the brand
"Invalid Credentials. Please try again."
Invalid format
"Please enter a valid email address."
Password
Empty submission
"Please enter your password."
Authentication
Invalid credentials (email/password mismatch)
"Invalid Credentials. Please try again."
Password
Locked after 5 failed login attempts
"Your account has been locked due to multiple failed login attempts. Please try again after one hour."
General
Server timeout
"Something went wrong."
7.2 Create Password First Time
7.2.1 Email Field Validation
Field
Validation Scenario
Error Message
Empty submission
"Please enter your email address."
Invalid format
"Please enter a valid email address."
Email not found in the system
"No account found for this email address."
Already created a password
“If an account exists for this email, you’ll get an email with further instructions.”
7.2.2 Password Field Validation
Field
Validation Scenario
Error Message
Password
Empty submission
"Please enter your password."
Password
Progressive validation (show only the next missing requirement)
Display only the next missing condition:
• "Password must be at least 6 characters."
• "Password must contain at least one uppercase letter."
• "Password must contain at least one number."
• "Password must contain at least one special character."
• "Password must contain at least one lowercase letter."
• "Password cannot exceed 20 characters."
Repeat Password
Empty submission
"Please re-enter your new password."
Repeat Password
Mismatch with Password
"The passwords you entered do not match. Please try again."
7.2.3 General Errors
Field
Validation Scenario
Error Message
General
Server timeout/error
"Something went wrong."
7.3 Forgot Password
7.3.1. Step 1: Forgot your password?
Field
Validation Scenario
Error Message
Email address
Empty submission
"Please enter your email address."
Email address
Invalid format
"Please enter a valid email address."
Email address
Unregistered email
"Invalid Credentials. Please try again."
Email address
Resend attempt within 15 minutes
"Reset link already sent. Please try again in a few minutes."
General
Server error
"Something went wrong."
7.3.2 Step 3: Set new password
Field
Validation Scenario
Error Message
New Password
Empty
"Please enter a new password."
New Password
Weak Password
Progressive validation showing the next missing requirement:
- "Password must be at least 6 characters."
- "Password must contain at least one uppercase letter."
- "Password must contain at least one number."
- "Password must contain at least one special character."
- "Password must contain at least one lowercase letter."
Repeat Password
Empty
"Please re-enter your new password."
New Password and Repeat Password
Mismatch
"The passwords you entered do not match. Please try again."
New Password and Repeat Password
Same as the old password
"Your new password cannot match your old one. Please choose a different password."
General
Invalid/expired token
"Something went wrong."
7.3 Magic Link Login
Field
Validation Scenario
Error Message
Empty submission
"Please enter your email address."
Invalid format
"Please enter a valid email address."
The email does not match any client associated with that particular brand’s project
"No account found for this email address."
General
Resend rate limit (before 60 seconds)
"Please wait before requesting another magic link."
Magic Link
Link Expired
“This magic link has expired. Please request a new link.”
Magic Link
Already used link clicked
“This link has already been used. Please request a new magic link.”
8. Edge Cases
8.1 Create Password First Time
Scenario
Expected Behavior
Client email not associated with the current brand
Display "No account found for this email address" error
A client who already has a password tries to create a new one
Do not display "Create a Password" button (prevention at UI level)
Network interruption during email validation
Display general error message, allow retry
Network interruption during password creation
Display general error message, allow retry
User navigates away during password creation
No data persistence needed; the user must restart the flow
Special characters in password
Accept all standard special characters (!@#$%^&*()_+-=[]{}
Multiple rapid clicks on the Continue button
Prevent duplicate submissions with a button disabled during processing
8.2 Forgot Password
Scenario
Expected Behavior
Client clicks the expired reset link
Show error message: "This reset link has expired. Please request a new one."
Multiple reset requests for the same email
Only the latest link remains valid; previous links are invalidated
Client navigates away during password entry
Must restart the process from the beginning
Client tries to reuse old password
The system prevents reuse and shows an appropriate error message
Email service unavailable
Graceful error handling with a retry mechanism
Client closes the browser during the process
Must restart from Step 1 when returning
8.3 Magic Link Login
Scenario
Expected Behavior
Multiple magic link requests
New magic link invalidates previously unused magic link
Magic link forwarded to another person
The forwarded link works for anyone who clicks it
Magic link clicked after 10 minutes
Display "Invalid link" error message
Client email not associated with the current brand
Display "No account found for this email address" error
Rate limit exceeded
Display an appropriate rate limit error message and prevent further requests
Invalid email format entered
Display email format validation error
Network interruption during the magic link request
Display general error message, allow retry
8. Test Cases
- Link:
9. Acceptance Criteria
- Client Portal Access: Clients receive a portal link via email when associated with a project or submit a lead form; they must be linked to at least one project to access.
- Brand-Specific Access: Each brand has its own portal URL; clients log in per brand to view all projects under that brand; credentials are validated brand-wise.
- Login Options: Clients can log in using magic link or email/password; magic link works even if no password exists.
- Forgot Password: Clients can reset their password via their registered email; invalid or unregistered emails show an inline error; the reset link is valid for 10 minutes and is limited to 1 request per 15 minutes.
- Failed Login Attempts: After 5 incorrect password attempts, the account locks for 1 hour; unlocks automatically; email case-insensitive.
- Create Password (First-Time): Allowed only if client has no existing password; email must belong to an active project under the same brand; progressive validation ensures password meets all criteria; redirects to login after success.
- Forgot Password Flow: Valid email triggers recovery link; expired/invalid links show error; successful reset redirects to login; all active sessions logged out.
- Brand Security: All password creation and reset flows are brand-specific; access is limited to the relevant brand portal.
- Magic Link Login: Brand-specific link sent to verified email; auto-login without credentials; expires in 7 days; resend available after 60 seconds; redirects to latest or most recent project overview.
10. Dependencies
Module/System
Dependency Type
Impact if Unavailable
User Authentication Service
Core functionality
Cannot authenticate users
Client Database
Data dependency
Cannot validate registered clients
Session Management
Security dependency
Cannot maintain secure client sessions
Client Portal
Navigation dependency
Cannot log the client into the portal after authentication
11. References
11.1 Client Login
- Figma Link: Click Here
11.2 Create Password First Time
- Figma Design Link: Click Here
11.3 Forgot Password
- Figma Design Link: - Click Here
11.4 Magic Link
- Figma Design Link: Click Here
✅ Project Header and Tabs
Functional Requirements Document - Client Portal: Project Header and Tabs
1. Module Overview
Module Name: Client Portal - Project Header and Tabs
Purpose: The project header and tabs module provides the primary navigation structure for clients accessing their project portal, displaying essential project information and enabling navigation between different project sections and events.
Business Goals: To provide clients with intuitive navigation and clear project context, enabling seamless access to all project-related information while maintaining brand consistency and professional presentation across the portal experience.
2. User Roles & Permissions
Role
Access Level
Permissions
Client (Primary Contact)
Full View Access
View all tabs, navigate between sections, access all project events, view project header information
Client (Additional Contacts)
Full View Access
View all tabs, navigate between sections, access all project events, view project header information
Guest/Non-authenticated Users
No Access
Cannot access the portal or view any project information
3. User Flow
- After successful authentication, the client lands on the project overview page where the project header is prominently displayed at the top of the interface.
- If the client is associated with more than one project, the system displays a project switcher dropdown (with a down arrow icon) next to the project name in the header. Selecting a different project reloads the portal to the new project context and resets the view to the Overview tab. If the client has only a single project, the project name displays as plain text without any dropdown arrow or switcher control.
- The system displays the project name (e.g., "Jadon & Monika Wedding") as the main header title, establishing immediate context for the client.
- Below the project header, the system renders navigation tabs based on the project structure, with "Overview" always appearing as the first tab.
- When a project contains multiple events, the system displays each event as a separate tab (e.g., "Wedding", "Engagement Photoshoot", "Planning").
- The client clicks on any tab to navigate to that specific section, and the system highlights the active tab with visual indicators.
- 6. When viewing an event tab, the system loads the event-specific interface with its own sub-navigation: Services | Deliverables | Files/Documents | Notes | Info.
- 7. The client can click the project name or Overview tab at any time to return to the main project dashboard. If the client is already viewing the Overview tab, no action is taken — the system does not reload the page or reset the scroll position.
- In the top-right corner, the client accesses their profile menu by clicking on the profile icon, revealing options for account settings and logout.
- The notification bell icon displays a badge only when the unread count is greater than 0. The badge is hidden entirely when the count is 0. The badge displays the exact number for counts 1–99 and displays "99+" for counts of 100 or more. Clicking the bell icon reveals recent project updates.
- Throughout navigation, the system maintains the header and tab structure as a persistent element, ensuring consistent orientation.
4. Functional Logic
4.1 Project Header Display
- The system retrieves the project name from the database and displays it as the primary header on all portal pages.
- When a project has a custom branding configuration, the system applies the brand colors and logo to the header area.
- The header remains fixed at the top of the viewport during scrolling to maintain context and navigation accessibility.
- If the project name exceeds 50 characters, the system truncates it with ellipsis and displays the full name on hover.
- The system displays the client company name or individual name alongside the project name when applicable.
4.1.1 Hero Banner Display
- Below the top header bar, the system displays a hero banner spanning the full width of the content area with a background image.
- The hero banner displays the project name as large overlay text centered on the banner (e.g., "Jadon & Monika Wedding").
- Below the project name, the system displays the project date range (e.g., "Wed, Dec 19 - Sat, Dec 21, 2024").
- At the bottom-left of the banner, the system displays the project location with a pin icon (e.g., "Boston, Massachusetts, USA") followed by the timezone (e.g., "Timezone: GMT-4").
- At the bottom-right of the banner, the system displays an "Emails" button that serves as the entry point to the Email Center module. Clicking this button navigates the client to the project-specific Email Center.
- If the agency has configured a custom hero image for the project, the system displays it as the banner background. If no custom image is set, the system displays a default elegant background.
- The hero banner is visible on all tabs (Overview and Event tabs) and does not change when switching between tabs.
4.2 Tab Generation and Display
4.2.1 Overview Tab
- The system always generates an "Overview" tab as the first navigation option, regardless of project configuration.
- The Overview tab serves as the default landing page after login and cannot be removed or hidden.
- The Overview tab displays its own sub-navigation below the main tabs: Activity | Files/Documents | Finances | Meetings | Notes. The Activity sub-tab is the default view when the Overview tab loads.
- Below the Overview tab name, the system displays the project date range in smaller text (e.g., "Wed, Dec 19 - Sat, Dec 21, 2025").
- When clicked, the Overview tab loads the project dashboard displaying summary information, recent activities, and quick access widgets.
4.2.2 Event Tabs
- The system automatically generates a tab for each active event associated with the project.
- Event tabs display in chronological order based on event date, with the earliest event appearing after the Overview tab.
- When an event date is marked as "TBD", the system positions it after all dated events in the tab order.
- Each event tab displays a colored dot indicator before the event name. Each event is assigned a unique color to visually distinguish it from other events. The Overview tab does not display a colored dot.
- Below the event name, each event tab displays the event date in a compact format (e.g., "Wed, Dec 19, 2025"). This date is displayed in smaller, lighter text beneath the event name.
- Each event tab displays the event name as configured in the project settings, with a maximum display length of 30 characters.
- The system displays up to 6 event tabs horizontally; when more events exist, it implements a horizontal scroll or dropdown menu for additional events.
4.2.3 Additional Tabs
- If the project includes planning tools or additional modules, the system generates corresponding tabs (e.g., "Planning", "Timeline").
- These auxiliary tabs appear after all event tabs in the navigation structure.
- The system only displays tabs for modules that have been activated for the specific project.
4.3 Tab Navigation Behavior
- When a client clicks on a tab, the system performs a smooth transition to the selected section without full page reload.
- The active tab receives visual highlighting through background color change, underline, or bold text based on brand settings.
- The system maintains the user's scroll position when navigating between tabs and returning to previously viewed sections
- On browser refresh, the system restores the client to the same main tab and sub-tab they were viewing before the refresh (e.g., if the client was on Rehearsal Dinner > Notes, they return to Rehearsal Dinner > Notes after refresh, not to the Overview tab)..
- If a tab's content is still loading, the system displays a loading indicator within the content area while keeping the header stable.
- When navigating to an event tab, the system loads the event-specific sub-navigation menu below the main tabs: Services | Deliverables | Files/Documents | Notes | Info. The Services sub-tab is the default active view when an event tab is first opened.
4.4 Profile and Settings Access
- The profile icon in the top-right corner displays the client's initials or profile image when available.
- Adjacent to the profile and notification icons, the system displays a theme toggle icon (sun/moon) that allows the client to switch between light mode and dark mode. The selected theme preference persists across sessions.
- Clicking the profile icon reveals a dropdown menu with options for "My Account", "Settings" (if permitted), and "Logout".
- The system tracks the last active session and displays "Last login" information in the profile dropdown.
- When clicking "My Account", the system navigates to the account management page while maintaining the project context.
4.5 Notification System Integration
- The notification bell icon displays a red badge with a count only when unread notifications exist (count > 0). The badge is hidden entirely when the count is 0. The badge displays the exact number for counts 1–99 and displays "99+" for counts of 100 or more.
- Clicking the notification icon opens a dropdown panel showing the 5 most recent notifications.
- Each notification in the dropdown includes a timestamp, notification type icon, and brief message preview.
- The system marks notifications as read when the dropdown is opened and updates the badge count accordingly.
4.6 Responsive Design Behavior
- On mobile devices (screens < 768px), the system converts the horizontal tab navigation to a hamburger menu.
- The mobile menu displays all tabs in a vertical list with clear touch targets of at least 44px height.
- The project name may be abbreviated on mobile to prevent text overflow, showing full name in the expanded menu.
- Touch gestures enable swipe navigation between adjacent tabs on mobile devices.
4.7 Access Control and Visibility
- The system validates client access permissions for each tab before rendering the navigation structure.
- If a client loses access to a specific event, the system removes the corresponding tab from their view immediately.
- For archived or completed events, the system displays the tab with a visual indicator (e.g., grayed out) but maintains navigation access.
- When the agency suspends or restricts portal access, the system displays a warning banner below the header instead of hiding tabs.
5. Field Details & Validations
Field Name
Field Type
Validation Rules
Project Name
Text Display
Maximum 100 characters, required field, HTML entities escaped
Event Tab Names
Text Display
Maximum 30 characters per tab, minimum 1 character, special characters allowed
Profile Initials
Auto-generated Text
First letter of first name + first letter of last name, uppercase
Notification Count
Numeric Badge
Integer value 0-99, displays "99+" for counts exceeding 99
Tab Order Index
Hidden Numeric
Integer values starting from 0, unique per project
Active Tab Indicator
CSS Class
Valid CSS class name, defaults to "active-tab"
Last Login Timestamp
DateTime Display
ISO 8601 format, converted to client's timezone
6. Success Message Handling
Operation
Success Message
Trigger Condition
Post-Success Action
Tab Navigation
None (Silent)
Successful tab content load
Display selected tab content
Profile Update Navigation
"Redirecting to account settings..."
Click on My Account
Navigate to account page
Logout
"Successfully logged out"
Click logout option
Redirect to login page
Notification Mark as Read
None (Silent)
Open notification dropdown
Update badge count
7. Error Message Handling
Error Scenario
Error Message
Trigger Condition
User Action Required
Tab Content Load Failure
"Unable to load content. Please refresh the page."
Network error or server timeout
Refresh browser or try again
Session Expired
"Your session has expired. Please log in again."
Invalid or expired session token
Re-authenticate
Unauthorized Tab Access
"You don't have access to this section."
Attempting to access restricted tab
Contact agency admin
Navigation Timeout
"Navigation is taking longer than expected."
Tab switch exceeds 10 seconds
Wait or refresh page
8. Edge Cases
Scenario
System Behavior
Fallback Action
Project with no events
Display only Overview tab
Show empty state message in content area
Extremely long project names (>100 chars)
Truncate with ellipsis at 100 characters
Show full name in tooltip on hover
More than 10 event tabs
Implement horizontal scroll or "More" dropdown
Group remaining tabs in dropdown menu
Client has multiple projects
Display project switcher in header
Allow switching between projects via dropdown
Network disconnection during navigation
Maintain current tab view
Show offline indicator, cache current content
Simultaneous tab clicks
Process first click only
Ignore subsequent clicks until navigation completes
Browser back button usage
Maintain tab history in browser
Update active tab based on browser history
Event deleted while client is actively viewing that event's tab
Redirect client to Overview tab immediately. Remove the deleted event's tab from the navigation
Display toast: "This event has been removed from the project." Overview tab loads with latest data
9. Acceptance Criteria
- The project header must display the correct project name and remain visible during scrolling
- All active events must generate corresponding tabs in the correct chronological order
- Tab navigation must complete within 3 seconds under normal network conditions
- The active tab must be clearly distinguished through visual styling
- Mobile responsive design must function correctly on devices with screen width ≥320px
- Profile dropdown must display all menu options and function correctly
- Notification badge must accurately reflect unread notification count
- The system must maintain tab state when refreshing the page
- All tab names must be properly escaped to prevent XSS attacks
- The Overview tab must always be present and accessible
- Clicking the Overview tab or project name while already on Overview must not trigger a reload or scroll reset
- When the client has multiple projects, a project switcher dropdown must display next to the project name; selecting a project must reload to that project's Overview tab
- The notification badge must be hidden when count is 0, display exact number for 1–99, and display "99+" for counts ≥ 100
- If an event is deleted while the client is viewing that event's tab, the system must redirect to Overview and display a toast notification
- The hero banner must display the project name, date range, location with pin icon, timezone, and "Emails" button
- Each event tab must display a colored dot indicator before the event name and the event date below the name
- The Overview tab must display the project date range below its name and load with sub-navigation: Activity, Files/Documents, Finances, Meetings, Notes
- Event tabs must load with sub-navigation: Services, Deliverables, Files/Documents, Notes, Info; with Services as the default sub-tab
- The theme toggle must switch between light and dark mode and persist the preference across sessions
- For single-project clients, the project name must display as plain text without a dropdown arrow
- On browser refresh, the system must restore the client to the same main tab and sub-tab they were viewing before the refresh
10. Manual Test Cases
Test cases have been created in a separate Excel file. Access the test cases here: TestCases_ClientPortal_ProjectHeader_Tabs.xlsx
11. Dependencies
Dependency
Type
Description
Fallback Behavior
Authentication Service
Internal
Validates client session and permissions
Redirect to login if unavailable
Project Management Module
Internal
Provides project and event data
Display error message
Notification Service
Internal
Supplies notification count and details
Hide notification badge
Brand Management Module
Internal
Provides custom branding settings
Use default theme
User Profile Service
Internal
Supplies client profile information
Display generic avatar
Event Management Module
Internal
Provides event details for tab generation
Show Overview tab only
12. References
- Figma Design Link: Click Here
✅ Overview(Activity,file,notes)
Functional Requirements Document - Client Portal: Overview Tabs
1. Module Overview
Module Name: Client Portal - Overview Tabs
Purpose: The Overview tab serves as the primary dashboard for clients, providing a comprehensive summary of their project status, recent activities, key metrics, and quick access to important project elements in a fixed layout structure.
Business Goals: To deliver a centralized view that enables clients to quickly understand project progress, access critical information, and navigate to detailed sections efficiently, reducing the need for agency support and improving client satisfaction through transparent project visibility.
2. User Roles & Permissions
Role
Access Level
Permissions
Client (Primary Contact)
Full View Access
View all overview widgets, access all linked content, view complete activity history, see all project notes
Client (Additional Contacts)
Full View Access
View all overview widgets, access all linked content, view complete activity history, see all project notes
Client (View-Only)
Restricted View
View overview content but cannot access payment information or sensitive documents
Guest/Non-authenticated Users
No Access
Cannot access the overview or any project information
3. User Flow
3.1 The client logs in to the client portal, and the system automatically loads the Overview tab as the default landing page. 3.2 The client views the project header showing the couple's names (for example, "Jadon & Monika Wedding") with the navigation tabs displayed below it. 3.3 The system displays the hero banner featuring the couple's image and the event title. 3.4 The client views the four fixed metric cards showing the Services count, Deliverables status, Meetings scheduled, and Engagement/Professional sessions. 3.5 The client scrolls to the left column, where the system displays the Activity Log listing all project and event activities in newest-first order. 3.6 The system renders each activity entry with a respective activity-type icon, a client-facing description, an absolute date and time, and an action button when the activity type supports one. 3.7 The client scrolls within the Activity Log, and the system continuously loads older entries through infinite scrolling until the oldest "project created" entry is reached. 3.8 The client clicks an action button on an activity entry (for example, "View & Pay," "View & Sign," "View & Fill," "View," or "Download"), and the system redirects the client to the respective page for that action. 3.9 The client views the Deliverables widget in the right column showing document status and available download actions. 3.10 The client views the Payment summary widget in the right column showing the total cost, amount paid, and outstanding balance. 3.11 The client clicks any metric card, and the system navigates directly to the corresponding detailed section. 3.12 The client clicks the Overview tab in the main navigation at any time, and the system returns the client to this overview page.
4. Functional Logic
4.1 Page Load and Data Aggregation
- When the Overview tab loads, the system fetches data from all associated project events and consolidates it for display.
- The system calculates totals for services, deliverables, and meetings across all events within the project.
- Loading occurs asynchronously with progressive rendering, showing the header and structure immediately while data populates.
- If data retrieval takes longer than 3 seconds, the system displays a loading indicator in the affected widget.
- The page maintains its layout structure even when individual widgets are still loading data.
4.2 Hero Banner Section
- The system displays the project hero image as configured by the agency in brand settings.
- The banner includes the project title overlaid on the image with appropriate contrast for readability.
- If no custom image is set, the system displays a default elegant background appropriate for the event type.
- The banner height is fixed at 300px on desktop and scales proportionally on mobile devices.
- Any "Announcement" or important message from the agency appears as a dismissible banner below the hero section.
4.3 Metrics Cards Display
4.3.1 Services Card
- The system counts all active services across all project events and displays the total number.
- Each service type (Photography, Videography, Planning) is counted separately if multiple exist.
- The card displays an appropriate icon and the numeric count prominently.
- Clicking the card navigates to the first event's Services tab.
4.3.2 Deliverables Card
- The system aggregates all deliverables from all events and calculates completion percentage.
- The display shows "X of Y completed" format where X is completed deliverables and Y is total.
- A progress indicator visualizes the completion percentage using a circular or linear progress bar.
- Clicking navigates to the detailed deliverables view.
4.3.3 Meetings Card
- The system displays the count of upcoming meetings scheduled through the portal.
- Past meetings are excluded from this count but available in the meetings history.
- The card shows the next meeting date if one is scheduled.
- Clicking opens the meetings scheduling interface.
4.3.4 Engagement/Professional Card
- The system displays relevant metrics based on the project type (e.g., "2 Engagement Sessions" for wedding projects).
- The count reflects contracted services specific to pre-event or professional sessions.
- The card uses appropriate iconography for the service type.
4.4 Overview Content Section (Left Column)
4.4.1 Activity Log
- The Activity Log appears only on the Project Overview page and consolidates activities from the project and all of its events into a single feed, and there is no separate activity log at the individual event level.
- The system orders all activity entries with the newest entry at the top and the oldest entry at the bottom.
- The system loads additional older entries automatically through infinite scrolling as the client scrolls down, and it does not provide pagination controls or activity-type filters.
- The system displays each activity entry with a respective activity-type icon rather than a user avatar, because the Activity Log is client-facing.
- When an activity type has no specific icon mapping, the system displays a default generic activity icon as a fallback.
- The complete set of activity types, their exact client-facing messages, icons, action buttons, and redirect targets is defined in the Activity Log Message and Action Reference table in Section 5.2.
- The system displays the timestamp of each activity entry in absolute date and time format (for example, "Aug 17, 2026, 3:45 PM").
- The Activity Log never shows an empty state because the "project created" entry is always recorded as the first and oldest entry for every project.
- When an activity entry includes an action button, the system redirects the client to the respective page for that action rather than opening an inline modal.
- The system reflects newly recorded activities only after the client manually refreshes the page, consistent with the portal's non-real-time refresh behavior.
- When the client signs a proposal, the system changes the original "proposal sent" entry's button from "View & Sign" to "View" and additionally records a separate "proposal signed" entry, and when the agency counter-signs the proposal, the system records a separate "proposal finalized" entry.
- When the client signs a contract, the system changes the original "contract sent" entry's button from "View & Sign" to "View" and additionally records a separate "contract signed" entry, and when the agency completes the contract, the system records a separate "contract completed" entry.
- The system records contract activities at the project level because contracts are not linked to a specific event.
- When the client makes a partial payment toward an invoice, the system records a standalone payment entry and records one such entry for every payment the client makes, and when a payment settles the outstanding balance in full, the system records a separate "paid in full" entry.
- When the client completes a questionnaire, the system changes the original "questionnaire sent" entry's button from "View & Fill" to "View" and additionally records a separate "questionnaire completed" entry.
- When the client uploads a file through the portal, the system records a client file upload entry and displays a "Download" button that downloads the uploaded file.
- When a new email message or reply is added to a project email thread, the system records an activity entry and displays a "View" button that redirects the client to the Email Center.
4.4.2 Notes Aggregation
- The system collects all notes from all event tabs and displays them in the overview.
- Each note shows the event context (e.g., "[Wedding] Note content here").
- Notes display with the author name, timestamp, and content preview (first 200 characters).
- Client-created notes show an edit option, while agency notes are read-only.
- The system displays the 5 most recent notes with a "View All Notes" link to see more.
4.5 Deliverables Widget (Right Column)
- The system lists all deliverables with their current status using visual indicators (icons and colors).
- Each deliverable shows: name, status (Pending/In Progress/Completed), and action buttons.
- Completed deliverables display a download button for direct file access.
- The widget groups deliverables by event if multiple events exist.
- The system shows a progress bar indicating overall deliverables completion percentage.
- Empty state displays: "No deliverables have been added to your project yet."
4.6 Payment Widget
- The system displays the financial summary with clear formatting and currency symbols.
- The widget shows: Total Package Price, Amount Paid, Outstanding Balance, and Next Payment Due.
- Each payment line item is clickable and opens the detailed invoice view.
- The "Make a Payment" button is prominently displayed when balance is outstanding.
- The system calculates and displays the payment progress as a percentage bar.
- If fully paid, the widget displays a green checkmark with "Paid in Full" status.
4.7 Data Refresh Behavior
- The system requires manual page refresh to load updated data from the agency side.
- A subtle "Last updated" timestamp appears at the top of the overview section.
- The browser's refresh button or F5 key triggers a complete data reload.
- During refresh, the system maintains scroll position when possible.
- Cache headers prevent serving stale data older than 5 minutes.
4.8 Empty States and Error Handling
- Each widget implements specific empty state messaging when no data exists.
- Empty states include helpful context about what will appear once data is available.
- If a widget fails to load, it displays an error message with a "Try Again" button.
- The system logs widget loading failures for troubleshooting without exposing technical details to clients.
5. Field Details & Validations
5.1 Field Details
Field Name
Field Type
Validation Rules
Project Title
Text Display
Maximum 100 characters, HTML-escaped
Service Count
Numeric Display
Integer, minimum 0, maximum 999
Deliverables Count
Text Display
Format: "X of Y", where X ≤ Y
Meeting Count
Numeric Display
Integer, minimum 0
Activity Type Icon
Icon (Display)
Respective icon per activity type; falls back to a default generic activity icon when unmapped
Activity Description (Message)
Text Display
System-generated client-facing message; HTML-escaped; maximum 500 characters per entry
Activity Action Button
Button (Display)
One of "View & Pay", "View & Sign", "View & Fill", "View", or "Download"; shown only for activity types that support an action
Note Preview
Text Display
Maximum 200 characters, truncated with ellipsis
Payment Amount
Currency Display
2 decimal places, with currency symbol
Activity Timestamp
Date/Time Display
Absolute format, e.g., "MMM DD, YYYY, HH:MM AM/PM"
Progress Percentage
Numeric Display
0-100, displayed with % symbol
5.2 Activity Log Message and Action Reference
This reference lists every activity type shown in the client-facing Activity Log, its exact client-facing message, the icon shown for it, the action button (if any), and the page the button redirects to. Placeholders in double braces are replaced with live values at render time.
Activity Type
Trigger Condition
Client-Facing Message
Icon
Action Button
Button Redirects To
Project Created
Agency creates the project
"Your project {{projectName}} has been created."
Project
None
Not applicable
Project Name Changed
Agency changes the project name
"Your project name has been updated to {{projectName}}."
Project
None
Not applicable
Project Cancelled
Agency cancels the project
"Your project {{projectName}} has been cancelled."
Project
None
Not applicable
Project Archived
Agency archives the project
"Your project {{projectName}} has been archived."
Project
None
Not applicable
Event Created
Agency creates an event
"A new event {{eventName}} has been added to your project."
Event
None
Not applicable
Event Updated
Agency updates an event
"Event {{eventName}} has been updated."
Event
None
Not applicable
Event Cancelled
Agency cancels an event
"Event {{eventName}} has been cancelled."
Event
None
Not applicable
Event Archived
Agency archives an event
"Event {{eventName}} has been archived."
Event
None
Not applicable
Event Status Changed
Agency changes an event's status
"Event {{eventName}} status has been updated to {{currentStatus}}."
Event
None
Not applicable
Proposal Sent
Agency sends a proposal
"A new proposal for {{projectName}} is ready for your review."
Proposal
View & Sign (changes to View after the client signs)
Proposal page
Proposal Signed
Client signs the proposal
"You have signed the proposal for {{projectName}}."
Proposal
View
Proposal page
Proposal Finalized
Agency counter-signs the proposal
"Your proposal for {{projectName}} has been finalized."
Proposal
View
Proposal page
Contract Sent
Agency sends a contract
"A new contract for {{projectName}} is ready for your review."
Contract
View & Sign (changes to View after the client signs)
Contract page
Contract Signed
Client signs the contract
"You have signed the contract for {{projectName}}."
Contract
View
Contract page
Contract Completed
Agency completes/counter-signs the contract
"Your contract for {{projectName}} has been fully executed."
Contract
View
Contract page
Invoice Sent
Agency issues an invoice
"A new invoice has been issued."
Invoice
View & Pay
Invoice on the Finances page
Payment Made (Partial)
Client makes a partial payment
"You have made a payment toward your invoice."
Payment
View
Invoice on the Finances page
Invoice Paid in Full
Client's payment settles the balance
"You have paid your invoice in full."
Payment
View
Invoice on the Finances page
Questionnaire Sent
Agency sends a questionnaire
"A new questionnaire is ready for you to complete."
Questionnaire
View & Fill (changes to View after the client completes it)
Questionnaire page
Questionnaire Completed
Client completes the questionnaire
"You have completed the questionnaire."
Questionnaire
View
Questionnaire page
Client File Uploaded
Client uploads a file through the portal
"You have uploaded a new file."
File
Download
Downloads the uploaded file
New Email Message
A new message or reply is added to a project email thread
"A new message has been added to your conversation."
View
Email Center
6. Success Message Handling
Operation
Success Message
Trigger Condition
Post-Success Action
Page Load
None (Silent)
Successful data retrieval
Display populated dashboard
Navigate to Section
None (Silent)
Click on metric card
Load target section
Download Deliverable
"Download started"
Click download button
Initiate file download
Activity Action Button Click
None (Silent)
Client clicks an action button (View & Pay, View & Sign, View & Fill, or View) on an activity entry
Redirect to the respective page (invoice/Finances, proposal, contract, questionnaire, or Email Center)
Activity File Download
"Download started"
Client clicks "Download" on a client-uploaded file activity entry
Initiate file download
Refresh Page
"Content updated"
Manual refresh with new data
Display updated information
7. Error Message Handling
Error Scenario
Error Message
Trigger Condition
User Action Required
Widget Load Failure
"Unable to load [widget name]. Please try again."
API timeout or error
Click "Try Again" button
Deliverable Download Failure
"Unable to download file. Please try again later."
File not accessible
Contact agency or retry
Payment Widget Error
"Unable to load payment information."
Payment service unavailable
Refresh page or contact support
Notes Load Failure
"Notes are temporarily unavailable."
Database connection error
Refresh page
Activity Feed Load Failure
"Unable to load recent activity. Please refresh the page."
Activity logging service error or timeout
Refresh page
Activity File Download Failure
"Unable to download file. Please try again later."
Uploaded file not accessible
Retry download
Network Error
"Please check your internet connection."
No network connectivity
Check connection and refresh
8. Edge Cases
Scenario
System Behavior
Fallback Action
No events in project
Display overview with zero counts
Show message: "Your project is being set up"
All deliverables completed
Show 100% completion with green indicator
Display "All deliverables completed!" message
No payment required
Hide payment widget or show "No payment required"
Display confirmation of paid status
Very long note content
Truncate at 200 characters with "Read more" link
Expand inline or navigate to notes section
Very large activity history
Load older entries progressively via infinite scroll
Continue loading on scroll without pagination controls or filters
Activity type has no specific icon
Display a default generic activity icon
Render fallback icon
Email thread no longer available when opened
Keep the activity entry visible in the feed
View button opens the Email Center, where the thread may show as unavailable
Activity target no longer available (e.g., invoice voided or proposal withdrawn)
Keep the activity entry visible in the feed
Action button leads to the current state of the target or a "no longer available" message on the target page
New activity added while client is viewing the page
Insert the new entry at the top only after the client refreshes
Preserve newest-first ordering on next load
Very long project or event name within an entry
Display the full client-facing message with text wrapping
Wrap text without truncating the entry
Mixed currency payments
Display in client's primary currency
Show currency conversion note if applicable
Slow network connection
Show skeleton loaders for widgets
Progressive content loading
Multiple simultaneous refreshes
Process first refresh, ignore others
Queue subsequent refresh requests
9. Acceptance Criteria
- The Overview tab must load as the default landing page after client login
- All widgets must appear in the fixed order as specified in the design
- Metric cards must accurately reflect real-time counts from all project events
- The page must load initial structure within 2 seconds on standard broadband
- All clickable elements must have appropriate hover states and cursor changes
- Empty states must display for all widgets when no data exists
- The layout must be responsive and functional on devices ≥320px width
- Payment calculations must be accurate to 2 decimal places
- All timestamps must display in the client's timezone
- Data refresh must complete within 5 seconds under normal conditions
- The Activity Log must appear only on the Project Overview page and must combine project-level and all event-level activities into a single newest-first feed
- The "project created" entry must always exist as the oldest entry so the Activity Log is never empty
- Each activity entry must display a respective activity-type icon, an absolute date and time, and the correct client-facing message, and must not display a user avatar
- Activity timestamps must be shown in absolute date and time format and must not use relative time
- Action buttons must appear only for the activity types that support them and must redirect the client to the correct respective page
- The "sent" entries for proposals, contracts, and questionnaires must switch their button to "View" once the client completes the corresponding action, and a separate signed or completed entry must also be recorded
- Each client partial payment must create its own standalone activity entry, and a full settlement must record a "paid in full" entry
- The Activity Log must load older entries via infinite scroll without pagination controls or activity-type filters
- A new email message or reply on a project thread must create an activity entry with a "View" button that redirects the client to the Email Center
- The activity types, client-facing messages, icons, and action buttons must match the Activity Log Message and Action Reference table in Section 5.2
10. Manual Test Cases
Test cases have been created in a separate Excel file. Access the test cases here: Client Portal - Overview Tabs Test Cases.xlsx
11. Dependencies
Dependency
Type
Description
Fallback Behavior
Event Management Module
Internal
Provides event data for aggregation
Display error in affected widgets
Payment Processing Module
Internal
Supplies payment and invoice data
Hide payment widget
Document Management System
Internal
Provides deliverables and files
Show "Unable to load files" message
Notes Module
Internal
Supplies notes from all events
Display empty state for notes
Activity Logging Service
Internal
Provides the Activity Log entries
Show "Unable to load recent activity. Please refresh the page."
Meeting Scheduler
Internal
Supplies meeting information
Display zero meetings count
Email Center Module
Internal
Provides email message activity and is the redirect target for the email entry's View action
Show "Unable to load recent activity" or disable the email entry's View action
Brand Settings Module
Internal
Provides custom branding/imagery
Use default theme and images
12. References
- Figma Design Files:
- Client_Portal_-_Overview.jpg
- Client_Portal_-_Emails.jpg
- Empty_States.jpg
- Logic Source (Activity Log):
- Client-facing activity log mapping derived from the agency-side project activity reference and confirmed client-facing wording
- Related FRDs:
- Client Portal - Project Header and Tabs
- Client Portal - Overview > Finances
- Client Portal - Events: Files/Documents Tab
- Event Management Module
- Payment Processing Module
- Notes Management Module
✅ Overview- Meeting tab
Functional Requirements Document - Client Portal: Meetings Tab
1. Module Overview
Module Name: Client Portal - Overview > Meetings Tab
Purpose: The Meetings tab within the Overview section of the Client Portal provides clients with a centralized view of all project-related meetings scheduled through Calendly, and enables them to schedule new one-on-one meetings with agency team members who have integrated their Calendly accounts.
Business Goals: To streamline the meeting scheduling process between clients and agencies by leveraging Calendly's scheduling capabilities, provide transparent visibility into all past and upcoming project meetings, and reduce back-and-forth communication for scheduling by enabling self-service booking directly from the client portal.
2. User Roles & Permissions
Role
Access Level
Permissions
Client (Primary Contact)
Full Access
View all project meetings, schedule new meetings with Calendly-integrated team members, view meeting details, join video meetings, view call/location details
Client (Additional Contacts)
Full Access
View all project meetings, schedule new meetings with Calendly-integrated team members, view meeting details, join video meetings, view call/location details
Guest/Non-authenticated Users
No Access
Cannot access the Meetings tab or any meeting information
3. User Flow
3.1 Viewing Meetings
3.1.1 The client logs into the portal and lands on the Overview tab page.
3.1.2 The client clicks on the "Meetings" sub-tab within the Overview sub-navigation (alongside Activity, Files/Documents, Finances, and Notes).
3.1.3 The system loads the Meetings page displaying the meeting list on the left and the persistent Overview sidebar on the right.
3.1.4 The client views the meeting list showing all past and upcoming meetings with Date & Time, Meeting Title, Description, Participant avatars, and an action CTA button.
3.1.5 The client uses the sort dropdown to switch between "Latest" (default) and "Oldest" ordering.
3.1.6 The client clicks on a meeting row to view full meeting details.
3.1.7 The system opens a meeting details pop-up showing the title, date, time, meeting mode information, and all participants with the organizer highlighted.
3.1.8 The client closes the pop-up and returns to the meeting list.
3.1.9 The client identifies an upcoming video call meeting and clicks the "Join Meeting" CTA button.
3.1.10 The system opens the video meeting link (Google Meet / Zoom) in a new browser tab.
3.2 Scheduling a New Meeting
3.2.1 The client clicks the "+ New Meeting" button at the top-right of the Meetings section.
3.2.2 The system displays a selection list of agency project team members who have integrated Calendly.
3.2.3 The client selects a single team member from the list.
3.2.4 The system redirects the client to the selected team member's Calendly scheduling page.
3.2.5 The Calendly form auto-populates the client's name and email, and pre-fills all project team members as guests.
3.2.6 The client selects a date, time slot, and optionally removes/adds guests within the Calendly interface.
3.2.7 The client confirms the meeting on Calendly.
3.2.8 Calendly processes the scheduling and syncs the meeting back to Pixally.
3.2.9 The client is redirected back to the Meetings tab where the newly scheduled meeting appears in the list after a page refresh.
3.3 Empty State Flow
3.3.1 The client navigates to the Meetings sub-tab.
3.3.2 The system detects no meetings exist for the project.
3.3.3 The system displays the empty state with a calendar illustration and the message "No meetings yet."
3.3.4 The client clicks "+ New Meeting" to schedule their first meeting (if Calendly-integrated team members exist).
3.4 All Team Members Disconnected Flow
3.4.1 The client navigates to the Meetings sub-tab.
3.4.2 The system detects that no agency project team members have Calendly integrated.
3.4.3 The "+ New Meeting" button is displayed in a disabled state.
3.4.4 The meeting list area shows the empty state with the message "No meetings yet."
3.4.5 Previously synced meetings (if any) remain visible in the list with their existing details and CTAs.
4. Functional Logic
4.1 Tab Visibility Rules
-
The Meetings sub-tab appears in the Client Portal > Overview sub-navigation only if at least one agency project team member has successfully integrated Calendly.
-
If no project team member has integrated Calendly, the Meetings sub-tab is completely hidden from the client portal navigation — it is not shown in a disabled or greyed-out state.
-
If all project team members disconnect Calendly after the Meetings tab was previously visible, the tab remains visible on the next page load but the "+ New Meeting" button becomes disabled. Existing synced meetings continue to display.
-
The tab visibility check occurs on each page load/navigation to the Overview section.
4.2 Page Layout and Structure
-
The Meetings tab displays as a sub-tab under the Overview section, positioned in the sub-navigation alongside Activity, Files/Documents, Finances, and Notes.
-
The page is divided into two areas: the left/main content area containing the Meetings section, and the right sidebar containing the persistent Overview widget (metric cards and Deliverables section).
-
The right sidebar remains consistent across all Overview sub-tabs — it is the same sidebar defined in the Overview Side Menu FRD.
-
The main content area header displays the "Meetings" title on the left, with a sort dropdown and "+ New Meeting" button on the right.
4.3 Meeting List Display
-
The system retrieves all meetings associated with the project from the Calendly integration and displays them in a table/list format.
-
The meeting list shows both past and upcoming meetings in a single list.
-
Each meeting row displays the following columns:
- Date & Time: Displayed in the viewer's local timezone. Format: "Aug 2, 2024 08:30 AM - 9:30 AM"
- Meeting Title: Pulled from the Calendly event type name
- Meeting Description: Displayed below the title, truncated with ellipsis if it exceeds the available row width
- Participants: Avatar display of the organizer and meeting participants
- Action CTA: Mode-based action button (varies by meeting type — Refer Section 4.5)
-
The default sort order is "Latest" which shows the nearest upcoming meetings first, followed by past meetings in reverse chronological order.
-
The "Oldest" sort option shows the earliest meetings first.
-
Scrolling behavior mirrors the agency portal's meeting list — if the list exceeds the visible area, vertical scrolling is enabled within the meeting list container.
-
Clicking on a meeting row opens the meeting details pop-up (same behavior as the agency portal — Refer Section 4.6).
4.4 Participant Avatar Display Logic
-
Participant avatars in the meeting list are shown only for emails matching the project team members and clients.
-
Non-project-member guests (external email addresses added manually during scheduling) are hidden from the avatar display but remain as attendees in the actual Calendly event.
-
The meeting organizer (the person who scheduled the meeting) is identifiable in the participant display.
-
If the number of participants exceeds 3, the system displays the first 3 avatars followed by a "+X" indicator where X is the count of remaining participants (e.g., 5 participants → 3 avatars + "+2").
-
On hover over the "+X" indicator, the system displays a tooltip or expanded list showing all participant names.
4.5 Meeting Mode Display Logic
Action buttons on each meeting row vary based on the meeting mode configured by the organizer during scheduling in Calendly:
- **Video Call:
**- CTA: "Join Meeting" (with video icon)
- On click: Opens the meeting link (Google Meet / Zoom) in a new browser tab
- **Phone Call:
**- CTA: "View Call Details" (with phone icon)
- On click: Opens the Phone Call Details pop-up — Refer Section 4.6.2
- **In-Person Meeting:
**- CTA: "In Person" (with location icon)
- On click: Opens the In-Person Meeting Details pop-up — Refer Section 4.6.3
- **No Meeting Mode Info:
**- CTA: "Meeting Info" (with info icon)
- On click: Opens the General Meeting Info pop-up — Refer Section 4.6.4
4.6 Meeting Detail Pop-Ups
When a client clicks on a meeting row or on the action CTA button (for Phone Call, In-Person, and No Info modes), the system displays a detail pop-up. The pop-up structure varies by meeting mode:
4.6.1 Video Call Meeting Details (Row Click)
When the client clicks on a video call meeting row (not the CTA button), the system displays a pop-up with:
- Meeting Title (from Calendly event)
- Date (format: "Aug 2, 2024")
- Time (format: "8:30 AM - 9:30 AM")
- Meeting Link (Google Meet / Zoom URL — clickable, opens in new tab)
- Participants section with all attendees showing names and profile pictures; the organizer is highlighted with an "Organizer" label
- Close button
4.6.2 Phone Call Details Pop-Up
- Pop-up Title: "Phone Call Details"
- Meeting Title (from Calendly event)
- Date (format: "Aug 2, 2024")
- Time (format: "8:30 AM - 9:30 AM")
- Dial Number: Displays the phone number of the invitee
- Participants section with all attendees showing names and profile pictures; the organizer is highlighted with an "Organizer" label
- Close button
4.6.3 In-Person Meeting Details Pop-Up
- Pop-up Title: "In-Person Meeting Details"
- Meeting Title (from Calendly event)
- Date (format: "Aug 2, 2024")
- Time (format: "8:30 AM - 9:30 AM")
- Location: Full address from Calendly settings
- "Show on Google Maps" button: Opens the meeting location in Google Maps in a new tab
- Participants section with all attendees showing names and profile pictures; the organizer is highlighted with an "Organizer" label
- Close button
4.6.4 General Meeting Info Pop-Up
- Pop-up Title: "Meeting Info"
- Date (format: "Aug 2, 2024")
- Time (format: "8:30 AM - 9:30 AM")
- Participants section with all attendees showing names
- Close button
4.7 Schedule New Meeting Flow (+ New Meeting)
-
The "+ New Meeting" button is positioned at the top-right of the Meetings section header.
-
On click, the system displays a team member selection list showing all agency project team members who have integrated Calendly.
-
Non-Calendly-integrated agency users do not appear in the team member selection list.
-
The selection list displays each team member's name and profile picture/avatar for easy identification.
-
The client selects a single team member (one-on-one meeting scheduling only — no multi-select).
-
After selection, the system redirects the client to the selected team member's Calendly scheduling page.
-
**Auto-Population Logic:
**- The client's name and email are auto-populated into the Calendly meeting scheduling form.
- All project team members are automatically added as guests in the Calendly form.
- The client can remove any pre-populated guests and add additional email addresses manually within the Calendly interface.
-
After the client completes scheduling on Calendly, the meeting syncs back to Pixally. The new meeting appears in the Meetings list after a manual page refresh.
-
The client who scheduled the meeting is displayed as the organizer in the meeting list.
4.8 Disabled State for + New Meeting
-
If all agency project team members have disconnected their Calendly accounts (but at least one was connected previously, so the tab is still visible), the "+ New Meeting" button is displayed in a disabled state (greyed out, non-clickable).
-
On hover over the disabled button, a tooltip displays: "No team members have Calendly connected."
-
Existing synced meetings remain visible and functional in the list.
4.9 Data Synchronization
-
All meeting data is sourced from Calendly through the integration — Pixally does not manage meeting scheduling natively.
-
Meetings sync continuously from Calendly to Pixally as long as the integration is active.
-
New meetings and updates to existing meetings made in Calendly are reflected in the client portal after a manual page refresh by the client.
-
When a meeting is cancelled on Calendly, it is deleted from the client portal meeting list — cancelled meetings are not displayed. The meeting count in the sidebar updates accordingly after a page refresh.
-
If an agency user **disconnects Calendly:
**- Existing meetings already synced remain visible in the meeting list.
- No new meetings from that user will sync after disconnection.
- The disconnected user is removed from the team member selection list for "+ New Meeting."
4.10 Overview Sidebar - Meetings Count
-
The Meetings count in the Overview sidebar metric card shows the total number of upcoming meetings scheduled for the specific project.
-
When there are no upcoming meetings, the count displays "--" (double dash).
-
The count excludes past meetings — only upcoming active meetings are counted.
-
The count updates automatically when meetings are added or removed from the project.
4.11 Empty States and Messaging
-
No meetings exist for the project: The system displays a calendar illustration with the message "No meetings yet." The "+ New Meeting" button remains active (if Calendly-integrated team members exist).
-
No meetings exist and no team members have Calendly connected: The system displays the same "No meetings yet" empty state, but the "+ New Meeting" button is disabled.
4.12 Client Visibility Scope
-
All clients associated with the project (Primary Contact and Additional Contacts) see the same set of meetings — there is no per-client filtering based on individual participation.
-
If a client is associated with multiple projects, they see meetings only for the currently selected project in the portal.
-
The meeting data shown in the client portal is project-scoped, not client-scoped.
5. Field Details & Validations
5.1 Meeting List Table Fields
Field Name
Type
Validation Rules
Sort
Dropdown
Default: "Latest." Options: "Latest", "Oldest." "Latest" shows nearest upcoming meetings first; "Oldest" shows earliest meetings first
Date & Time
DateTime
Displayed in the viewer's local timezone. Format: "Aug 2, 2024 08:30 AM - 9:30 AM"
Meeting Title
Text
Pulled from the Calendly event type. Displayed as primary text in the meeting row
Meeting Description
Text
Displayed below the title. Truncated with ellipsis if it exceeds the available row width
Participants
Avatar List
Displays profile pictures/avatars of the organizer and participants. Only project team members are shown. Non-project guests are hidden. Maximum 3 avatars displayed; if participants exceed 3, shows "+X" indicator for the remaining count
Action CTA
Button
Varies by meeting mode — "Join Meeting" (video), "View Call Details" (phone), "In Person" (location), "Meeting Info" (no info)
5.2 Team Member Selection List (+ New Meeting)
Field Name
Type
Validation Rules
Team Member Name
Text Display
Full name of the agency project team member
Team Member Avatar
Image/Initials
Profile picture or initials of the team member
Calendly Status
Filter Logic
Only team members with active Calendly integration are displayed. Non-integrated members are excluded from the list entirely
5.3 Phone Call Details Pop-Up
Field Name
Type
Validation Rules
Pop-Up Title
Text
"Phone Call Details"
Title
Text
From the Calendly event
Date
Date
Display format: "Aug 2, 2024"
Time
Time
Display format: "8:30 AM - 9:30 AM"
Dial
Number
Display the phone number of the invitee
Participants Section
Avatar List
All meeting attendees with names and profile pictures. Organizer highlighted with "Organizer" label
Close
Button
On click, closes the pop-up
5.4 In-Person Meeting Details Pop-Up
Field Name
Type
Validation Rules
Pop-Up Title
Text
"In-Person Meeting Details"
Title
Text
From the Calendly event
Date
Date
Display format: "Aug 2, 2024"
Time
Time
Display format: "8:30 AM - 9:30 AM"
Location
Text
Full address from Calendly settings
Participants Section
Avatar List
All meeting attendees with names and profile pictures. Organizer highlighted with "Organizer" label
Show on Google Maps
Button
Opens the meeting location in Google Maps in a new tab
Close Button
Button
Closes the pop-up
5.5 General Meeting Info Pop-Up
Field Name
Type
Validation Rules
Pop-Up Title
Text
"Meeting Info"
Date
Date
Display format: "Aug 2, 2024"
Time
Time
Display format: "8:30 AM - 9:30 AM"
Participants Section
Avatar List
All participants with names
Close Button
Button
Closes the pop-up
6. Success Message Handling
Operation
Success Message
Trigger Condition
Post-Success Action
Page Load
None (Silent)
Successful data retrieval
Display meeting list
Meeting Scheduled
"Meeting has been scheduled successfully."
Successful scheduling via Calendly
Redirect back to Meetings tab; new meeting appears after page refresh
Join Meeting
None (Silent)
Click "Join Meeting" CTA
Opens video meeting link in new tab
View Meeting Details
None (Silent)
Click on meeting row
Opens meeting details pop-up
Copy Meeting Link
"Link copied to clipboard"
Click copy link (if available in pop-up)
Meeting link in clipboard
7. Error Message Handling
Error Scenario
Error Message
Trigger Condition
User Action Required
Meeting List Load Failure
"Unable to load meetings. Please refresh the page."
API timeout or Calendly sync error
Refresh the browser
No Calendly-Integrated Team Members (+ New Meeting)
Tooltip: "No team members have Calendly connected."
All project team members have disconnected Calendly
Contact agency; button remains disabled
Calendly Page Load Failure
"Unable to load scheduling page. Please try again."
Calendly service unavailable or network error during redirect
Retry clicking "+ New Meeting"
Meeting Details Pop-Up Load Failure
"Unable to load meeting details. Please try again."
API error when fetching meeting detail data
Close pop-up and retry
Join Meeting Link Unavailable
"Meeting link is not available."
Meeting link expired or removed from Calendly
Contact agency or organizer
Session Expired
"Your session has expired. Please log in again."
Invalid or expired session token
Re-authenticate
Network Error
"Please check your internet connection."
No network connectivity
Restore connection and refresh
General Error
"Something went wrong."
Calendly service unavailable or unexpected server error
Retry or refresh page
8. Edge Cases
Scenario
Expected Behavior
Fallback Action
No agency team members have Calendly integrated
Meetings tab is completely hidden from the client portal sub-navigation
Client does not see the tab at all
All team members disconnect Calendly after tab was previously visible
Tab remains visible on next page load; "+ New Meeting" button is disabled; existing meetings remain visible
Tooltip on disabled button: "No team members have Calendly connected"
Client tries to schedule but selected team member disconnects Calendly mid-flow
Calendly page may show an error or unavailability
Client returns to Meetings tab and selects another team member
Meeting cancelled on Calendly
Cancelled meeting is deleted from the client portal meeting list and no longer displayed
Meeting count updates after page refresh; if all meetings cancelled/deleted, empty state displays
Meeting scheduled for a removed project member
Meeting remains visible in the project meeting list
Participant avatar may show as generic/removed indicator
Project member removed after scheduling meetings
Existing meetings remain in the project view; removed member no longer appears in "+ New Meeting" selection
Meetings persist for historical reference
Large number of participants added
First 3 participant avatars display; remaining count shown as "+X" indicator (e.g., "+2" for 5 total)
Hover over "+X" shows full participant list
Very long meeting title from Calendly
Title truncates with ellipsis at the available row width
Full title shown on hover tooltip and in the meeting details pop-up
Very long meeting description
Description truncates with ellipsis below the title at available row width
Full description visible in meeting details pop-up
Multiple meetings at the same time slot
All meetings display individually in the list; Calendly handles scheduling conflicts
No conflict resolution in Pixally
Network interruption during scheduling redirect to Calendly
Display "Something went wrong" error
Client retries the scheduling flow
Client refreshes page immediately after scheduling
New meeting may not appear yet if sync is not complete
Client refreshes again after a short wait
Past meeting with video link
"Join Meeting" CTA remains visible but the link may be expired
Clicking opens the link; external service handles expiration
Client associated with multiple projects
Meetings shown are scoped to the currently selected project only
Switching projects shows that project's meetings
Client removed from project
Client loses portal access entirely; meetings are no longer accessible
Login shows access error
Archived/completed project
Meetings tab visible in read-only mode; "+ New Meeting" button is hidden; past meetings remain viewable
Client cannot schedule new meetings
9. Acceptance Criteria
-
The Meetings tab must appear only when at least one agency project team member has Calendly integrated; otherwise, the tab is hidden.
-
The meeting list must display all past and upcoming project meetings with correct Date & Time, Title, Description, Participants, and mode-based action CTA.
-
The default sort must be "Latest" (nearest upcoming first); "Oldest" shows earliest meetings first.
-
The "+ New Meeting" button must open a team member selection list showing only Calendly-integrated project members; selecting a member must redirect to their Calendly scheduling page.
-
The client's name and email must auto-populate in the Calendly form; all project team members must be pre-added as guests with the option to remove/add.
-
Meeting mode CTAs must work correctly: "Join Meeting" opens video link in new tab; "View Call Details" opens phone pop-up; "In Person" opens location pop-up with Google Maps; "Meeting Info" opens general info pop-up.
-
Cancelled meetings must be deleted from the meeting list and not displayed to the client.
-
Clicking a meeting row must open the appropriate meeting details pop-up matching the meeting mode.
-
The Overview sidebar Meetings count must show only upcoming active meetings; display "--" when none exist.
-
The "+ New Meeting" button must be disabled when no team members have Calendly connected, with a tooltip explaining the reason.
-
New meetings must appear in the list after manual page refresh following successful Calendly scheduling.
-
The empty state must show "No meetings yet" with a calendar illustration when no meetings exist.
-
All date/time values must display in the client's local timezone.
-
The page must be responsive and functional on devices with screen width ≥320px.
-
Participant avatars must show only project team members; non-project guests must be hidden from avatar display. Maximum 3 avatars displayed; overflow shown as "+X" indicator.
10. Dependencies
Dependency
Type
Description
Fallback Behavior
Calendly Integration (Agency-Side)
External API
Provides all meeting data, scheduling functionality, and sync capabilities
Meetings tab hidden if no integration; "Something went wrong" error if service unavailable
Calendly API
External Service
Handles meeting scheduling, cancellation, and real-time event data
Display error message if API unreachable; existing synced meetings remain visible
Authentication Service
Internal
Validates client session and project access permissions
Redirect to login if unavailable
Project Management Module
Internal
Determines project association, team members, and client access
Cannot display meetings without project context
User Management System
Internal
Provides team member profiles, avatars, and Calendly integration status
Cannot populate team member selection list
Overview Side Menu Module
Internal
Provides the persistent right sidebar with metric cards and Deliverables
Sidebar loads independently; meeting count may show "--"
Notification Service
Internal
Sends meeting confirmation and reminder notifications
Silent failure; meetings still sync but notifications may not deliver
Time Zone Service
Internal
Converts meeting times to the client's local timezone
Incorrect time display if unavailable; fallback to UTC
Brand Management Module
Internal
Provides custom branding for the portal interface
Default theme applied if unavailable
11. References
-
Calendly Integration FRD (Agency-Side): Refer to the Calendly Integration FRD for complete details on the agency-side integration, connection/disconnection flows, calendar sync, and dashboard widget behavior.
-
Client Portal - Overview Side Menu FRD: Refer for the persistent right sidebar structure including the Meetings count metric card.
-
Client Portal - Project Header and Tabs FRD: Refer for the main navigation structure and tab behavior.
-
Figma Design Link:Click here
✅ Overview > Finances
Functional Requirements Document - Client Portal: Overview > Finances
1. Module Overview
Module Name: Client Portal - Overview > Finances
Purpose: The Finances section provides clients with comprehensive visibility into their project's financial status, including package pricing, payment history, outstanding balances, payment schedules, and the ability to make secure online payments through integrated payment processing.
Business Goals: To enable transparent financial management, reduce payment-related inquiries, facilitate timely payment collection, and provide clients with self-service access to invoices, receipts, and payment options throughout their project lifecycle.
2. User Roles & Permissions
Role
Access Level
Permissions
Client (Primary Contact)
Full Access
View all financial details, make payments, download invoices/receipts, add payment methods
Client (Additional Contacts - Authorized)
Payment Access
View financial details, make payments with authorization, download documents
Client (Additional Contacts - View Only)
Read-Only Access
View financial information only, download invoices/receipts
Guest/Non-authenticated Users
No Access
Cannot access financial information
3. User Flow
3.1 The client navigates to the Overview tab from the main project navigation.
3.2 The client locates the Finances widget in the right sidebar or main content area.
3.3 The client clicks on "View All" or the Finances section header to expand full financial details.
3.4 The system loads the complete finances page showing all financial information.
3.5 The client views the total package price displayed prominently at the top.
3.6 The client reviews the amount already paid showing below the total.
3.7 The client checks the outstanding balance highlighted in the summary section.
3.8 The client scrolls to view the payment schedule table showing all installments.
3.9 The client identifies upcoming payment due dates with amounts in the schedule.
3.10 The client views the payment history section showing all completed transactions.
3.11 The client clicks on a specific payment entry to view transaction details.
3.12 The system displays the payment receipt with date, amount, and payment method.
3.13 The client clicks "Download Invoice" button to save the original invoice.
3.14 The system downloads the invoice PDF to the client's device.
3.15 The client decides to make a payment and clicks "Make a Payment" button.
3.16 The system opens the Stripe payment modal overlay.
3.17 The system displays the full invoice amount in the payment modal. Partial payments are not supported — the client must pay the full invoice amount.
3.18 The client selects a saved payment method from their account or enters new payment details through Stripe's secure interface.
3.19 The client enters credit card information in the Stripe-hosted fields.
3.20 The client reviews the payment summary and clicks "Pay Now" to process.
3.20a If payment fails, the system displays the Stripe error message in a red banner within the modal (e.g., "Card declined", "Insufficient funds"). The modal stays open. The client can edit payment details and retry. There is no retry limit.
3.21 The system processes the payment through Stripe and displays confirmation.
3.22 The client receives a payment receipt via email and sees success message.
3.23 The system updates the balance and payment history immediately.
3.24 The client downloads the new payment receipt for their records.
4. Functional Logic
4.1 Financial Summary Display
- The finances section displays the total package price prominently at the top with clear currency formatting.
- The system shows the cumulative amount paid to date directly below the total price.
- Outstanding balance calculates automatically as total minus paid amount and displays with emphasis.
- The summary section uses color coding to indicate payment status: green for paid, orange for pending, red for overdue.
- Tax Display: If Stripe Tax is enabled (configured at the brand level by the agency), tax is calculated in real-time at payment using the client's billing address. If Stripe Tax is not enabled, the tax amount is the fixed value set by the agency at invoice creation. Tax displays as a separate line item: "Tax: $XXX.XX".
- Service fees or additional charges display as separate line items for transparency.
- Discount amounts appear as deductions if any discounts were applied to the package.
- The currency symbol displays consistently throughout based on the contract currency.
- Numbers format with appropriate decimal places and thousand separators for readability.
4.2 Payment Schedule Management
- The payment schedule displays in a structured table format with clear column headers.
- Each payment installment shows: due date, description, amount, and status.
- Due dates display in an easily readable format (e.g., "March 15, 2024") with day of week.
- Payment descriptions clarify the purpose (e.g., "Initial Deposit", "Second Installment", "Final Payment").
- Status indicators show as badges: "Paid" (green), "Pending" (yellow), "Overdue" (red), "Due Soon" (orange).
- The system highlights the next due payment with visual emphasis for easy identification.
- Overdue payments appear at the top with red highlighting and days overdue count.
- Payments due within 7 days show warning indicators to prompt timely action.
- The schedule automatically updates when payments are made, moving items to paid status.
- Custom payment schedules display exactly as configured by the agency during contract setup.
4.3 Payment History Tracking
- The payment history section lists all completed transactions in reverse chronological order.
- Each payment entry displays: payment date, amount, payment method (last 4 digits), and status.
- Transaction IDs from Stripe appear for reference and support purposes.
- The system shows whether each payment was made online or recorded manually by the agency.
- Refunds: Refunds are initiated by the agency only (from the Invoice module in the agency portal). Clients cannot initiate refunds from the client portal. Refunded amounts display as separate entries in the payment history with a "Refunded" status badge (grey)
- Payment methods show safely with only last 4 digits of card numbers for security.
- Each payment entry includes a "View Receipt" link for accessing transaction details.
- Downloaded receipts include all necessary information for accounting and tax purposes.
- The system maintains complete history even for very old transactions without pagination limits.
- Failed payment attempts show in history with failure reason if available.
4.4 Invoice Management
- The original invoice/proposal displays as a downloadable PDF with version control.
- Invoice downloads include all service details, pricing breakdown, and terms.
- The system generates updated invoices automatically when modifications occur.
- Invoice Modifications include: changes to line items, pricing, discounts, or payment terms made by the agency after the invoice has been sent. Each modification generates a new version while preserving the original invoice ID for tracking continuity.
- Each invoice version maintains a timestamp and version number for tracking.
- The filename for downloads includes project name and date for easy filing.
- Invoices contain agency branding as configured in brand settings.
- The system allows downloading of both original and current versions if changes were made.
- Tax information appears on invoices as required by jurisdiction.
- Payment terms and conditions display clearly on all invoice documents.
4.5 Payment Processing Integration
- Empty State — No Invoices/Payments: If the project has no invoices or package assigned, the Financial Summary card still displays with Total Project Price as "$0" / Payments Completed as "$0" / Remaining Payment as "$0", and the Payments table area displays an illustration with the message: "No payments yet." The "Make a Payment" button is hidden when no invoices exist.
- The "Make a Payment" button opens a Stripe-hosted payment modal for security.
- No Partial Payments: The payment interface displays the full invoice amount. The client cannot enter a custom/partial amount. The full invoice amount must be paid in a single transaction.
- Suggested payment amounts appear based on the payment schedule (e.g., next installment due).
- The system accepts credit cards, debit cards, and ACH transfers based on agency configuration.
- Card information entry occurs in Stripe-hosted fields for PCI compliance.
- The system never stores card details directly, relying on Stripe tokenization.
- Address verification (AVS) and CVV checks run automatically during processing.
- The payment modal shows processing status with loading indicators during transaction.
- Success confirmation displays immediately upon successful payment completion.
- Failed payments show specific error messages from Stripe (e.g., "Card declined", "Insufficient funds").
- The system sends automatic email receipts through Stripe to the provided email address.
4.6 Payment Method Management
- Clients can use saved payment methods from their Account Settings (managed via Stripe) when making payments. The payment modal displays a list of the client's saved payment methods.
- Clients can also enter new payment details directly in the Stripe-hosted payment modal without saving the method.
- The system displays saved payment methods with only the card type (Visa, Mastercard) and last 4 digits for security. Bank accounts show the last 4 digits and bank name.
- Payment method details in the payment history show only the type and last 4 digits of the method used for that transaction.
- For full payment method management (add/remove/set primary), refer to the Account Settings FRD.
4.7 Automatic Calculations
- The system recalculates all totals immediately when payments are processed.
- Outstanding balance updates in real-time without requiring page refresh.
4.8 Notifications and Reminders
- Payment confirmation messages appear immediately after successful transactions.
- The system indicates when email receipts have been sent successfully.
- Overdue payment warnings display prominently when viewing finances.
- Upcoming payment reminders show for payments due within 7 days.
- The last payment received date displays for agency reference.
4.9 Security and Compliance
- All payment processing occurs through Stripe's PCI-compliant infrastructure.
- The system uses HTTPS encryption for all financial data transmission.
- Session timeouts apply to payment pages for security.
- The system logs all financial access and actions for audit purposes.
- Sensitive financial data masks appropriately in the interface.
5. Field Details & Validations
Field Name
Field Type
Validation Rules
Total Package Price
Currency
Positive decimal, 2 decimal places, with currency symbol
Amount Paid
Currency
Non-negative decimal, cannot exceed total
Outstanding Balance
Currency
Calculated field: Total - Paid
Due Date
Date
Valid date format MM/DD/YYYY
Card Number
Stripe Hosted
Handled by Stripe, 13-19 digits
CVV
Stripe Hosted
Handled by Stripe, 3-4 digits
Email Address
Valid email format for receipts
Payment Description
Text
Maximum 200 characters
6. Success Message Handling
Operation
Success Message
Trigger Condition
Post-Success Action
Payment Processed
"Payment successful! Amount: $X,XXX"
Successful transaction
Update balance display
Invoice Downloaded
"Download started"
Invoice download initiated
Browser handles download
Receipt Downloaded
"Download started"
Receipt download initiated
Browser handles download
Payment Method Added
"Payment processing..."
Card details entered
Process transaction
Email Receipt Sent
"Receipt sent to [email]"
After payment success
Display confirmation
7. Error Message Handling
Error Scenario
Error Message
Trigger Condition
User Action Required
Payment Failed
"Payment declined. Please try another card."
Card declined by bank
Use different payment method
Invalid Card
"Invalid card number"
Incorrect card format
Re-enter card number
Insufficient Funds
"Transaction failed: Insufficient funds"
Bank decline
Use different card
Network Error
"Connection error. Please try again."
Network timeout
Retry payment
Session Expired
"Session expired. Please refresh and try again."
Timeout during payment
Re-authenticate
Stripe Unavailable
"Payment system temporarily unavailable"
Stripe service down
Try again later
8. Edge Cases
Scenario
System Behavior
Fallback Action
Zero balance due
Hide payment button
Show "Paid in Full" status
Multiple simultaneous payments
Stripe handles concurrency natively
First successful payment processes. If second contact's payment causes the total to exceed balance, Stripe rejects the transaction. The system displays "Payment failed. Balance may have changed. Please refresh." and auto-refreshes the page. | Stripe-managed; no custom queuing needed
Refund processing
Show negative transaction
Update balance accordingly
Payment plan modification
Update schedule display
Show modification notice
Very large number of payments
Implement pagination
Load more button
Offline payment recorded
Show manual entry
Different indicator
No invoices or package assigned to project
Financial Summary shows $0 values; Payments table shows "No payments yet" illustration; payment button hidden
Client sees the empty state; no action possible until agency creates invoices
9. Acceptance Criteria
- Financial summary must display accurate totals and balances
- Payment schedule must show all installments with correct dates and amounts
- Stripe integration must process payments securely without storing card data
- Payment history must maintain complete transaction records
- Invoices must download successfully in PDF format
- Receipts must generate automatically for all payments
- The interface must update immediately after successful payments
- All currency amounts must format consistently with proper symbols
- The system must prevent overpayments beyond outstanding balance
- Mobile responsive design must function on devices ≥320px width
10. Manual Test Cases
Test cases have been created in a separate Excel file. Access the test cases here: TestCases_ClientPortal_Overview_Finances.xlsx
11. Dependencies
Dependency
Type
Description
Fallback Behavior
Stripe Payment Gateway
External
Processes all payment transactions
Display unavailable message
Invoice Generation System
Internal
Creates and manages invoices
Show error message
Receipt Generation Service
Internal
Generates payment receipts
Email receipt only
Email Service
Internal
Sends payment confirmations
Display in-app only
Tax Calculation Service
Internal
Calculates applicable taxes
Show subtotal only
12. References
- Figma Design Files: Figma
✅ Overview Side Menu
Functional Requirements Document - Client Portal: Overview Side Menu
1. Module Overview
Module Name: Client Portal - Overview Side Menu
Purpose: The Overview Side Menu provides quick navigation and action shortcuts on the right side of the overview page, enabling clients to access frequently used features, schedule meetings, download contracts, and navigate to key project sections efficiently.
Business Goals: To enhance user experience by providing immediate access to common actions, reduce navigation time to important features, and centralize quick actions in a consistently accessible location throughout the client portal.
2. User Roles & Permissions
Role
Access Level
Permissions
Client (Primary Contact)
Full Access
Access all menu items, schedule meetings, download documents, navigate sections
Client (Additional Contacts)
Full Access
Access all menu items, schedule meetings, download documents, navigate sections
Client (View-Only)
Restricted Access
View menu items, download documents only, cannot schedule meetings
Guest/Non-authenticated Users
No Access
Cannot access the side menu
3. User Flow
3.1 The client logs into the portal and lands on the Overview tab page.
3.2 The client observes the side menu positioned on the right side of the screen.
3.3 The system displays the side menu with multiple widget sections stacked vertically.
3.4 The client views the Meeting Scheduler widget at the top of the side menu.
3.5 The client clicks on "Schedule a Meeting" button within the widget.
3.6 The system opens a meeting scheduling interface or calendar view.
3.7 The client returns to the overview and scrolls down the side menu.
3.8 The client locates the Contract/Documents widget in the side menu.
3.9 The client clicks on "Download Contract" link within the widget.
3.10 The system initiates download of the signed contract PDF file.
3.11 The client views the Questionnaires widget showing pending items.
3.12 The client clicks on a pending questionnaire link.
3.13 The system navigates to the questionnaire form for completion.
3.14 The client returns and checks the Payment widget in the side menu.
3.15 The client views the outstanding balance displayed in the widget.
3.16 The client clicks "Make a Payment" button in the payment widget.
3.17 The system opens the payment interface with Stripe integration.
3.18 The client scrolls to view the Quick Links widget section.
3.19 The client clicks on a quick link to jump to specific event information.
3.20 The system navigates directly to the selected section or event.
3.21 The client collapses the side menu using the minimize icon if desired.
4. Functional Logic
4.1 Side Menu Structure and Layout
- Each widget in the side menu displays within a card container with consistent padding and spacing.
- The system arranges widgets in a specific order: Meetings, Contract/Documents, Questionnaires, Payments, Quick Links.
- Widget cards feature clear headers with icons to indicate their function visually.
- The side menu automatically hides on screens narrower than 1024px to prioritize main content.
- On tablet and mobile devices, the side menu becomes accessible through a floating action button.
- The system remembers the menu's expanded or collapsed state across user sessions.
4.2 Meeting Scheduler Widget
- The Meeting Scheduler widget displays prominently as the first item in the side menu.
- The widget shows the next scheduled meeting date and time if one exists.
- A "Schedule a Meeting" button appears prominently for initiating new meeting requests.
- The system integrates with the agency's calendar system to show available time slots.
- When clicked, the scheduler opens in a modal or new page depending on configuration.
- The widget displays the meeting type options available (e.g., "Planning Session", "Venue Walkthrough").
- Recent meeting history shows the last 2-3 meetings with dates for reference.
- If no meetings are scheduled, the widget displays "No upcoming meetings" with a "Schedule a Meeting" button below it. If no agency team members have Calendly connected, the button is hidden and only the empty message displays.
- The system validates meeting availability against the agency team's connected calendars.
- Meeting confirmation notifications trigger automatically upon successful scheduling.
4.3 Contract/Documents Widget
- The Contract/Documents widget provides quick access to all signed agreements and important documents.
- The primary "Download Contract" button enables one-click access to the main signed contract.
- Additional documents such as amendments or addendums appear as separate download links.
- Each document link shows the document type and date for easy identification.
- The system displays document file sizes to inform users before downloading.
- Download icons appear next to each document for clear action indication.
- The widget shows the contract signing date and status (e.g., "Signed on May 15, 2024").
- If contracts are pending signature, the widget displays "Sign Contract" action button instead.
- The system tracks download attempts for agency reporting without displaying counts to clients.
- All documents download in PDF format for universal compatibility.
- Document Unavailable: If a document file is not found on the server (corrupted, deleted, or inaccessible), the system displays an inline error "Document unavailable" next to the document entry and hides the download button for that specific document. Other documents in the widget remain functional.
4.4 Questionnaires Widget
- The Questionnaires widget displays all assigned questionnaires with their completion status.
- Pending questionnaires appear at the top with clear "Complete Now" action buttons.
- Each questionnaire shows its title and estimated completion time (e.g., "~10 minutes").
- Completed questionnaires display with green checkmarks and completion dates.
- The widget shows progress for partially completed questionnaires as a percentage.
- Due dates appear for time-sensitive questionnaires with visual urgency indicators.
- The system highlights overdue questionnaires with red indicators to prompt action.
- Clicking a questionnaire opens it in the same window to maintain context.
- If no questionnaires exist, the widget displays "No questionnaires at this time."
4.5 Payment Widget
- The Payment widget displays current financial status including total, paid, and outstanding amounts.
- The outstanding balance appears prominently with appropriate currency formatting.
- A "Make a Payment" button enables quick access to the payment interface.
- The next payment due date displays with amount if payment schedule exists.
- Payment history shows the last 2-3 transactions with dates and amounts.
- The widget indicates if the account is "Paid in Full" with a green success indicator.
- Overdue payments display with red highlighting and overdue amount.
- The system integrates with Stripe for secure payment processing through popup modal.
- The widget refreshes automatically after successful payment completion.
- Zero Balance (All Paid): If the account balance is $0 and all invoices are paid, the widget displays "Account Paid in Full" with a green checkmark icon. The "Make a Payment" button is hidden.
- No Invoices: If no invoices exist for the project, the widget displays "No payments yet." The "Make a Payment" button is hidden.
4.6 Quick Links Section
- The Quick Links widget provides shortcuts to frequently accessed sections and features.
- Links organize by category such as "Event Info", "Files", "Messages", "Gallery".
- Each link displays with an appropriate icon for visual identification.
- The system highlights links to sections with new updates or pending actions.
- Custom links added by the agency appear in this section if configured.
- External links (if any) open in new tabs to maintain portal session.
- The most used links may appear at the top based on user interaction patterns.
- Links to specific events use clear labeling (e.g., "Wedding Day Info", "Engagement Photos").
- The widget maintains consistent styling with hover effects for better interactivity.
4.7 Responsive Behavior
- On screens below 1024px width, the side menu collapses to preserve main content space.
- A floating action button appears on mobile/tablet to access the side menu.
- When opened on mobile, the side menu slides in as an overlay panel.
- The mobile menu includes a close button for easy dismissal.
- Touch gestures enable swipe-to-close functionality on mobile devices.
- Widget content adjusts to fit narrower mobile menu width appropriately.
- Action buttons resize to meet minimum touch target requirements (44px).
4.8 Menu State Management
- The system maintains the side menu visibility state during the user session.
- Collapsed or expanded preference persists across page navigation.
- The minimize/expand toggle appears as a small icon at the top of the menu.
- Animation transitions smooth the collapse/expand actions for better UX.
- The main content area adjusts its width when the side menu toggles.
5. Field Details & Validations
Field Name
Field Type
Validation Rules
Meeting Date
DateTime Display
ISO 8601 format, future dates only for scheduling
Document Name
Text Display
Maximum 100 characters
Document Size
Text Display
Format: "X.X MB", calculated from file
Questionnaire Title
Text Display
Maximum 150 characters
Payment Amount
Currency Display
2 decimal places, with currency symbol
Due Date
Date Display
Format: MM/DD/YYYY
Quick Link Text
Text Display
Maximum 50 characters
Widget Title
Text Display
Maximum 30 characters
6. Success Message Handling
Operation
Success Message
Trigger Condition
Post-Success Action
Schedule Meeting
"Meeting scheduled successfully"
Meeting booking confirmed
Update widget display
Download Document
"Download started"
Document download initiated
Browser handles download
Start Questionnaire
None (Silent)
Questionnaire opened
Navigate to form
Payment Initiated
"Redirecting to payment..."
Payment button clicked
Open payment modal
Menu Collapsed
None (Silent)
Collapse button clicked
Adjust layout
7. Error Message Handling
Error Scenario
Error Message
Trigger Condition
User Action Required
Meeting Unavailable
"No available time slots"
Calendar fully booked
Try different dates
Document Download Failed
"Unable to download. Please try again."
File not accessible
Retry download
Questionnaire Load Failed
"Unable to load questionnaire"
Form service error
Refresh page
Payment System Unavailable
"Payment system temporarily unavailable"
Stripe service down
Try again later
Menu Load Error
"Unable to load menu items"
API failure
Refresh page
8. Edge Cases
Scenario
System Behavior
Fallback Action
No widgets configured
Display minimal menu
Show available items only
All questionnaires complete
Show completion message
Hide widget or show success
No payment required
Hide payment widget
Display paid status
No documents available
Show empty state
Display "No documents yet"
Calendar sync failure
Show manual contact option
Provide agency contact
Multiple contracts
List all with labels
Clear identification
Very long document names
Truncate with ellipsis
Show full name on hover
Slow loading widgets
Show skeleton loaders
Progressive loading
Document file corrupted or deleted from server
Display inline "Document unavailable" message next to the affected document; hide download button for that entry
Other documents remain downloadable; no full widget failure
9. Acceptance Criteria
- Side menu must display on right side of overview page on desktop
- All widgets must load within 2 seconds of page load
- Meeting scheduler must integrate with agency calendar system
- Documents must download successfully when clicked
- Payment widget must show accurate balance information
- Side menu must collapse appropriately on mobile devices
- Quick links must navigate to correct destinations
- Menu state must persist during session
- All action buttons must have appropriate hover states
- Widget order must remain consistent
10. Manual Test Cases
Test cases have been created in a separate Excel file. Access the test cases here: TestCases_ClientPortal_Overview_SideMenu.xlsx
11. Dependencies
Dependency
Type
Description
Fallback Behavior
Calendar Integration Service
Internal
Provides meeting scheduling
Show contact message
Document Management System
Internal
Supplies contract files
Display unavailable
Questionnaire Module
Internal
Manages forms and responses
Hide widget
Payment Processing (Stripe)
External
Handles payment transactions
Show error message
Session Management
Internal
Maintains menu state
Default to expanded
12. References
- Figma link: Figma
✅ Events - Service Tab
Functional Requirements Document - Client Portal: Events - Service Tab
1. Module Overview
Module Name: Client Portal - Events - Service Tab
Purpose: The Service tab within each event displays a read-only summary of all services included in the client's package for a specific event, showing key specifications such as package type, hours of coverage, minimum deliverable counts, and number of assigned professionals. Below the services, the tab also displays event-level custom fields configured by the agency.
Business Goals: To provide clients with clear, at-a-glance visibility into the services contracted for each event, reduce service-related inquiries to the agency, and maintain a single source of truth for service details that automatically reflects any changes made by the agency in the project details.
2. User Roles & Permissions
Role
Access Level
Permissions
Client (Primary Contact)
Read-Only Access
View all service details and custom fields for the event; cannot edit, add, or remove any service information
Client (Additional Contacts)
Read-Only Access
View all service details and custom fields for the event; cannot edit, add, or remove any service information
Guest/Non-authenticated Users
No Access
Cannot access service information
Important: All service data on this tab is read-only for clients. Clients cannot modify any service details, package information, or custom field values. Any changes must be requested through the agency. Changes made by the agency in the project details are reflected in the client portal after a page refresh.
3. User Flow
3.1 Viewing Services (Populated State)
3.1.1 The client navigates to a specific event tab (e.g., "Rehearsal Dinner", "Wedding") from the main project navigation.
3.1.2 The system loads the event interface with sub-tabs: Services, Deliverables, Files/Documents, Notes, and Info.
3.1.3 The Services sub-tab is the default active tab when an event is opened.
3.1.4 The system displays the Services page with the left/main content area showing service sections and the right sidebar showing the persistent Overview widget.
3.1.5 The client views all service types listed vertically (e.g., Photography, Videography, Content Creation), each as a separate section with key metric icons.
3.1.6 The client reviews the Photography section showing Package name, Hours Coverage, Min amount of photos, and Number of Shooters.
3.1.7 The client scrolls down to view additional service types (Videography, Content Creation, etc.), each displaying their respective metrics.
3.1.8 The client scrolls further to view the event-level custom fields section below the service sections, showing various field types with their values.
3.1.9 For long text custom fields, the client clicks "Read more" to expand the truncated content.
3.1.10 For link custom fields, the client clicks the copy icon to copy the URL to clipboard, or clicks the link directly to open it in a new tab.
4. Functional Logic
4.1 Page Layout and Structure
-
The Service tab is a sub-tab under each event tab (e.g., Rehearsal Dinner, Wedding, Engagement Photoshoot), positioned first in the event sub-navigation: Services | Deliverables | Files/Documents | Notes | Info.
-
The page is divided into two areas: the left/main content area containing the Services section and custom fields, and the right sidebar containing the persistent event-level Overview widget.
-
The right sidebar displays across all event sub-tabs and includes: Overview metric cards (Meetings, Upcoming Payments, Received Deliverables, Pending Deliverables), Deliverables section, Upcoming Meetings section, and Payment section.
-
All content on this tab is read-only for clients. There are no edit, add, or delete actions available.
4.2 Service Metric Display
Each service section displays a horizontal row of key metrics, each represented as an icon with a value label below it:
Standard metrics shown for all service types:
- Package: Displays the package name (e.g., "Basic", "Premium"). Shown with a package icon.
- Hours Coverage: Displays the total contracted hours (e.g., "8"). Shown with a clock icon.
- Number of Shooters: Displays the number of assigned professionals (e.g., "2"). Shown with a person icon.
Conditional metric (Photography only):
- Min amount of photos: Displays the minimum guaranteed photo count (e.g., "1000"). Shown with a photo/image icon. This metric is only displayed for Photography service type and is hidden for other service types.
Display rules:
- Metric values are displayed as plain numbers without units in the value area; the label below the icon provides the context (e.g., the number "8" with label "Hours Coverage").
- All metric values are read-only and sourced from the agency's project configuration.
4.3 Supported Service Types
The system supports exactly three service types:
- Photography — Shows Package, Hours Coverage, Min amount of photos, Number of Shooters
- Videography — Shows Package, Hours Coverage, Number of Shooters
- Content Creation — Shows Package, Hours Coverage, Number of Shooters
Only these three service types are available. The service sections display only for the types included in the event's package.
4.4 Event-Level Custom Fields
Below the service sections, the system displays event-level custom fields configured by the agency. Custom fields are visible in the client portal only if the agency has enabled the "Clients" visibility checkbox when creating/configuring the custom field in the agency settings.
Custom Field Visibility Logic (Agency-Side Configuration):
When the agency creates a custom field, they configure the following:
- Field Name: The label displayed to the client
- Field Type: The data type (Short Text, Long Text, Date Picker, Number, Link, Single Choice, Multiple Choice)
- Field is visible to...: Checkboxes for "Contractors" and/or "Clients". Only fields where the "Clients" checkbox is selected are displayed in the client portal. Fields without "Clients" visibility are completely hidden from the client view.
- Field will be applied to the next events...: Determines which events the field appears under (e.g., "Wedding", "Rehearsal Dinner"). The field is only shown on the Service tab of the events it is mapped to.
- ...and services: Determines which service section the field is associated with (e.g., "Photography"). The field displays below the corresponding service section, not as a generic event-level block.
Note: Custom fields apply to all future and existing projects once created by the agency.
Supported custom field types:
-
Short Text Field: Displays the field label and a single-line text value below it. Read-only.
-
Long Text Field: Displays the field label and multi-line text content. If the content exceeds a defined height threshold (approximately 3 lines), the text is truncated with a "Read more" link. Clicking "Read more" expands the content inline to show the full text. The expanded state shows a "Read less" or "Show less" option to collapse back.
-
Date Picker Field: Displays the field label and a formatted date value (e.g., "August 5, 2025"). Read-only.
-
Number Field: Displays the field label and a numeric value (e.g., "2132331313"). Read-only.
-
Link Field: Displays the field label and a clickable URL. A copy icon is displayed next to the link. Clicking the copy icon copies the URL to clipboard. Clicking the link itself opens it in a new browser tab.
-
Single Choice Field: Displays the field label and the selected option value (e.g., "Selected Option"). Read-only.
-
Multiple Choice Field: Displays the field label and all selected option values, shown as comma-separated text or as individual tags/chips. Read-only.
Custom field display rules:
- Custom fields appear in the client portal only if the "Clients" visibility checkbox is enabled in the agency's custom field configuration. Fields with only "Contractors" visibility or no visibility selected are completely hidden.
- Custom fields appear only if they have been configured and have values for the event. Empty custom fields are not displayed.
- Custom fields are displayed under the specific service section they are associated with (based on the "...and services" mapping), not as a standalone section at the bottom.
- If a custom field is mapped to multiple events, it appears on each mapped event's Service tab independently.
- Custom fields are displayed in the order defined by the agency.
- All custom field values are read-only for clients.
- A visual separator (spacing or divider) distinguishes the custom fields from the service metrics above.
4.5 Right Sidebar (Event-Level Overview Widget)
The right sidebar displays alongside the Services content and persists across all event sub-tabs. It contains:
-
Overview Metric Cards: Four cards showing Meetings count, Upcoming Payments count, Received Deliverables count, and Pending Deliverables count.
-
Deliverables Section: Lists deliverables for the event with their status (Pending/Received), expected dates, and delivery links (e.g., Google Drive URLs with copy icons). Includes a "Show More (+X Deliverables)" link when the list is truncated.
-
Upcoming Meetings Section: Lists the next upcoming meetings with meeting title, date, time, and participant avatars. Each meeting entry is clickable (linking to the meeting details — Refer Meetings Tab FRD).
-
Payment Section: Displays payment items with due dates, statuses (Overdue in red, Upcoming in yellow), and a three-dot action menu for each payment entry.
Note: The right sidebar is shared across all event sub-tabs and may be documented in a separate shared component FRD. This section provides context for the Service tab layout only.
4.6 Data Source and Synchronization
-
All service data is fetched from the agency portal's project details — specifically the order/package configuration and event service assignments.
-
Any changes made by the agency (new services added, hours updated, shooters changed, package modified) are reflected in the client portal after a manual page refresh.
-
Custom field values are also sourced from the agency's event configuration and follow the same refresh behavior.
-
The client portal does not cache service data independently — each page load fetches the latest available data from the server.
4.8 No Empty State for Services
-
The Services tab does not have an empty state. Services are always present when the event exists — the agency configures services as part of the event/project setup.
-
No custom fields configured (or none with "Clients" visibility): The custom fields area is simply not rendered — no empty state message is shown. The page shows only the service sections.
-
Services exist but no custom fields visible to client: Only the service sections display. No visual gap or placeholder appears where custom fields would be.
5. Field Details & Validations
5.1 Service Metric Fields
Field Name
Field Type
Validation Rules
Service Type Name
Text Display (Section Header)
Displayed as bold section header. Fixed values: "Photography", "Videography", "Content Creation" only
Package
Text Display with Icon
Package name from the agency configuration. e.g., "Basic", "Premium". Maximum 200 characters
Hours Coverage
Numeric Display with Icon
Numeric value representing contracted hours. e.g., "8". Range: 0–999
Min amount of photos
Numeric Display with Icon
Minimum guaranteed photo count. e.g., "1000". Range: 0–99,999. Displayed only for Photography service type
Number of Shooters
Numeric Display with Icon
Count of assigned professionals. e.g., "2". Range: 0–99
5.2 Custom Field Types
Field Name
Field Type
Validation Rules
Short Text Field
Text Display
Single-line text. Read-only
Long Text Field
Rich Text Display
Multi-line text with "Read more" truncation. Read-only.
Date Picker Field
Date Display
Format: "Month DD, YYYY" (e.g., "August 5, 2025"). Read-only
Number Field
Numeric Display
Numeric value. Read-only.
Link Field
URL Display
Clickable hyperlink that opens in new tab. Copy icon copies URL to clipboard. Read-only.
Single Choice Field
Text Display
Displays the single selected option value. Read-only
Multiple Choice Field
Tag/Text Display
Displays all selected option values as comma-separated text or individual tags. Read-only
5.3 Right Sidebar Fields
Field Name
Field Type
Validation Rules
Meetings Count
Numeric Display
Integer count of upcoming meetings. Displays "--" if none
Upcoming Payments Count
Numeric Display
Integer count of upcoming payments
Received Deliverables Count
Numeric Display
Integer count of received deliverables
Pending Deliverables Count
Numeric Display
Integer count of pending deliverables
Deliverable Name
Text Display
Name of the deliverable item
Deliverable Status
Status Badge
Values: "Pending" (orange), "Received" (green)
Deliverable Expected Date
Date Display
Format: "Expected by Month DD, YYYY"
Deliverable Delivered Date
Date Display
Format: "Delivered on Month DD, YYYY"
Deliverable Link
URL Display
Google Drive or external URL with copy icon
Meeting Title
Text Display
Upcoming meeting name
Meeting Date & Time
DateTime Display
Format: "Dec 17, 2024 - 09:30 AM - 9:30 AM"
Payment Description
Text Display
Invoice or payment name
Payment Due Date
Date Display
Format: "Due Date: Mon DD, YYYY"
Payment Status
Status Badge
Values: "Overdue" (red), "Upcoming" (yellow)
6. Success Message Handling
Operation
Success Message
Trigger Condition
Post-Success Action
Page Load
None (Silent)
Successful data retrieval
Display service sections and custom fields
Copy Link (Custom Field)
"Link copied to clipboard"
Click copy icon on a Link custom field
URL available in clipboard
Copy Deliverable Link (Sidebar)
"Link copied to clipboard"
Click copy icon on a deliverable link in sidebar
URL available in clipboard
Page Refresh
None (Silent)
Manual browser refresh
Display latest data from agency
7. Error Message Handling
Error Scenario
Error Message
Trigger Condition
User Action Required
Service Data Load Failure
"Unable to load service information. Please try again."
API timeout or server error
Refresh page
Custom Fields Load Failure
"Unable to load additional details. Please try again."
API error when fetching custom field data
Refresh page
Sidebar Load Failure
"Unable to load overview. Please try again."
API timeout for sidebar data
Refresh page
Copy to Clipboard Failed
"Unable to copy. Please try manually."
Browser clipboard API failure
Manually select and copy the URL
Network Error
"Please check your internet connection."
No network connectivity
Restore connection and refresh
Session Expired
"Your session has expired. Please log in again."
Invalid or expired session token
Re-authenticate
General Error
"Something went wrong."
Unexpected server error
Retry or refresh page
8. Edge Cases
Scenario
Expected Behavior
Fallback Action
Only one service type exists
Display that single service section; no visual gap for missing service types
Normal rendering
Service added by agency after client last visited
New service appears after client refreshes the page
Manual page refresh required
Service removed by agency
Service section disappears after client refreshes the page
Manual page refresh required
Agency updates hours/shooters/package
Updated values reflect after client refreshes the page
Manual page refresh required
Very long package name
Truncate with ellipsis at available width
Full name visible on hover tooltip
No custom fields visible to client (none configured or none with "Clients" visibility)
Custom fields section is not rendered at all; no placeholder or empty message
Services section displays normally without any gap below
Long Text custom field with very long content
Truncated at approximately 3 lines with "Read more" link
Click "Read more" to expand inline
Link custom field with very long URL
URL truncated with ellipsis in the display
Full URL copied on clicking copy icon; full URL used when clicking the link
Unsupported or new custom field type
Field is hidden from the client view
No error shown; field simply not rendered
Custom field exists but "Clients" visibility not enabled
Field is completely hidden from the client portal
Client never sees fields without "Clients" checkbox enabled
Agency adds custom field after client last visited
New custom field appears after client refreshes the page (if "Clients" visibility is enabled)
Manual page refresh required
Min amount of photos shown for non-Photography service
This field is only displayed for Photography type; hidden for Videography and Content Creation
Service renders with available metrics only
Client navigates between event tabs
Each event tab shows its own services and custom fields independently
No cross-event data mixing
Archived/completed project
Services tab visible in read-only mode (same as active, since everything is already read-only)
No behavioral change
Sidebar deliverables link expired or broken
Link opens in new tab; external service handles error
No client-side validation of link validity
9. Acceptance Criteria
-
All services associated with the event must display as flat, non-collapsible sections. Only three service types are supported: Photography, Videography, and Content Creation.
-
Each service section must show the correct Package name, Hours Coverage, and Number of Shooters; Photography must additionally show Min amount of photos.
-
All service data must be read-only; no edit, add, or delete actions available to clients.
-
Event-level custom fields must display below the service sections only if the agency has enabled the "Clients" visibility checkbox for the field. Fields without "Clients" visibility must be completely hidden.
-
Custom fields must display under the specific service section they are mapped to, based on the agency's "...and services" configuration.
-
The right sidebar must display Overview metric cards, Deliverables, Upcoming Meetings, and Payment sections.
-
Service data must reflect agency-side changes after a manual page refresh.
-
The copy icon on Link custom fields and deliverable links must copy the URL to clipboard with a success message.
-
Custom fields with no values must not be displayed.
-
The Services sub-tab must be the default active tab when navigating to an event.
10. Dependencies
Dependency
Type
Description
Fallback Behavior
Order/Package Management System
Internal
Provides service details, package names, and metric values from the agency's project configuration
Display error message
Custom Fields Module (Agency Settings)
Internal
Provides event-level custom field definitions, values, and visibility settings ("Clients" checkbox) configured by the agency
Hide custom fields; services display normally
Authentication Service
Internal
Validates client session and project/event access permissions
Redirect to login
Project Management Module
Internal
Determines event association and service-to-event mapping
Cannot display event services
Deliverables Module
Internal
Supplies deliverable data for the right sidebar
Show error in sidebar deliverables section
Meetings Module (Calendly Integration)
Internal/External
Supplies upcoming meeting data for the right sidebar
Show empty or "--" in sidebar meetings section
Payment Processing Module
Internal
Supplies payment data and statuses for the right sidebar
Show error in sidebar payment section
Brand Management Module
Internal
Provides custom branding for the portal interface
Default theme applied
Clipboard API
Browser
Enables copy-to-clipboard functionality for link fields
Show "Unable to copy" error
11. References
-
Figma Design Link: Click Here
-
Client Portal - Overview Side Menu FRD: Refer for the shared sidebar structure (note: the event-level sidebar extends the Overview sidebar with Upcoming Meetings and Payment sections).
-
Client Portal - Meetings Tab FRD: Refer for meeting details linked from the sidebar's Upcoming Meetings section.
-
Client Portal - Overview > Finances FRD: Refer for payment details linked from the sidebar's Payment section.
-
Calendly Integration FRD: Refer for meeting data source and integration details.
✅ Event- Deliverables
Functional Requirements Document - Client Portal: Events - Deliverables Tab
1. Module Overview
Module Name: Client Portal - Events - Deliverables Tab
Purpose: The Deliverables tab within each event provides clients with a read-only view of all deliverables associated with the specific event, including their current status (Pending or Received), expected delivery dates, actual delivery dates, and download links for completed deliverables. Deliverable data is sourced from the agency's post-production module.
Business Goals: To provide clients with transparent visibility into deliverable progress for each event, reduce "where are my deliverables?" inquiries to the agency, and give clients self-service access to download completed deliverables directly from the portal.
2. User Roles & Permissions
Role
Access Level
Permissions
Client (Primary Contact)
Read-Only Access
View all deliverables, view statuses and dates, download/access delivered files via links, copy delivery links
Client (Additional Contacts)
Read-Only Access
View all deliverables, view statuses and dates, download/access delivered files via links, copy delivery links
Guest/Non-authenticated Users
No Access
Cannot access deliverables
Important: All deliverable data on this tab is read-only for clients. Clients cannot add, edit, or remove deliverables. Deliverables are managed by the agency through the post-production module.
3. User Flow
3.1 Viewing Deliverables (Populated State)
3.1.1 The client navigates to a specific event tab (e.g., "Rehearsal Dinner", "Wedding") from the main project navigation.
3.1.2 The client clicks on the "Deliverables" sub-tab within the event sub-navigation (Services | Deliverables | Files/Documents | Notes | Info).
3.1.3 The system loads the Deliverables page with the left/main content area showing the deliverables list and the right sidebar showing the persistent event-level Overview widget.
3.1.4 The client views all deliverables for the event, each showing the deliverable name, status, and date information.
3.1.5 The client uses the "Latest" sort dropdown to switch between Latest (default) and Oldest ordering.
3.1.6 The client identifies a deliverable with "Pending" status and notes the expected delivery date.
3.1.7 The client identifies a deliverable with "Received" status and sees the expand/collapse arrow next to the status badge indicating delivery links are available.
3.1.8 The client views the expanded delivery links section below the received deliverable (expanded by default), or clicks the arrow to expand if collapsed.
3.1.9 The client clicks on a delivery link (e.g., Google Drive URL) to access the delivered files in a new browser tab.
3.1.10 The client clicks the copy icon next to a delivery link to copy the URL to clipboard.
3.1.11 The client clicks the collapse arrow to hide the delivery links section for a cleaner view.
3.2 Empty State Flow
3.2.1 The client navigates to the Deliverables tab for an event with no deliverables.
3.2.2 The system displays an illustration with the message: "No deliverables yet — Deliverables for this event will appear here once they're added by the agency."
4. Functional Logic
4.1 Page Layout and Structure
-
The Deliverables tab is a sub-tab under each event tab, positioned second in the event sub-navigation: Services | Deliverables | Files/Documents | Notes | Info.
-
The page is divided into two areas: the left/main content area containing the deliverables list, and the right sidebar containing the persistent event-level Overview widget.
-
All content on this tab is read-only for clients. There are no add, edit, or delete actions available.
-
Deliverable data is scoped to the specific event only — deliverables from other events are not shown.
-
The section header displays "Deliverables" on the left and a "Latest " sort dropdown on the right. Sort options: "Latest" (default — newest deliverables first by delivery/expected date) and "Oldest" (earliest first).
4.2 Deliverables List Display
-
The system retrieves all deliverables associated with the specific event from the agency's post-production module and displays them in a vertical list format.
-
Each deliverable entry displays:
- Deliverable Name: The name of the deliverable item (e.g., "10 Hours of photo shooting", "Drone Footage")
- Status Badge: Either "Pending" (orange) or "Received" (green)
- Date Information:
- For Pending deliverables: "Expected by [date]" (format: "Expected by Dec 20, 2025")
- For Received deliverables: "Delivered on [date]" (format: "Delivered on Dec 16, 2025")
- Delivery Links (Received only): One or more download/access links (e.g., Google Drive URLs) displayed below the date inside a collapsible section. A collapse/expand arrow (∨/∧) appears next to the "Received" status badge when delivery links exist. The links section is expanded by default. Clicking the arrow collapses/expands the delivery links area. Each link shows the URL (truncated with ellipsis if long) and a copy icon to copy the URL to clipboard.
- No expand/collapse arrow is shown for Pending deliverables or for Received deliverables that have no delivery links attached.
-
Deliverables are listed in the order defined by the agency, sorted by the selected sort option (Latest/Oldest).
-
A "Show More (+X Deliverables)" link appears at the bottom when the list exceeds the initially displayed count. Clicking expands the list to show all remaining deliverables.
4.3 Deliverable Status Logic
-
Pending: The deliverable has been defined by the agency but has not yet been delivered. Shows an status badge and the expected delivery date (if set by the agency). If no expected date is set, the date field shows "Expected date TBD."
-
Received: The deliverable has been completed and delivered by the agency. Shows a green status badge, the actual delivery date, and one or more delivery links for the client to access the files.
-
Status changes are managed by the agency in the post-production module. The client portal reflects status updates after a manual page refresh.
4.4 Delivery Links
-
Delivery links are external URLs (typically Google Drive, Dropbox, or other cloud storage links) provided by the agency when marking a deliverable as received.
-
Each link displays with:
- A link icon (colored circle indicator)
- The URL text (truncated with ellipsis if it exceeds the available width)
- A copy icon — clicking copies the full URL to clipboard
-
Clicking the link text itself opens the URL in a new browser tab.
-
A single deliverable can have multiple delivery links (e.g., separate links for full-resolution photos and web-resolution photos).
-
Delivery links are read-only — clients cannot add, edit, or remove links.
4.5 Right Sidebar (Event-Level Overview Widget)
The right sidebar displays alongside the Deliverables content and persists across all event sub-tabs. It contains:
-
Overview Metric Cards: Four cards showing Meetings count, Upcoming Payments count, Received Deliverables count, and Pending Deliverables count.
-
Deliverables Section: A compact summary of the same deliverables data displayed in the main content area, with "Show More" for additional items.
-
Upcoming Meetings Section: Lists upcoming meetings.
-
Payment Section: Displays payment items with status badges.
Note: The right sidebar is shared across all event sub-tabs.
4.6 Data Source and Synchronization
-
All deliverable data is fetched from the agency's post-production module within the project details.
-
The agency manages deliverable creation, status updates, expected dates, delivery dates, and delivery links from the agency portal.
-
Any changes made by the agency (new deliverables added, status changed from Pending to Received, links added, dates updated) are reflected in the client portal after a manual page refresh.
-
The client portal does not cache deliverable data independently — each page load fetches the latest available data.
4.7 Empty State
- When no deliverables exist for the event, the system displays an illustration with the message: **"No deliverables yet — Deliverables for this event will appear here once they're added by the agency."
** - The right sidebar remains visible and functional, with the Received/Pending Deliverables counts showing 0.
5. Field Details & Validations
Field Name
Field Type
Validation Rules
Deliverable Name
Text Display
Name of the deliverable item. Read-only.
Status Badge
Status Indicator
Values: "Pending" ( badge), "Received" (badge). Read-only
Expected Date
Date Display
Format: "Expected by Mon DD, YYYY." Shown only for Pending deliverables. Shows "Expected date TBD" if not set
Delivered Date
Date Display
Format: "Delivered on Mon DD, YYYY." Shown only for Received deliverables
Delivery Link URL
URL Display
External URL. Clickable — opens in new tab. Truncated with ellipsis if long. Read-only
Copy Icon
Icon Button
Copies the full delivery link URL to clipboard.
Expand/Collapse Arrow
Toggle Icon
Displayed next to "Received" badge only when delivery links exist. Toggles visibility of delivery links section. Default: expanded (∨). No arrow for Pending deliverables or Received without links
Sort
Dropdown
Default: "Latest." Options: "Latest" (newest first), "Oldest" (earliest first). Sorts by delivery date (Received) or expected date (Pending)
Show More Link
Link Text
Format: "Show More (+X Deliverables)." Expands the list to show remaining items
6. Success Message Handling
Operation
Success Message
Trigger Condition
Post-Success Action
Page Load
None (Silent)
Successful data retrieval
Display deliverables list
Show More Clicked
None (Silent)
Click "Show More" link
Expand list to show all deliverables
Page Refresh
None (Silent)
Manual browser refresh
Display latest data from agency
7. Error Message Handling
Error Scenario
Error Message
Trigger Condition
User Action Required
Deliverables Load Failure
"Unable to load deliverables. Please try again."
API timeout or server error
Refresh page
Network Error
"Please check your internet connection."
No network connectivity
Restore connection and refresh
General Error
"Something went wrong."
Unexpected server error
Retry or refresh page
8. Edge Cases
Scenario
Expected Behavior
Fallback Action
No deliverables for the event
Display illustration + "No deliverables yet" message
Right sidebar shows 0 counts
All deliverables pending
All items show "Pending" badge with expected dates; no delivery links shown
Client waits for agency to deliver
All deliverables received
All items show "Received" badge with delivery dates and links
Client can access all deliveries
Delivery link expired or broken
Link opens in new tab; external service (Google Drive, etc.) handles the error
Client contacts agency for updated link
Very long deliverable name
Truncate with ellipsis at available width
Full name visible on hover tooltip
Very long delivery link URL
URL truncated with ellipsis in the display
Full URL copied via copy icon; full URL used when clicking
Multiple delivery links per deliverable
All links displayed vertically inside the collapsible section
Each link has its own copy icon
Received deliverable with no delivery links
"Received" badge shown but no expand/collapse arrow displayed; no links section rendered
Client contacts agency for links
Client collapses links then navigates away and returns
Collapse/expand state resets to default (expanded) on page reload
No state persistence for collapse
Agency updates deliverable status after client last visited
Updated status appears after page refresh
Manual page refresh required
Agency adds new deliverable
New deliverable appears after page refresh
Manual page refresh required
Expected date not set by agency
Display "Expected date TBD" instead of a date
Client contacts agency for timeline
Archived/completed project
Deliverables tab visible in read-only mode (same as active, since everything is already read-only)
No behavioral change
Large number of deliverables
Initial display is limited; "Show More (+X Deliverables)" link loads remaining
Progressive display
9. Acceptance Criteria
-
All deliverables associated with the event must display with correct names, statuses, and dates.
-
Deliverables must show "Pending" (orange) or "Received" (green) status badges accurately reflecting the agency's post-production data.
-
Pending deliverables must show "Expected by [date]" or "Expected date TBD" if no date is set.
-
Received deliverables must show "Delivered on [date]" and display one or more delivery links with copy icons.
-
Received deliverables with delivery links must show an expand/collapse arrow next to the status badge. Links section must be expanded by default. Clicking the arrow must toggle visibility.
-
The sort dropdown must offer Latest (default) and Oldest options, sorting by delivery date or expected date.
-
Clicking a delivery link must open the URL in a new browser tab.
-
The "Show More" link must expand the list to display all remaining deliverables.
-
All deliverable data must be read-only — clients cannot add, edit, or remove deliverables or links.
-
Deliverable data must reflect agency-side changes after a manual page refresh.
-
The empty state must display when no deliverables exist for the event.
-
The page must load within 3 seconds under normal network conditions.
-
The interface must be responsive and functional on devices ≥320px width.
10. Dependencies
Dependency
Type
Description
Fallback Behavior
Post-Production Module
Internal
Provides deliverable data, statuses, dates, and delivery links
Display error message or empty state
Event Management Module
Internal
Determines event-scoped deliverable associations
Cannot display event-specific deliverables
Authentication Service
Internal
Validates client session and permissions
Redirect to login
Clipboard API
Browser
Enables copy-to-clipboard for delivery links
Show "Unable to copy" error
Brand Management Module
Internal
Provides custom branding and event tab colors
Default theme applied
11. References
-
Client Portal - Events - Service Tab FRD: Refer for the right sidebar structure shared across event sub-tabs.
-
Client Portal - Overview Tabs FRD: Refer for the Overview sidebar's compact deliverables display (project-scoped summary).
-
Figma : click here
✅ Events - Files/Documents Tab
Functional Requirements Document - Client Portal: Events - Files/Documents Tab
1. Module Overview
Module Name: Client Portal - Events - Files/Documents Tab
Purpose: The Files/Documents tab within each event provides clients with a centralized location to view agency-provided documents (invoices, contracts, proposals, questionnaires) and upload their own files for a specific event. The tab uses a dual inner-tab structure to separate agency-generated documents from client uploads.
Business Goals: To facilitate transparent file sharing between clients and agencies, ensure organized document management per event, and enable clients to contribute necessary files while maintaining clear separation between agency documents and client uploads.
2. User Roles & Permissions
Role
Access Level
Permissions
Client (Primary Contact)
Full Access
View all documents, download files, upload documents (PDF, DOC, DOCX, XLS, XLSX), delete own uploads
Client (Additional Contacts)
Full Access
View all documents, download files, upload documents (PDF, DOC, DOCX, XLS, XLSX), delete own uploads
Guest/Non-authenticated Users
No Access
Cannot access files or documents
3. User Flow
3.1 Viewing Documents
3.1.1 The client navigates to a specific event tab (e.g., "Rehearsal Dinner", "Wedding") from the main project navigation.
3.1.2 The client clicks on the "Files/Documents" sub-tab within the event sub-navigation (Services | Deliverables | Files/Documents | Notes | Info).
3.1.3 The system loads the Documents page with the left/main content area showing the document section and the right sidebar showing the persistent event-level Overview widget.
3.1.4 The section header displays "Documents" with a green "+" icon for uploading and a "Latest" sort dropdown.
3.1.5 The client views two inner tabs: "Documents & Forms" (default active) and "Uploaded Files."
3.1.6 The client views the "Documents & Forms" tab showing all documents related to this event in a table with columns: Name, Type, Created, Added By.
3.1.7 The client clicks on a document row or download icon to download the file.
3.1.8 The client switches to the "Uploaded Files" tab to view only files they have uploaded.
3.2 Uploading a File
3.2.1 The client clicks the green "+" icon next to the "Documents" header.
3.2.2 The system displays the "Add Local File/Documents" upload modal.
3.2.3 The client drags and drops a file into the upload zone or clicks to browse.
3.2.4 The system validates the file type and size.
3.2.5 The client clicks "Upload File" to confirm the upload.
3.2.6 The system uploads the file and adds it to both the "Documents & Forms" and "Uploaded Files" tabs with the client's name as "Added By."
3.2.7 The system sends a notification to the agency team about the new client upload.
3.3 Deleting a File
3.3.1 The client locates a file they uploaded and clicks the three-dot menu or delete icon.
3.3.2 The system displays a confirmation dialog: "Are you sure you want to delete this file?"
3.3.3 The client confirms the deletion.
3.3.4 The system removes the file from the list and displays a success message.
3.4 Empty State
3.4.1 The client navigates to the Files/Documents tab for an event with no documents.
3.4.2 The system displays an illustration with the message: "No documents yet."
4. Functional Logic
4.1 Page Layout and Structure
-
The Files/Documents tab is a sub-tab under each event tab, positioned third in the event sub-navigation: Services | Deliverables | Files/Documents | Notes | Info.
-
The page is divided into two areas: the left/main content area containing the Documents section, and the right sidebar containing the persistent event-level Overview widget.
-
The section header displays "Documents" with a green "+" icon for uploading new files on the left, and a "Latest" sort dropdown on the right.
-
Below the header, two inner tabs provide content separation: "Documents & Forms" (default active) | "Uploaded Files".
-
All document data is scoped to the specific event only — documents from other events within the same project are not shown.
4.2 Documents & Forms Inner Tab
-
Displays all documents associated with the event in a table format, including both agency-generated documents (invoices, contracts, proposals, questionnaires, surveys) and client-uploaded files.
-
Table columns:
- Name: File name with file type icon (color-coded by document type) + event name label below the filename
- Type: Document type label (e.g., "Invoice", "Survey", "Doc")
- Created: Creation date and time (format: "DD Mon YYYY, HH:MM AM/PM")
- Added By: User avatar + name + role label (e.g., "Client", "Agency")
-
The "Name" column header includes a sort arrow for alphabetical sorting (ascending/descending toggle).
-
The "Latest" sort dropdown at the top-right sorts by creation date. Options: "Latest" (newest first, default), "Oldest" (earliest first).
-
Pagination displays below the table: "Rows per page" dropdown (options: 10, 25, 50; default: 25) + record counter (e.g., "6-10 of 11") + previous/next arrow buttons.
-
Agency-generated documents are view/download only for clients — no delete option.
-
Client-uploaded documents show a three-dot menu with "Delete" option (visible only to the client who uploaded).
4.3 Uploaded Files Inner Tab
-
Displays only files uploaded by the client for this event.
-
Uses the same table structure, columns, sorting, and pagination as the "Documents & Forms" tab.
-
Each file shows the client's name and "Client" role label in the "Added By" column.
-
Three-dot menu with "Delete" option is available on all files (since all are client-owned).
4.4 File Upload Flow
-
Clicking the green "+" icon opens the "Add Local File/Documents" upload modal.
-
The modal contains:
- Title: "Add Local File/Documents"
- Subtitle: "Upload your document"
- Drag-and-drop zone with upload icon and "Upload File" text
- File size limit note: "Max size of 15 MB"
- "Cancel" button (closes modal without action) and "Upload File" button (yellow, initiates upload)
-
Supported file formats: PDF, DOC, DOCX, XLS, XLSX only.
-
Maximum file size: 15 MB per file.
-
After successful upload, the file appears in both the "Documents & Forms" tab and the "Uploaded Files" tab immediately without page refresh.
-
The system sends a notification to the agency team about the new client upload.
-
Duplicate filename handling: If a file with the same name already exists, the system auto-renames the new file by appending an incrementing number suffix (e.g., "Photography(1)", "Photography(2)").
4.5 File Deletion
-
Clients can only delete files they have uploaded. Agency-uploaded documents cannot be deleted by clients.
-
Clicking delete triggers a confirmation dialog: "Are you sure you want to delete this file?" with "Cancel" and "Delete" buttons.
-
Deletion is permanent. The file is removed from both the "Documents & Forms" and "Uploaded Files" tabs.
-
After deletion, a success toast displays: **"File deleted successfully."
**
4.6 Right Sidebar (Event-Level Overview Widget)
The right sidebar displays alongside the Files/Documents content and persists across all event sub-tabs. It contains:
-
Overview Metric Cards: Four cards showing Meetings count, Upcoming Payments count, Received Deliverables count, and Pending Deliverables count.
-
Deliverables Section: Lists deliverables for the event with status and delivery links.
-
Upcoming Meetings Section: Lists upcoming meetings with title, date/time, and participant avatars.
-
Payment Section: Displays payment items with due dates and status badges.
Note: The right sidebar is shared across all event sub-tabs.
4.7 Data Source and Synchronization
-
Agency-generated documents (invoices, contracts, proposals, questionnaires) are automatically added to the event's Files/Documents tab when created by the agency in the agency portal.
-
Client-uploaded files appear immediately after upload without requiring page refresh.
-
Agency-side additions/removals are reflected in the client portal after a manual page refresh.
-
All files uploaded by the client are shared with the agency and appear in the agency portal's project files.
4.8 Empty State
- When no documents exist for the event (no agency documents and no client uploads), the system displays an illustration with the message: **"No documents yet."
** - The green "+" upload icon remains visible for clients to upload the first file.
5. Field Details & Validations
5.1 Document Table Fields
Field Name
Field Type
Validation Rules
Document Name
Text Display
Maximum 200 characters. Displays file type icon (color-coded). Event name label displayed below
Document Type
Text Label
Values: "Invoice", "Survey", "Doc", "Contract", "Proposal", etc.
Created Date
DateTime Display
Format: "DD Mon YYYY, HH:MM AM/PM"
Added By
Text + Avatar
User name + role label ("Client" or agency user name)
Sort (Header)
Dropdown
Default: "Latest." Options: "Latest", "Oldest"
Rows Per Page
Dropdown
Default: 25. Options: 10, 25, 50
Name Sort Arrow
Toggle
Alphabetical ascending/descending
5.2 Upload Modal Fields
Field Name
Field Type
Validation Rules
Upload Zone
Drag-and-Drop / File Picker
Accepts PDF, DOC, DOCX, XLS, XLSX only. Maximum file size: 15 MB
Cancel Button
Button
Closes modal without action
Upload File Button
Button
Yellow. Initiates upload. Disabled until a valid file is selected
6. Success Message Handling
Operation
Success Message
Trigger Condition
Post-Success Action
Page Load
None (Silent)
Successful data retrieval
Display document table
File Uploaded
"File uploaded successfully"
Successful upload
File appears in both tabs
File Deleted
"File deleted successfully"
Confirmed deletion
File removed from both tabs
File Downloaded
"Download started"
Click download
Browser handles download
7. Error Message Handling
Error Scenario
Error Message
Trigger Condition
User Action Required
Documents Load Failure
"Unable to load documents. Please try again."
API timeout or error
Refresh page
File Upload Failure
"Unable to upload file. Please try again."
Upload server error
Retry upload
File Size Exceeded
"File size exceeds the 15 MB limit."
File larger than 15 MB selected
Select a smaller file
Unsupported File Type
"File type not supported. Please upload PDF, DOC, DOCX, XLS, or XLSX."
Invalid file format
Select a supported file
File Delete Failure
"Unable to delete file. Please try again."
Server error during deletion
Retry deletion
Download Failed
"Unable to download. Please try again."
File not accessible
Retry download
Document Unavailable
"Document unavailable"
File corrupted or deleted from server
Displayed inline; download button hidden for that file
Network Error
"Please check your internet connection."
No connectivity
Restore connection and refresh
Session Expired
"Your session has expired. Please log in again."
Invalid/expired session
Re-authenticate
General Error
"Something went wrong."
Unexpected server error
Retry or refresh
8. Edge Cases
Scenario
Expected Behavior
Fallback Action
No documents for the event
Display illustration + "No documents yet." Upload button remains visible
Client can upload the first file
Duplicate filename upload
System auto-renames with incrementing suffix: "Photography(1)", "Photography(2)"
Original file unchanged
Very long document name
Truncate with ellipsis in the table
Full name on hover tooltip
Agency adds document after client last visited
New document appears after page refresh
Manual page refresh required
Client deletes file then refreshes
File remains deleted; not recoverable
Permanent deletion
File corrupted or deleted from server
Display "Document unavailable" inline; hide download button
Other documents remain functional
Large number of documents
Pagination handles display (Rows per page: 10/25/50)
Navigate pages
Client uploads in "Documents & Forms" view
File appears in both "Documents & Forms" and "Uploaded Files" tabs
Single upload, dual visibility
Archived/completed project
Files/Documents tab visible in read-only mode; upload and delete disabled
View and download only
Client removed from project
Loses access to Files/Documents entirely
Uploaded files remain visible to agency
9. Acceptance Criteria
-
The Files/Documents tab must display "Documents & Forms" and "Uploaded Files" as inner tabs with "Documents & Forms" as default.
-
All documents must display in a table with Name (with icon + event label), Type, Created, and Added By columns.
-
File uploads must support PDF, DOC, DOCX, XLS, and XLSX formats exclusively with a 15 MB maximum file size.
-
Duplicate filenames must be auto-renamed with incrementing suffix (e.g., "Photography(1)").
-
Clients must be able to delete only their own uploaded files; agency documents must be view/download only.
-
Delete must require confirmation dialog before execution.
-
The upload modal must display drag-and-drop zone with max size note and Cancel/Upload File buttons.
-
Pagination must display with Rows per page dropdown (10/25/50) and record counter.
-
Sorting must work by Latest/Oldest (date) and alphabetical (Name column).
-
Documents must be scoped to the specific event only.
-
Empty state must display "No documents yet" with illustration when no documents exist.
-
The page must load within 3 seconds under normal network conditions.
-
The interface must be responsive on devices ≥320px width.
10. Dependencies
Dependency
Type
Description
Fallback Behavior
File Storage Service
Internal
Stores and retrieves uploaded files
Display upload unavailable message
Document Management System
Internal
Manages agency-generated documents (invoices, contracts, proposals)
Show error message
Notification Service
Internal
Alerts agency of client uploads
Silent failure, log error
Authentication Service
Internal
Validates user permissions
Redirect to login
Event Management Module
Internal
Determines event-scoped file associations
Cannot display event-specific documents
Brand Management Module
Internal
Provides custom branding
Default theme applied
11. References
-
Figma Design Link: Click Here
-
Client Portal - Overview Tabs FRD: Refer for the Overview-level Files/Documents sub-tab (project-scoped, aggregates across all events).
-
Client Portal - Events - Deliverables Tab FRD: Refer for the separate Deliverables sub-tab (previously part of this FRD, now standalone).
✅ Events - Notes Tab
Functional Requirements Document - Client Portal: Events - Notes Tab
1. Module Overview
Module Name: Client Portal - Events - Notes Tab
Purpose: The Notes tab within each event enables clients to view, create, edit, and delete notes specific to that event. Notes display in a card grid layout with search and sort functionality. Clients can create public notes (visible to everyone) or private notes (visible only to themselves), and can view agency-created public notes in read-only mode.
Business Goals: To provide a transparent, event-specific communication channel between clients and agencies, maintain a documented history of client feedback and requests per event, and reduce email dependency by centralizing event-related discussions within the portal.
2. User Roles & Permissions
Role
Access Level
Permissions
Client (Primary Contact)
Full Access
View all public notes and own private notes, create new notes (public/private), edit own notes, delete own notes, search and sort notes
Client (Additional Contacts)
Full Access
View all public notes and own private notes, create new notes (public/private), edit own notes, delete own notes, search and sort notes
Client (View-Only)
Read-Only Access
View public notes only; cannot create, edit, or delete
Guest/Non-authenticated Users
No Access
Cannot access notes section
3. User Flow
3.1 Viewing Notes
3.1.1 The client navigates to a specific event tab (e.g., "Rehearsal Dinner", "Wedding") from the main project navigation.
3.1.2 The client clicks on the "Notes" sub-tab within the event sub-navigation (Services | Deliverables | Files/Documents | Notes | Info).
3.1.3 The system loads the Notes page with the left/main content area showing notes in a card grid and the right sidebar showing the persistent event-level Overview widget.
3.1.4 The client views notes displayed as cards in a 2-column grid, each showing the event name, headline, content preview, participant avatars, and timestamp.
3.1.5 The client uses the search bar to filter notes by title or keywords.
3.1.6 The client uses the "Newest" sort dropdown to switch between Newest (default) and Oldest ordering.
3.1.7 The client clicks on a note card to view the full Note Detail Preview modal.
3.1.8 The client identifies their own notes by the three-dot menu on the card, and agency notes by the absence of the menu.
3.2 Creating a Note
3.2.1 The client clicks the green "+" icon next to the "Notes" header.
3.2.2 The system displays the "Create new note" modal with the Choose Event field pre-filled and locked to the current event.
3.2.3 The client enters a headline and writes note content in the rich text editor.
3.2.4 The client selects the visibility: Public or Private.
3.2.5 The client clicks "Create Note" to save.
3.2.6 The note card appears in the grid immediately without page refresh.
3.2.7 For public notes, the system sends a notification to the agency team.
3.3 Editing a Note
3.3.1 The client clicks the three-dot menu on their own note card and selects "Edit."
3.3.2 The system displays the "Edit Note" modal pre-populated with existing content.
3.3.3 The client modifies the headline, content, or visibility and clicks "Save."
3.3.4 The note card updates in the grid with an "Edited on [date]" indicator in the detail preview.
3.4 Deleting a Note
3.4.1 The client clicks the three-dot menu on their own note card and selects "Delete."
3.4.2 The system displays a confirmation dialog: "Are you sure you want to delete this note? This action cannot be undone."
3.4.3 The client confirms, and the note is permanently removed from the grid.
3.5 Empty State
3.5.1 The client navigates to the Notes tab for an event with no notes.
3.5.2 The system displays an illustration with the message: "No notes yet."
3.5.3 The green "+" icon remains visible for creating the first note.
4. Functional Logic
4.1 Page Layout and Structure
-
The Notes tab is a sub-tab under each event tab, positioned fourth in the event sub-navigation: Services | Deliverables | Files/Documents | Notes | Info.
-
The page is divided into two areas: the left/main content area containing the notes section, and the right sidebar containing the persistent event-level Overview widget.
-
The section header displays "Notes" with a green "+" icon for creating new notes.
-
Below the header: a search bar (placeholder: "Search by title or keywords") and a "Newest" sort dropdown on the right.
-
The Notes tab loads only notes associated with the specific event — notes from other events within the project are not shown. The Overview > Notes tab shows notes from all events.
4.2 Note Card Display
Each note displays as a card in the grid with the following elements:
-
Event Indicator: Colored dot + event name (e.g., "● Rehearsal Dinner"). Since this is an event-scoped tab, all cards show the same event name.
-
Headline: Note title displayed in bold text.
-
Content Preview: Truncated note content showing approximately 2-3 lines. Full content is visible in the Note Detail Preview modal.
-
Participant Avatars: Small avatar circles at the bottom-left of the card showing the note's visible-to participants.
-
Timestamp: Date and time of creation displayed at the bottom-right (format: "July 19, 2024 12:33").
-
Three-dot Menu (own notes only): Displayed on notes created by the client. Options: Edit, Delete. Not displayed on agency-created notes.
-
Agency-created public notes use the same card design — they are distinguished only by the absence of the three-dot menu.
4.3 Note Visibility Model
-
Clients can create two types of notes:
- Public Notes: Visible to the client, all other project clients, and all project team members (agency users). Agency-created public notes are also visible to the client.
- Private Notes: Visible only to the client. Agency team members cannot see private notes.
-
The visibility is set during note creation and can be changed during editing.
-
Agency-created public notes are view-only for clients — no edit or delete options.
-
Client-created notes (both public and private) can be edited and deleted only by the client
4.4 Create Note Modal
Clicking the green "+" icon opens the "Create new note" modal with the following fields:
-
Choose Event: Dropdown field. Pre-filled and locked to the current event (e.g., "● Rehearsal Dinner" with colored dot). Since the client is already inside a specific event tab, the event is auto-selected and cannot be changed. This differs from the Overview > Notes tab where event selection is open.
-
Headline: Text input field (required). Placeholder: "Add note's headline." Maximum 200 characters.
-
Note: Rich text editor with formatting toolbar:
- Undo / Redo
- Heading dropdown (Heading 1, etc.)
- Bold, Italic, Underline, Strikethrough
- Emoji picker
- Link insertion
- Bullet list, Numbered list
- Indent / Outdent
- Placeholder: "Write something awesome..."
- Maximum 5,000 characters
- Supports inline images
-
Visibility toggle: Public / Private selection (determines who can see the note). Default: Public.
-
Action buttons: "Cancel" (closes modal without saving) | "Create Note" (yellow, saves the note).
-
The "Create Note" button is disabled until the headline field is filled.
4.5 Edit Note Modal
Clicking "Edit" from the three-dot menu or the Note Detail Preview opens the "Edit Note" modal:
-
Same structure as the Create Note modal, pre-populated with existing values.
-
Choose Event: Shows the current event, locked and non-editable (since this is the event-level tab, the event association cannot be changed from here. To move a note to a different event, the client must use the Overview > Notes tab).
-
Headline: Pre-populated with the current headline.
-
Note: Pre-populated with the current content in the rich text editor. Supports inline images.
-
Visibility: Pre-populated with the current visibility setting (Public/Private). Can be changed.
-
Action buttons: "Cancel" (discards changes) | "Save" (yellow, saves updates).
-
After saving, the note displays an "Edited on [date]" indicator in the Note Detail Preview metadata.
4.6 Note Detail Preview
Clicking on a note card opens a full detail preview modal with:
-
Title bar: Note headline in large text + close (X) button.
-
**Metadata row 1:
**- PROJECT: Project name (e.g., "Jadon & Monika Wedding")
- EVENT: Event name with colored dot (e.g., "● Rehearsal Dinner")
- VISIBLE TO: Participant avatars — hover reveals full list with names (e.g., "Ian Robel (You)" + team member names)
-
**Metadata row 2:
**- CREATED ON: Date and time (format: "July 23, 2025 · 23:12")
- CREATED BY: Avatar + name (shows "You" if the client created it, otherwise the agency member's name)
- EDITED ON: Date and time of last edit (format: "July 28, 2025 · 23:12"). Hidden if never edited.
-
Note content: Full rich text content with formatting, links, and inline images.
-
**Action buttons (client's own notes only):
**- Delete (red button) — triggers the deletion confirmation dialog
- Edit (yellow button) — opens the Edit Note modal
-
Notes created by others: Same preview layout but without Delete and Edit buttons. The "CREATED BY" field shows the agency team member's name and avatar instead of "You."
4.7 Note Search
-
The search bar filters notes by headline text or content keywords.
-
Results update in real-time as the client types.
-
Search has no character limit on input.
-
If no notes match the search, display: **"No notes found matching your search."
** -
Clearing the search field restores the full notes list.
4.8 Note Sorting
-
The "Newest" sort dropdown offers two options: "Newest" (default — newest notes first) and "Oldest" (earliest notes first).
-
Sorting applies to the entire notes list including search-filtered results.
4.9 Note Deletion
-
Clicking "Delete" from the three-dot menu or the Note Detail Preview triggers a confirmation dialog: "Are you sure you want to delete this note? This action cannot be undone."
-
Confirmed deletion permanently removes the note.
-
For public notes: deletion removes the note from both the client and agency views.
-
For private notes: deletion removes the note only from the client's view (since no one else could see it).
-
After deletion, the note card is removed from the grid and a success toast displays: **"Note deleted successfully."
**
4.10 "Show More" Pagination
-
If the number of notes exceeds the initial display limit, a "Show More (+X Notes)" link appears at the bottom of the grid.
-
Clicking "Show More" loads additional notes and appends them to the grid.
-
The link updates its count after each load until all notes are displayed.
4.11 Right Sidebar (Event-Level Overview Widget)
The right sidebar displays alongside the Notes content and persists across all event sub-tabs. It contains:
-
Overview Metric Cards: Four cards showing Meetings count, Upcoming Payments count, Received Deliverables count, and Pending Deliverables count.
-
Deliverables Section: Lists deliverables for the event with status and delivery links.
-
Upcoming Meetings Section: Lists upcoming meetings.
-
Payment Section: Displays payment items with status badges.
Note: The right sidebar is shared across all event sub-tabs.
4.12 Data Synchronization
-
Client-initiated actions (note creation, editing, deletion) reflect immediately without page refresh.
-
Agency-created notes appear in the event's Notes tab after a manual page refresh.
-
Notes created from the Overview > Notes tab for this event also appear here after a page refresh.
4.13 Empty State
- When no notes exist for the event, the system displays an illustration with the message: **"No notes yet."
** - The green "+" icon remains visible for creating the first note.
5. Field Details & Validations
5.1 Note Card Fields
Field Name
Field Type
Validation Rules
Event Indicator
Text Display with Colored Dot
Event name with colored dot matching event tab color. Read-only
Headline
Text Display (Bold)
Note title. Maximum 200 characters. Displayed on the card
Content Preview
Text Display
Truncated to approximately 2-3 lines. Full content in detail modal
Participant Avatars
Avatar List
Shows visible-to participants. Bottom-left of card
Timestamp
DateTime Display
Format: "Month DD, YYYY HH:MM". Bottom-right of card
Three-dot Menu
Icon Menu
Options: Edit, Delete. Displayed only on client's own notes
5.2 Create/Edit Note Modal Fields
Field Name
Field Type
Validation Rules
Choose Event
Dropdown (Locked)
Pre-filled with current event. Non-editable in event-level Notes tab
Headline
Text Input (Required)
Maximum 200 characters. Placeholder: "Add note's headline"
Note Content
Rich Text Editor
Maximum 5,000 characters. Supports: Bold, Italic, Underline, Strikethrough, Headings, Emoji, Links, Lists, Inline Images
Visibility
Toggle/Selection
Values: "Public", "Private". Default: Public
Cancel Button
Button
Closes modal without saving
Create Note / Save Button
Button (Yellow)
Disabled until headline is filled. Creates or updates the note
5.3 Note Detail Preview Fields
Field Name
Field Type
Validation Rules
Headline (Title)
Text Display (Large)
Note headline
Project Name
Text Display
Project name. Read-only
Event Name
Text Display with Colored Dot
Event name with dot. Read-only
Visible To
Avatar List
Participant avatars. Hover shows full name list
Created On
DateTime Display
Format: "Month DD, YYYY · HH:MM"
Created By
Text + Avatar
Shows "You" for own notes; shows name for others'
Edited On
DateTime Display
Format: "Month DD, YYYY · HH:MM". Hidden if never edited
Note Content (Full)
Rich Text Display
Full content with formatting, links, images
Delete Button
Button (Red)
Own notes only. Triggers confirmation dialog
Edit Button
Button (Yellow)
Own notes only. Opens Edit Note modal
5.4 Search and Sort Fields
Field Name
Field Type
Validation Rules
Search
Text Input
No character limit. Placeholder: "Search by title or keywords"
Sort
Dropdown
Default: "Newest." Options: "Newest", "Oldest"
6. Success Message Handling
Operation
Success Message
Trigger Condition
Post-Success Action
Page Load
None (Silent)
Successful data retrieval
Display notes grid
Note Created
"Note created successfully"
Successful note save
Note card appears in grid
Note Updated
"Note updated successfully"
Successful note edit
Note card updates in grid
Note Deleted
"Note deleted successfully"
Confirmed deletion
Note card removed from grid
Search Results
None (Silent)
Search executed
Display filtered results
7. Error Message Handling
Error Scenario
Error Message
Trigger Condition
User Action Required
Notes Load Failure
"Unable to load notes. Please try again."
API timeout or error
Refresh page
Note Save Failed
"Unable to save note. Please try again."
Server error during save
Retry save
Note Delete Failed
"Unable to delete note. Please try again."
Server error during deletion
Retry deletion
Empty Headline
"Please enter a headline."
Attempting to save with empty headline
Add headline text
Character Limit Exceeded
"Note exceeds 5,000 character limit."
Content exceeds 5,000 chars
Reduce content
Search Error
"Search failed. Please try again."
Search service error
Retry search
Permission Denied
"You don't have permission to perform this action."
Unauthorized edit/delete attempt
Contact admin
Network Error
"Please check your internet connection."
No connectivity
Restore connection and refresh
Session Expired
"Your session has expired. Please log in again."
Invalid/expired session
Re-authenticate
General Error
"Something went wrong."
Unexpected server error
Retry or refresh
8. Edge Cases
Scenario
Expected Behavior
Fallback Action
No notes for the event
Display illustration + "No notes yet." Green "+" icon remains visible
Client can create the first note
Search returns no results
Display: "No notes found matching your search."
Clear search to restore full list
Very long headline
Input blocked at 200 characters
Character counter shows remaining
Very long note content
Input continues until 5,000 characters; error shown if exceeded
Reduce content to save
Simultaneous edits from two browser tabs
Last save wins
No conflict resolution
Agency creates note for this event while client is viewing
New note appears after manual page refresh
Page refresh required
Client creates note from Overview > Notes tab for this event
Note appears in this event's Notes tab after page refresh
Page refresh required
Client tries to edit agency note
No Edit/Delete options available — three-dot menu not shown
View-only access to agency notes
Emoji in notes
Fully supported and displayed correctly
UTF-8 encoding
Private note search by other users
Private notes never appear in other users' search results
Privacy maintained
Archived/completed project
Notes tab visible in read-only mode; create, edit, and delete actions disabled; green "+" icon hidden
View-only access
All notes are private
Only the client sees them; other agency see empty state
"No notes yet" for others
9. Acceptance Criteria
-
Notes must display in a card grid layout (2 columns on desktop) with event indicator, headline, content preview, avatars, and timestamp.
-
Notes must be event-scoped — only notes for the current event are displayed.
-
The green "+" icon must open the Create Note modal with the Choose Event field pre-filled and locked to the current event.
-
Headline is required (max 200 chars) and note content supports rich text formatting (max 5,000 chars) with inline images.
-
Notes must support Public and Private visibility. Private notes are visible only to the creating client.
-
Client-created notes must show a three-dot menu with Edit and Delete options. Agency notes must have no menu (view-only).
-
The Note Detail Preview must show full metadata: Project, Event, Visible To, Created On/By, Edited On.
-
The "Edited on" indicator must appear in the detail preview after a note is edited.
-
Search must filter notes by headline and content keywords in real-time with no input character limit.
-
Sort must offer Newest (default) and Oldest options.
-
"Show More (+X Notes)" must load additional notes when the list exceeds the initial display.
-
Delete must require a confirmation dialog before permanent removal.
-
Empty state must display "No notes yet" with illustration when no notes exist.
10. Dependencies
Dependency
Type
Description
Fallback Behavior
Notes Module
Internal
Stores and retrieves note data with visibility model
Display error or empty state
Event Management Module
Internal
Determines event-scoped note associations
Cannot display event-specific notes
Authentication Service
Internal
Validates client session and permissions
Redirect to login
Notification Service
Internal
Alerts agency of new public client notes
Silent failure, log error
Text Sanitization Library
Internal
Prevents XSS attacks in note content
Reject unsafe content
Search Service
Internal
Provides note search capability
Disable search; show all notes
Brand Management Module
Internal
Provides custom branding and event tab colors
Default theme applied
11. References
-
Client Portal - Overview Tabs FRD (Section 4.7): Refer for the Overview-level Notes sub-tab which uses the same design but is project-scoped (all events) and has an unlocked Choose Event dropdown.
-
Figma Design Link: Click Here
Events - info tab
Functional Requirements Document - Client Portal: Events - Info Tab
1. Module Overview
Module Name: Client Portal - Events - Info Tab
Purpose: The Info tab within each event provides a read-only summary of essential event details including the event name, start and end dates/times, primary venue location, and order/package information with included items and a la carte selections for the specific event.
Business Goals: To centralize critical event logistics in one accessible location, reduce client inquiries about basic event details, and ensure clients have a self-service reference for their event's date, venue, and contracted package information that automatically reflects any changes made by the agency.
2. User Roles & Permissions
Role
Access Level
Permissions
Client (Primary Contact)
Read-Only Access
View all event info, venue, and order details; cannot edit any information
Client (Additional Contacts)
Read-Only Access
View all event info, venue, and order details; cannot edit any information
Guest/Non-authenticated Users
No Access
Cannot access event information
Important: All data on the Info tab is read-only for clients. Clients cannot modify event dates, venue, or order details. Any changes must be requested through the agency and are reflected in the client portal after a page refresh.
3. User Flow
3.1 The client navigates to a specific event tab (e.g., "Rehearsal Dinner", "Wedding") from the main project navigation.
3.2 The client clicks on the "Info" sub-tab within the event sub-navigation (Services | Deliverables | Files/Documents | Notes | Info).
3.3 The system loads the Info page with the left/main content area showing Event Info and Order Info sections, and the right sidebar showing the persistent Overview widget.
3.4 The client views the "Event Info" section header with the event name displayed below it (e.g., "Rehearsal Dinner" with a colored dot indicator).
3.5 The client checks the "Start Date & Time" field showing the event's start date and time in a boxed date field with a calendar icon.
3.6 For multi-day events, the client also views the "End Date & Time" field displayed side by side with the start date.
3.7 The client views the "Primary Venue" field showing the venue address in a boxed text field.
3.8 The client scrolls to the "Order Info" section to view the contracted package details.
3.9 The client views the Package Name (e.g., "Photo/Video Silver").
3.10 The client reviews the "Items Included for This Event" list showing individual deliverable items (e.g., "10 hours of photoshooting", "Basic Retouch", "1 Photographer").
3.11 The client views the "A La Carte Items Included for This Event" section showing additional items as tag/chip elements (e.g., "Instagram Video", "Drone Footage", "Portrait Session").
4. Functional Logic
4.1 Page Layout and Structure
-
The Info tab is a sub-tab under each event tab, positioned last in the event sub-navigation: Services | Deliverables | Files/Documents | Notes | Info.
-
The page is divided into two areas: the left/main content area containing the Event Info and Order Info sections inside a bordered card container, and the right sidebar containing the persistent event-level Overview widget.
-
The right sidebar displays across all event sub-tabs and includes: Overview metric cards (Meetings, Upcoming Payments, Received Deliverables, Pending Deliverables), and a Deliverables section.
-
All content on this tab is read-only for clients. There are no edit, add, or delete actions available.
4.2 Event Info Section
-
The section header displays as "Event Info" at the top of the content card.
-
Below the header, the event name displays with a colored dot indicator (matching the event's color in the project tab navigation) followed by the event name text (e.g., "● Rehearsal Dinner").
-
Start Date & Time displays below the event name as a boxed date field with a calendar icon on the left. The format is: DD/MM/YYYY HH:MM AM/PM (e.g., "19/12/2024 12:00 AM").
-
End Date & Time conditionally displays based on event duration (Refer Section 4.3 — Conditional Date & Time Display Logic).
-
Primary Venue displays below the date fields with the label "Primary Venue" and the full venue address in a boxed text field (e.g., "Treasure St. 148, Wedding Hall, 124 34").
4.3 Conditional Date & Time Display Logic
The system dynamically adjusts the date and time fields based on event duration:
-
Single-Date Event: When the start date and end date fall on the same calendar date (or the end date is null/not set), the system displays only "Start Date & Time" spanning the full width of the content area. The "End Date & Time" field is completely hidden from the layout — no placeholder, label, or empty field is shown.
-
Multi-Date Event: When the start date and end date differ, both "Start Date & Time" and "End Date & Time" display side by side in equal-width columns.
-
Both fields use the same format: DD/MM/YYYY HH:MM AM/PM.
-
Both fields display with a calendar icon on the left side inside a bordered input-style container (read-only, non-editable).
4.4 Order Info Section
-
The Order Info section displays below the Primary Venue field within the same content card.
-
The section is visible only when the event has an associated order/package. If no order exists for the event, the entire Order Info section is hidden — no placeholder or empty state message is shown for this section.
-
The section header displays as "Order Info" with an information icon (ⓘ). On hover or tap, the icon shows a tooltip: "This shows the package and items assigned to this specific event."
-
Package Name displays the name of the contracted package (e.g., "Photo/Video Silver") below the section header. If no package is assigned and only a la carte items exist, the field displays "Custom / A La Carte." This field is read-only.
-
Items Included for This Event displays below the Package Name with the sub-heading "Items Included for This Event." Each deliverable item from the package renders as a separate row in a read-only, list-style layout (e.g., "10 hours of photoshooting", "Basic Retouch", "1 Photographer"). Items are listed in the order defined by the agency. This sub-section is hidden if no items exist.
-
A La Carte Items Included for This Event displays below the items list with the sub-heading "A La Carte Items Included for This Event." A la carte items render as horizontal wrapping tags/chips (e.g., "Instagram Video", "Drone Footage", "Portrait Session", "Promo Video", "Assistant"). Tags are read-only and non-interactive. This sub-section is hidden if no a la carte items exist.
-
Each event within a project displays only the order items mapped to that specific event. Changes made by the agency are reflected after a page refresh.
4.5 Right Sidebar (Event-Level Overview Widget)
The right sidebar displays alongside the Info content and persists across all event sub-tabs. It contains:
-
Overview Metric Cards: Four cards showing Meetings count, Upcoming Payments count, Received Deliverables count, and Pending Deliverables count.
-
Deliverables Section: Lists deliverables for the event with their status (Pending/Received), expected dates, delivery links (e.g., Google Drive URLs with copy icons), and a "Show More (+X Deliverables)" link when the list is truncated.
Note: The right sidebar is shared across all event sub-tabs and may be documented in a separate shared component FRD.
4.6 Data Source and Synchronization
-
All event info data (event name, dates, venue) is fetched from the agency portal's project details — specifically the event configuration.
-
Order Info data (package name, included items, a la carte items) is sourced from the order/package management system and the event-to-order mapping configured by the agency.
-
Any changes made by the agency (date changes, venue updates, package modifications, item additions/removals) are reflected in the client portal after a manual page refresh.
-
The client portal does not cache event info data independently — each page load fetches the latest available data from the server.
4.7 Empty States
-
No event date set: The Start Date & Time field displays as an empty boxed field or shows a placeholder format. The End Date & Time field follows the conditional logic (hidden for single-date, shown for multi-date).
-
No venue set: The Primary Venue field displays as an empty boxed field or shows placeholder text.
-
No order/package assigned to the event: The entire Order Info section is hidden — no empty state message, no placeholder. Only the Event Info section (dates + venue) displays.
-
Order exists but no package items: Package Name displays; Items Included sub-section is hidden.
-
Order exists but no a la carte items: Package Name and Items Included display; A La Carte sub-section is hidden.
-
Order has only a la carte items (no package): Package Name displays as "Custom / A La Carte"; Items Included sub-section is hidden; A La Carte sub-section displays.
5. Field Details & Validations
5.1 Event Info Fields
Field Name
Field Type
Validation Rules
Event Name
Text Display with Colored Dot
Event name prefixed with a colored dot matching the event tab color. Read-only. Maximum 100 characters
Start Date & Time
DateTime Display (Boxed)
Format: DD/MM/YYYY HH:MM AM/PM. Displayed in a bordered container with calendar icon. Read-only. Allows both future and past dates
End Date & Time
DateTime Display (Boxed, Conditional)
Same format as Start Date & Time. Displayed only when end date differs from start date. Hidden when same date or null. Read-only
Primary Venue
Text Display (Boxed)
Full venue address. Displayed in a bordered container. Read-only. Maximum 500 characters
5.2 Order Info Fields
Field Name
Field Type
Validation Rules
Order Info Header
Section Header with Info Icon
"Order Info" text with ⓘ icon. Tooltip on hover: "This shows the package and items assigned to this specific event."
Package Name
Text Display
Package name from the agency configuration (e.g., "Photo/Video Silver"). Displays "Custom / A La Carte" if no package but a la carte items exist. Read-only. Maximum 200 characters
Items Included for This Event
List Display
Each item renders as a separate row in list format. Read-only. Maximum 200 characters per item. Hidden if no items exist. Items listed in agency-defined order
A La Carte Items Included for This Event
Tag/Chip Display
Horizontal wrapping tags. Read-only and non-interactive. Maximum 100 characters per tag. Hidden if no a la carte items exist
5.3 Right Sidebar Fields
Field Name
Field Type
Validation Rules
Meetings Count
Numeric Display
Integer count of upcoming meetings. Displays "--" if none
Upcoming Payments Count
Numeric Display
Integer count of upcoming payments
Received Deliverables Count
Numeric Display
Integer count of received deliverables
Pending Deliverables Count
Numeric Display
Integer count of pending deliverables
Deliverable Name
Text Display
Name of the deliverable item
Deliverable Status
Status Badge
Values: "Pending" (orange), "Received" (green)
Deliverable Expected Date
Date Display
Format: "Expected by Month DD, YYYY"
Deliverable Delivered Date
Date Display
Format: "Delivered on Month DD, YYYY"
Deliverable Link
URL Display
Google Drive or external URL with copy icon
6. Success Message Handling
Operation
Success Message
Trigger Condition
Post-Success Action
Page Load
None (Silent)
Successful data retrieval
Display Event Info and Order Info
Page Refresh
None (Silent)
Manual browser refresh
Display latest data from agency
7. Error Message Handling
Error Scenario
Error Message
Trigger Condition
User Action Required
Event Info Load Failure
"Unable to load event information. Please try again."
API timeout or server error
Refresh page
Order Info Load Failure
"Unable to load order details. Please try again."
API error when fetching order/package data
Refresh page
Sidebar Load Failure
"Unable to load overview. Please try again."
API timeout for sidebar data
Refresh page
Network Error
"Please check your internet connection."
No network connectivity
Restore connection and refresh
Session Expired
"Your session has expired. Please log in again."
Invalid or expired session token
Re-authenticate
General Error
"Something went wrong."
Unexpected server error
Retry or refresh page
8. Edge Cases
Scenario
Expected Behavior
Fallback Action
Single-date event (same start and end date)
Only "Start Date & Time" displays spanning full width; "End Date & Time" is completely hidden
No visual gap where End Date field would be
Multi-date event
Both "Start Date & Time" and "End Date & Time" display side by side in equal-width columns
Both fields use same format and styling
End date is null/not set
Treated as single-date event; End Date & Time field hidden
Start Date & Time spans full width
No venue set by agency
Primary Venue field displays as empty or with placeholder text
Field container is still visible
No order/package assigned to the event
Entire Order Info section is hidden — no heading, no placeholder
Only Event Info section displays
Only a la carte items, no package
Package Name shows "Custom / A La Carte"; Items Included sub-section hidden; A La Carte tags display
Clear labeling distinguishes the state
Package assigned but no items listed
Package Name displays; Items Included sub-section hidden
Only package name visible
Very long venue address
Address wraps within the boxed container to multiple lines
No truncation — full address always visible
Very long package name
Truncate with ellipsis at available width
Full name visible on hover tooltip
Many a la carte items
Tags wrap to multiple lines horizontally
All tags remain visible
Very long a la carte item name
Tag truncates with ellipsis if exceeding available width
Full name visible on hover tooltip
Agency updates event dates/venue/order
Updated values reflect after client refreshes the page
Manual page refresh required
Agency removes order from event
Order Info section disappears after client refreshes
Only Event Info remains
Client navigates between event tabs
Each event tab shows its own Event Info and Order Info independently
No cross-event data mixing
Archived/completed project
Info tab visible in read-only mode (same as active, since everything is already read-only)
No behavioral change
9. Acceptance Criteria
-
The Event Info section must display the event name with colored dot, Start Date & Time in DD/MM/YYYY HH:MM AM/PM format, and Primary Venue.
-
End Date & Time must display only when the end date differs from the start date; it must be hidden for single-date events or when end date is null.
-
For multi-date events, Start and End Date & Time must display side by side in equal-width columns.
-
All event info data must be read-only; no edit, add, or delete actions available to clients.
-
The Order Info section must display only when the event has an associated order/package; it must be completely hidden otherwise.
-
The Order Info ⓘ icon must show a tooltip on hover: "This shows the package and items assigned to this specific event."
-
Package Name must show the correct package name or "Custom / A La Carte" when applicable.
-
Items Included must render as individual rows in list format, in the agency-defined order.
-
A La Carte Items must render as horizontal wrapping tags/chips, hidden when none exist.
-
Each event must display only the order items mapped to that specific event.
-
Event info data must reflect agency-side changes after a manual page refresh.
-
The right sidebar must display Overview metric cards and Deliverables section.
-
The page must load within 3 seconds under normal network conditions.
-
The interface must be responsive and functional on devices with screen width ≥320px.
10. Dependencies
Dependency
Type
Description
Fallback Behavior
Event Management System
Internal
Provides event name, dates/times, and venue information
Display error message
Order Management System
Internal
Provides package name, included items, and a la carte items mapped to each event
Hide Order Info section
Authentication Service
Internal
Validates client session and project/event access permissions
Redirect to login
Project Management Module
Internal
Determines event association and project context
Cannot display event info
Deliverables Module
Internal
Supplies deliverable data for the right sidebar
Show error in sidebar deliverables section
Brand Management Module
Internal
Provides custom branding and event tab colors
Default theme applied
11. References
-
Figma Design Link: Click Here
-
Client Portal - Events - Service Tab FRD: Refer for the shared event sub-navigation structure and right sidebar details.
-
Client Portal - Overview Side Menu FRD: Refer for the base sidebar structure.
-
Meeting Transcript (Dec 17, 2025): Info tab discussion at timestamp 33:02 ("start, end date and primary venue of this event").
✅ Account Setting
Functional Requirements Document (FRD) - Account Settings Module
1. Module Overview
- Module Name: Account Settings
- Purpose: Allows logged-in clients to view and update their personal information, including profile photo, contact details, address information, password management (creation or change), and payment method management within the client portal.
- Business Goal: Enable clients to maintain accurate and up-to-date personal information and payment methods, ensuring effective communication, personalized service delivery, and seamless payment processing while maintaining data security through password management.
2. User Roles & Permissions
Role
Description
Key Permissions
Client
Logged-in portal user
View and edit own account settings, create/change password, upload profile photo, manage payment methods (add/remove)
3. User Flow
Critical Path: Edit Personal Information
Password Management Flow (Conditional):
Create Password Flow (for users without an existing password):
Change Password Flow (for users with existing password):
Profile Photo Upload Flow:
Payment Method Management Flow:
Add Payment Method Flow:
Remove Payment Method Flow:
4. Functional Logic
4.1 Auto Populated Information
- Full Name, Email Address, and Phone Number: Auto-populated from client management
- Address Fields (Country, State, City): Auto-populated if address was provided during client creation by agency. If the address was not added during client creation, the fields remain empty and can be filled by the client
4.2 Profile Picture
- Default Picture Display: The System displays a default pic with initials (i.e., John Doe - JD) when no profile photo is uploaded
- Upload/Update Profile Photo: Client can upload or update a profile photo by clicking on the “+ Update Photo”. For validations - Click Here
- Profile Photo Sync: When the profile photo is updated, it automatically displays in the agency portal modules defined below
- Client Management list and detailed profile view
- Project/Event listing > users
- Global Search
- Dashboard > Event Management
- Project details
- Event tab
- Activity tab
- Files/Document tab
- Meetings tab > Participants
- Notes tab > Public notes
- Email center
4.3 Personal Information
- Editable Fields: Full Name, Phone Number, Country, State, City
- Read-only Field: Email Address (can only be changed by an Agency user from the Client Management module)
- Impact on Agency System: When the client updates personal information, it automatically updates the client's details in the Client Management of the agency portal and in the following modules
- Client Management list and detailed profile view
- Project/Event listing > users
- Project details
- Event tab
- Activity tab
- Files/Document tab
- Meetings tab > Participants
- Notes tab > Public notes
- Email center
4.4 Change Password
4.4.1 Create Password (For users without an existing password)
- System displays the "Create Password" section for users who have not created a password manually and log in using a magic link
- Validation messages are shown progressively as the user types (one at a time) to guide the user through each requirement
- New passwords must meet all specified requirements (as defined in the validation in field details - Refer - Click Here)
- After successful password creation, the system immediately updates the interface to show the "Change Password" section instead of the "Create Password" section for future access
- Users can continue to use both magic link authentication and email/password authentication even after creating a password
4.4.2 Change Password (For users with existing password)
- System displays the "Change Password" section for users with existing passwords
- Users must enter their current password to change to a new password
- New passwords must meet all specified complexity requirements (as defined in the validation table)
- After a password change, if the user tries to log in using the old password, it will display the error message, and the user will not be able to log in
- Session Behavior After Password Change: The current session (where the password was changed) remains active. Other active sessions on different devices/browsers remain valid until their tokens naturally expire. Only new login attempts using the old password are rejected.
- Field details, Refer - Click Here
4.5 Manage Payment Method
4.5.1 Add a New Payment Method
- The client will use the payment method to pay invoices generated by the agency for any project with which the client is associated
- Users can add both credit/debit cards and bank account payment methods
- All payment method validation and processing is handled through Stripe Integration.
- Payment methods are stored and handled by Stripe, not in the Pixally database.
- Duplicate Detection: Stripe prevents duplicate payment methods. If the client attempts to add a card or bank account that is already saved, Stripe returns an error. The system displays: "This payment method is already saved." No duplicate entry is created.
- The first payment method added automatically becomes the primary method
- Payment Method Display:
- Credit/debit cards display masked card numbers (e.g., ****7458) and card processor name (Visa, Mastercard, etc.)
- Bank accounts display masked account numbers (e.g., ********6021) and full bank name (e.g., "AMERICAN BUSINESS BANK")
4.5.2 Remove Payment Method
- Payment methods cannot be edited once saved - users must remove and re-add to make changes
- Users can remove all payment methods from their accounts except the primary payment method
- If a user wants to delete their primary payment method, they need to first assign another method as primary before deletion
- If the user clicks Remove on the primary method while 2 or more methods exist, the system displays an error: "Cannot remove primary method. Set another method as primary first." The removal is blocked. The user must click "Make Default" on a different payment method, and then retry removing the original primary method.
- If there is only one payment method, it cannot be deleted
4.5.3 Make Default (Primary)
- Users can manually change which payment method is set as primary
- By default, the primary method will be used for all payments
4.5.4 Payment Method Expiration:
- If a payment method expires, it is marked as expired in the system
- The system sends an email notification to the client that the payment method has expired
- Expired payment methods remain in the account until manually removed by the client
5. Field Details & Validations
Personal Information Fields
Field Name
Type
Validation Rules
Profile Photo
File Upload
JPEG, JPG, PNG, WebP format, Max 15 MB, Only from the local system
Full Name
Text
Max 100 characters
Email Address
Read-only field, not editable by the user
Phone Number
Text with Dropdown
Country code dropdown (default US), valid phone format, max 15 digits, numbers only
Street Address
Text
Max 200 characters
Country
Dropdown
Country Dropdown
State
Text
Max 200 characters
City
Text
Max 200 characters
Zip/Postal Code
Text
Allows Alphanumeric
Password Management Fields
For Change Password (existing password users):
Field Name
Type
Validation Rules
Old Password
Password
Current user password verification
New Password
Password
Min 6 - Max 20 chars, 1 uppercase, 1 lowercase, 1 number, 1 special char, no spaces
Repeat New Password
Password
Must match the new password
Eye Icon
Toggle
Eye toggle on click, it will hide/display the password
For Create Password (no existing password users):
Field Name
Type
Validation Rules
Password
Password
6-20 characters, must contain: uppercase, lowercase, number, special character
Repeat Password
Password
Must match the Password field exactly
Create Password Button
Button
Triggers password creation and validation
Eye Icon
Button
- Eye toggle on click, it will display the password
Payment Method Fields
For the Customer Billing Address for both methods
Field Name
Type
Required
Validation Rules
Name
Text
Yes
Max 100 characters
Country
Dropdpwn
Yes
From a predefined list of countries
Address line 1
Text
Yes
Max 200 Characters, No Numbers
Address line 2
Text
No
Max 200 Characters, No Numbers
City
Text
Yes
Max 200 Characters, No Numbers
State
Text
Yes
Max 200 Characters, No Numbers
Zip Code
Input
No
Valid alphanumeric zip format
For Credit/Debit Card:
Field Name
Type
Required
Validation Rules
Card Number
Text
Yes
Handled by Stripe validation
Expiration Date
Text
Yes
MM/YY format, handled by Stripe validation
Security Code (CVC)
Text
Yes
3-4 digits, handled by Stripe validation
Name on Card
Text
Yes
Handled by Stripe validation
For Bank Account:
Field Name
Type
Required
Validation Rules
Bank Selection
Various
Yes
Handled by Stripe validation
On click, it will redirect to the bank details page and be handled by Stripe
5. Success Message Handling
Validation Scenario
Success Message
Personal information updated successfully
"Your account information has been updated successfully."
Password changed successfully
"Your password has been changed successfully."
Password created successfully
"Your password has been created successfully."
Profile photo updated successfully
"Your profile photo has been updated successfully."
Payment method added successfully
"Your payment method has been added successfully."
Payment method removed successfully
"Your payment method has been removed successfully."
6. Error Message Handling
Profile Photo Validation
Field
Validation Scenario
Error Message
Profile Photo
Invalid format
"Please upload a valid JPEG or JPG image."
Profile Photo
File size exceeds 15MB
"Image size cannot exceed 15MB"
Profile Photo
Upload failed
"Failed to upload image. Please try again."
Payment Method
Duplicate card/bank already saved
"This payment method is already saved."
Payment Method
Remove primary while 2+ methods exist
"Cannot remove primary method. Set another method as primary first."
Personal Information Validation
Field
Validation Scenario
Error Message
Full Name
Empty submission
"Please enter the full name."
Full Name
Length > 100 characters
"Full name cannot exceed 100 characters."
Phone Number
Empty submission
"Please enter a phone number."
Phone Number
Invalid format
"Please enter a valid phone number."
Phone Number
Exceeds 15 digits
"Phone number cannot exceed 15 digits."
Street Address
Length > 200 characters
"Street address cannot exceed 200 characters."
State
Length > 200 characters
"State cannot exceed 200 characters"
City
Length > 200 characters
"City cannot exceed 200 characters."
Zip/Postal Code
Invalid format
"Please enter a valid zip/postal code."
Change Password Validation (existing password users)
Field
Validation Scenario
Error Message
Old Password
Empty submission
"Please enter your current password."
Old Password
Incorrect password
"Current password is incorrect."
New Password
Empty submission
"Please enter a new password."
New Password
Length < 6 characters
"Password must be at least 6 characters."
New Password
Length > 20 characters
"Password cannot exceed 20 characters."
New Password
Missing uppercase
"Password must contain at least one uppercase letter."
New Password
Missing lowercase
"Password must contain at least one lowercase letter."
New Password
Missing number
"Password must contain at least one number."
New Password
Missing special character
"Password must contain at least one special character."
New Password
Contains spaces
"Password cannot contain spaces."
Repeat New Password
Passwords don't match
"Passwords do not match."
Create Password Validation (no existing password users)
- Refer - Click Here
Payment Method Validation
Field
Validation Scenario
Error Message
Payment Method Form
Stripe validation errors
Display Stripe-provided error messages for invalid card/bank details
Payment Method
Failed to add payment method
"Failed to add payment method. Please try again."
Payment Method
Failed to remove payment method
"Failed to remove payment method. Please try again."
Remove Confirmation
User cancels removal
Return to the payment methods list without changes
General Error Handling
Field
Validation Scenario
Error Message
General
Server timeout
"Something went wrong."
8. Edge Cases
Scenario
Expected Behavior
User navigates away with unsaved changes
No confirmation dialog - changes are lost
Password change with the same old and new passwords
Display error "New password must be different from current password"
User creates a password and stays in the same session
System immediately updates the interface to show the "Change Password" section instead of the "Create Password"
User with password continues using the magic link
The system allows both authentication methods - magic link and email/password login
Stripe service is unavailable during payment method addition
Display an error message and allow a retry
Client uploads photo while agency updates client name simultaneously
Both changes saved independently. Photo upload does not overwrite name changes and vice versa. If the same field is modified simultaneously by both client and agency, last successful save wins.
Primary payment method expires and no other methods exist
Client can still add new payment methods. The expired method remains as primary until a new method is added and set as primary. Client cannot process payments using the expired method — Stripe rejects the transaction and the system displays: "Payment failed: payment method expired. Please add a new payment method."
9. Test Cases
- Link
10. Acceptance Criteria
- Auto-Populated Info: Full name, email, phone auto-filled from client management; address fields pre-filled if available, else editable by client.
- Profile Picture: Default initials shown if no photo; clients can upload/update; updated photo syncs across agency modules (client list, projects, events, dashboard, notes, emails, etc.).
- Personal Info Edit: Clients can edit name, phone, country, state, city; email read-only (editable only by agency); changes auto-update in agency’s client management.
- Create Password: Shown for magic link users without a password; must meet complexity rules with live validation; once set, section changes to “Change Password”; supports dual login (magic link + email/password).
- Change Password: Existing password required; new password must meet complexity rules; old password invalid after change.
- Add Payment Method: Clients can add cards or bank accounts via Stripe; first method auto-sets as primary; masked details are displayed for stored methods.
- Remove Payment Method: Saved methods cannot be edited; users must remove/re-add; the primary method cannot be removed until another is set. If the user clicks Remove on the primary method while 2+ methods exist, the system displays "Cannot remove primary method. Set another method as primary first." and blocks the deletion.
- Set Primary Method: Clients can change which method is primary; primary is always used for payments by default.
- Expired Payment Method: Expired methods flagged in the system; client notified by email; remain visible until removed manually. If the client attempts to process a payment using an expired primary method, Stripe rejects the transaction and the system displays "Payment failed: payment method expired. Please add a new payment method." The invoice remains unpaid.
11. Dependencies
Module/System
Dependency Type
Impact if Unavailable
User Authentication
Service dependency
Cannot verify user identity, current password, or authentication method
Email Service
Integration dependency
Cannot send email change notifications
File Storage Service
Service dependency
Cannot save or retrieve profile photos
Agency Admin System
Data sync dependency
Email changes are not reflected in the admin system
Location Data Service
Data dependency
Country/State/City dropdowns not populated
Stripe Payment Service
Service dependency
Cannot process payment method additions or validations
Authentication Service
Service dependency
Cannot determine if the user has an existing password or uses magic link authentication
12. References
- Figma Design Link: Click Here
✅ Email Center
Client Portal Email Center Module
Functional Requirement Document
BA & Ideation: Dakshraj Jhala
Reviewed By: KG (Project Manager)
Updated Date: 29 September 2025
Status: Approved
Version 1.0
Email Center (Client Portal)
Functional Requirement Document
1. Module Overview
- Module Name: Email Center (Client Portal)
- Purpose: Enables clients from the client portal to manage project-specific email communications with agency users, providing a centralized view of all email interactions between the client and the selected agency user across their associated projects
- Business Goal: Streamline client agency users' communication management by providing a client portal email center interface that maintains project context while enabling efficient correspondence tracking and management
2. User Roles & Permissions
Role
Description
Key Permissions
Client
Client portal user
- View emails where they are a participant (To/Cc/Bcc)
- Send emails to project team members and clients attached to the same project only
- Reply to email threads
- Attach files from the local system only
- Search, delete, and manage their email threads
3. User Flow
4. Functional Logic
4.1 Projectwise Email Center and access
- The Email Center is always tied to a project.
- Clients can access the emails of a project only if they are invited by the agency owner, an admin, or team members.
- If they are part of multiple projects, they will have a separate Email Center for each project. Clients can view only those email threads in which they are participants, either as a sender or a recipient.
- If multiple clients are attached to a project, each will have individual access to the Email Center through their respective client portal
4.2 Default Emails
- Emails sent from the agency portal within the project (e.g., contracts, proposals, questionnaires, invoices, client portal links, and lead forms) also appear in the Client Portal Email Center for the client as received emails
- Sender Display: System-generated emails display the sender as "[User Name] sent you a [document type]" (e.g., "Mary Jane sent you an Invoice", "Ian Robel sent you a Contract").
- Read Status: System-generated emails arrive as unread with the blue dot indicator, following the same read/unread logic as regular emails.
- Attachments: Any documents attached to system-generated emails (contracts, invoices, proposals) are downloadable by the client directly from the email thread.
4.3 New Email
The client can compose a new email using the “New Email” button, which opens the compose email screen. Most functionalities remain consistent with the Agency side Email center (Refer- Click Here), with the following restrictions applied:
- Recipients: Clients can send emails or reply to emails only to project members (agency users added to the project) and other clients within the same project. They cannot send emails to contractors.
- Not Available for Clients: Ask AI, Smart Fields, Email Templates, and Brand-Specific Signatures are completely removed from the client portal UI — these elements are not rendered at all (not hidden or disabled). The compose screen shows only the basic editor without these features.
- Attachments: Clients can only attach files directly from their local system; Library access is not provided. Multiple files are allowed, with a combined total attachment size limit of 15 MB per email
- Attachment Size Validation: If the total combined attachment size exceeds 15 MB, the system displays an inline error: "Total attachment size exceeds 15 MB. Please remove some files." The Send button is disabled until the client removes attachments to bring the total under the 15 MB limit.
- Subject Line: Maximum 250 characters. If the client exceeds 250 characters, further input is blocked. The subject field is optional — the system shows a warning "Send without subject?" if left empty, but does not block sending.
- Body Content: Maximum 10,000 characters of body content. If the client exceeds 10,000 characters, the system displays an inline error: "Message body exceeds 10,000 character limit." and disables the Send button until reduced.
- Total Message Size Limit: The total message size — including body content, attachments, and email headers combined — must not exceed 15 MB. If the total exceeds 15 MB, the system displays: "Total message size exceeds 15 MB. Please reduce content or remove attachments." and disables the Send button.
4.4 Email Delivery & Reply Logic
- When the client sends the email to project participants (Project members, other clients) they will receive the email in TWO places:
- Their external email inbox (e.g., xyz@gmail.com), which is the email address registered in their profile
- Their portal's project-specific Email Center
- Recipients (Project members, client) can reply from EITHER location:
- Reply from Gmail/external email: automatically routed back to the client portal’s Email Center
- Reply from their portal Email Center: directly appears in the client portal’s Email Center
- Reply All Behavior: When the client uses Reply All, the system pre-fills all original To/Cc recipients from the email being replied to, excluding the client's own email address. T
Relay Email Routing - Click Here
4.5 Email Threading
- Refer - Click Here
4.6 Conversation Display
- Refer - Click Here
4.7 Read/Unread Status Logic
- The read/unread status will be maintained at the user level for both threads and individual emails
- New emails or any new email reply to the thread are marked as unread with a blue dot indicator
- Emails are marked as read when opened in the thread view or single email view
- The project header "Emails" button displays an unread email count badge
4.8 Search Logic
- Refer - Click Here
4.9 Delete Email
- When a client deletes a thread, it is deleted only for that client. The agency and other participants still retain access
- Refer - Click Here
4.10 Additional Logic
- Refer - Click Here
5. Success Message Handling
Validation Scenario
Success Message
Email sent successfully
"Email sent successfully."
Email Deleted successfully
“Email deleted successfully.”
6. Error Message Handling
- Refer - Click Here
7. Edge Case
- Refer - Click Here
- Client removed from project after participating in threads: The removed client loses access to the Email Center entirely. Existing threads remain visible to the agency and other project participants. The removed client's name displays as "[Name] (Not a Member)" in thread participant lists visible to others.
- Agency user removed from project after sending emails: The email thread is no longer visible to the client in the Email Center. If the client had the thread open, it is removed on next page refresh.
8. Acceptance Criteria
- Project-Level Access: Email Center shows only emails from the client's associated project
- Participant-Only Visibility: Clients see emails only where they are the sender or recipient
- Limited Recipient Selection: To/Cc/Bcc fields display a dropdown of project participants only (project team members and other project clients). Free text email entry is not allowed — clients can only select from the dropdown. For Reply All, the system auto-populates from original recipients
- Restricted Features: No access to Smart Fields, Ask AI, Email Templates, Brand Signatures, or the Library Module for attachment.
- Send Validation: Checks for recipients, subject (max 250 chars), body (max 10,000 chars), attachment limits (15 MB per email), and total message size (15 MB including body + attachments + headers). Shows warning for empty subject/body. Disables Send button when any limit is exceeded. Displays success message after sending.
- Dual Delivery: Emails appear in both the portal and the external inbox (Gmail/Outlook)
- Smart Threading: Conversations grouped with full history; newest at top; external non-member replies labeled "(Not a Member)".
- Read Status Tracking: Blue dot for unread; auto-marks read when opened; unread count badge on Email Center button.
- Clear Conversation Display: Shows sender, recipients (+count on hover), subject, preview, and timestamp; project name as header.
- Real-Time Search: Instantly filters by sender, recipient, subject, or content; shows "No conversation found" if empty.
- Personal Delete Only: Deleting removes the conversation for that client only; others keep their copy; requires confirmation.
- Easy Downloads: Download attachments with original filename; error shown if failed.
- Activity Tracking: Newly received emails are logged in the Activity tab and Notification Center with sender info and reply option.
9. Dependencies
Module/System
Dependency Type
Impact if Unavailable
Project Management
Data dependency
Cannot determine project association; Email Center access fails; participant list unavailable
User Authentication
Service dependency
Cannot identify client sender; access restrictions fail; unable to verify project association
Client Portal
Platform dependency
Email Center interface unavailable; navigation and context switching fail
Agency Portal
Integration dependency
Cannot sync emails with agency users; team member information unavailable; cross-portal threading fails
Relay Email Service
External service
External email routing fails; threading breaks; cross-platform integration lost; replies from Gmail/Outlook not routed to the portal
Smart Text Editor
Component dependency
Email composition unavailable; formatting features (bold, italic, lists, etc.) not functional
Notification System
Service dependency
Real-time email notifications unavailable; read/unread status sync fails; notification center integration breaks
File Storage Service
External service
Attachment upload/download fails; file size validation unavailable; file management broken
Database Service
Data dependency
Email storage/retrieval fails; conversation threading breaks; read/unread status not persisted
Agency Settings
Configuration dependency
Timezone formatting unavailable; global settings cannot be applied; date/time display inconsistent
Activity Log System
Integration dependency
Email activity tracking fails; activity section entries not created; activity-based navigation unavailable
Email Delivery Service (SMTP)
External service
Emails cannot be sent to external inboxes; delivery to Gmail/Outlook fails; communication breakdown
Project Participant Management
Data dependency
Cannot retrieve or validate project participants; recipient selection fails; access control breaks
10. Reference
- Figma Link: Click Here
❌ Overview Tabs
Functional Requirements Document - Client Portal: Overview Tabs
1. Module Overview
Module Name: Client Portal - Overview Tabs
Purpose: The Overview tab serves as the primary dashboard for clients, providing a comprehensive summary of their project status, recent activities, key metrics, and quick access to important project elements in a fixed layout structure.
Business Goals: To deliver a centralized view that enables clients to quickly understand project progress, access critical information, and navigate to detailed sections efficiently, reducing the need for agency support and improving client satisfaction through transparent project visibility.
2. User Roles & Permissions
Role
Access Level
Permissions
Client (Primary Contact)
Full View Access
View all overview widgets, access all linked content, view complete activity history, see all project notes
Client (Additional Contacts)
Full View Access
View all overview widgets, access all linked content, view complete activity history, see all project notes
Client (View-Only)
Restricted View
View overview content but cannot access payment information or sensitive documents
Guest/Non-authenticated Users
No Access
Cannot access the overview or any project information
3. User Flow
- Upon successful login to the client portal, the system automatically loads the Overview tab as the default landing page.
- The client sees the project header with the wedding couple's names (e.g., "Jadon & Monika Wedding") and navigation tabs below.
- The system displays the main hero banner with the couple's image and event title prominently featured.
- Below the banner, the client views four key metric cards showing Services count, Deliverables status, Meetings scheduled, and Engagement/Professional metrics.
- The client scrolls down to see the left column containing the Overview section with recent activities and notes from all events.
- On the right side, the client views the Deliverables widget showing document status and download options.
- Further down the right column, the client sees the Payment summary widget displaying total cost, paid amount, and outstanding balance.
- The client can click on any metric card to navigate directly to that specific section for detailed information.
- When clicking "View More" links within widgets, the system navigates to the corresponding detailed view or event tab.
- The client can always return to this overview by clicking the Overview tab in the main navigation.
4. Functional Logic
4.1 Page Load and Data Aggregation
- When the Overview tab loads, the system fetches data from all associated project events and consolidates it for display.
- The system calculates totals for services, deliverables, and meetings across all events within the project.
- Loading occurs asynchronously with progressive rendering, showing the header and structure immediately while data populates.
- If data retrieval takes longer than 3 seconds, the system displays a loading indicator in the affected widget.
- The page maintains its layout structure even when individual widgets are still loading data.
4.2 Hero Banner Section
- The system displays the project hero image as configured by the agency in brand settings.
- The banner includes the project title overlaid on the image with appropriate contrast for readability.
- If no custom image is set, the system displays a default elegant background appropriate for the event type.
- The banner height is fixed at 300px on desktop and scales proportionally on mobile devices.
- Any "Announcement" or important message from the agency appears as a dismissible banner below the hero section.
4.3 Metrics Cards Display
4.3.1 Services Card
- The system counts all active services across all project events and displays the total number.
- Each service type (Photography, Videography, Planning) is counted separately if multiple exist.
- The card displays an appropriate icon and the numeric count prominently.
- Clicking the card navigates to the first event's Services tab.
4.3.2 Deliverables Card
- The system aggregates all deliverables from all events and calculates completion percentage.
- The display shows "X of Y completed" format where X is completed deliverables and Y is total.
- A progress indicator visualizes the completion percentage using a circular or linear progress bar.
- Clicking navigates to the detailed deliverables view.
4.3.3 Meetings Card
- The system displays the count of upcoming meetings scheduled through the portal.
- Past meetings are excluded from this count but available in the meetings history.
- The card shows the next meeting date if one is scheduled.
- Clicking opens the meetings scheduling interface.
4.3.4 Engagement/Professional Card
- The system displays relevant metrics based on the project type (e.g., "2 Engagement Sessions" for wedding projects).
- The count reflects contracted services specific to pre-event or professional sessions.
- The card uses appropriate iconography for the service type.
4.4 Overview Content Section (Left Column)
4.4.1 Recent Activities
- The system displays the 10 most recent activities across all project events in reverse chronological order.
- Each activity entry includes timestamp, activity type icon, and description of the action.
- Activities include: document uploads, payment updates, note additions, service status changes, and meeting schedules.
- The timestamp displays in relative format (e.g., "2 hours ago") for recent activities and absolute dates for older items.
- If no activities exist, the system displays an empty state message: "No recent activities yet."
4.4.2 Notes Aggregation
- The system collects all notes from all event tabs and displays them in the overview.
- Each note shows the event context (e.g., "[Wedding] Note content here").
- Notes display with the author name, timestamp, and content preview (first 200 characters).
- Client-created notes show an edit option, while agency notes are read-only.
- The system displays the 5 most recent notes with a "View All Notes" link to see more.
4.5 Deliverables Widget (Right Column)
- The system lists all deliverables with their current status using visual indicators (icons and colors).
- Each deliverable shows: name, status (Pending/In Progress/Completed), and action buttons.
- Completed deliverables display a download button for direct file access.
- The widget groups deliverables by event if multiple events exist.
- The system shows a progress bar indicating overall deliverables completion percentage.
- Empty state displays: "No deliverables have been added to your project yet."
4.6 Payment Widget
- The system displays the financial summary with clear formatting and currency symbols.
- The widget shows: Total Package Price, Amount Paid, Outstanding Balance, and Next Payment Due.
- Each payment line item is clickable and opens the detailed invoice view.
- The "Make a Payment" button is prominently displayed when balance is outstanding.
- The system calculates and displays the payment progress as a percentage bar.
- If fully paid, the widget displays a green checkmark with "Paid in Full" status.
4.7 Data Refresh Behavior
- The system requires manual page refresh to load updated data from the agency side.
- A subtle "Last updated" timestamp appears at the top of the overview section.
- The browser's refresh button or F5 key triggers a complete data reload.
- During refresh, the system maintains scroll position when possible.
- Cache headers prevent serving stale data older than 5 minutes.
4.8 Empty States and Error Handling
- Each widget implements specific empty state messaging when no data exists.
- Empty states include helpful context about what will appear once data is available.
- If a widget fails to load, it displays an error message with a "Try Again" button.
- The system logs widget loading failures for troubleshooting without exposing technical details to clients.
5. Field Details & Validations
Field Name
Field Type
Validation Rules
Project Title
Text Display
Maximum 100 characters, HTML-escaped
Service Count
Numeric Display
Integer, minimum 0, maximum 999
Deliverables Count
Text Display
Format: "X of Y", where X ≤ Y
Meeting Count
Numeric Display
Integer, minimum 0
Activity Description
Text Display
Maximum 500 characters per entry
Note Preview
Text Display
Maximum 200 characters, truncated with ellipsis
Payment Amount
Currency Display
2 decimal places, with currency symbol
Relative Timestamp
Calculated Text
Format: "X minutes/hours/days ago"
Progress Percentage
Numeric Display
0-100, displayed with % symbol
6. Success Message Handling
Operation
Success Message
Trigger Condition
Post-Success Action
Page Load
None (Silent)
Successful data retrieval
Display populated dashboard
Navigate to Section
None (Silent)
Click on metric card
Load target section
Download Deliverable
"Download started"
Click download button
Initiate file download
Refresh Page
"Content updated"
Manual refresh with new data
Display updated information
7. Error Message Handling
Error Scenario
Error Message
Trigger Condition
User Action Required
Widget Load Failure
"Unable to load [widget name]. Please try again."
API timeout or error
Click "Try Again" button
Deliverable Download Failure
"Unable to download file. Please try again later."
File not accessible
Contact agency or retry
Payment Widget Error
"Unable to load payment information."
Payment service unavailable
Refresh page or contact support
Notes Load Failure
"Notes are temporarily unavailable."
Database connection error
Refresh page
Network Error
"Please check your internet connection."
No network connectivity
Check connection and refresh
8. Edge Cases
Scenario
System Behavior
Fallback Action
No events in project
Display overview with zero counts
Show message: "Your project is being set up"
All deliverables completed
Show 100% completion with green indicator
Display "All deliverables completed!" message
No payment required
Hide payment widget or show "No payment required"
Display confirmation of paid status
Very long note content
Truncate at 200 characters with "Read more" link
Expand inline or navigate to notes section
Over 100 recent activities
Paginate after 10 with "Load more" button
Implement pagination controls
Mixed currency payments
Display in client's primary currency
Show currency conversion note if applicable
Slow network connection
Show skeleton loaders for widgets
Progressive content loading
Multiple simultaneous refreshes
Process first refresh, ignore others
Queue subsequent refresh requests
9. Acceptance Criteria
- The Overview tab must load as the default landing page after client login
- All widgets must appear in the fixed order as specified in the design
- Metric cards must accurately reflect real-time counts from all project events
- The page must load initial structure within 2 seconds on standard broadband
- All clickable elements must have appropriate hover states and cursor changes
- Empty states must display for all widgets when no data exists
- The layout must be responsive and functional on devices ≥320px width
- Payment calculations must be accurate to 2 decimal places
- All timestamps must display in the client's timezone
- Data refresh must complete within 5 seconds under normal conditions
10. Manual Test Cases
Test cases have been created in a separate Excel file. Access the test cases here: TestCases_ClientPortal_Overview_Tabs.xlsx
11. Dependencies
Dependency
Type
Description
Fallback Behavior
Event Management Module
Internal
Provides event data for aggregation
Display error in affected widgets
Payment Processing Module
Internal
Supplies payment and invoice data
Hide payment widget
Document Management System
Internal
Provides deliverables and files
Show "Unable to load files" message
Notes Module
Internal
Supplies notes from all events
Display empty state for notes
Activity Logging Service
Internal
Provides activity feed data
Show "No recent activities"
Meeting Scheduler
Internal
Supplies meeting information
Display zero meetings count
Brand Settings Module
Internal
Provides custom branding/imagery
Use default theme and images
12. References
- Figma Design Files: Figma
No tickets linked — generate test cases directly from this FRD instead.