6. Project Details Module
Pixally CRMProject header & Tabs
Functional Requirements Document (FRD)
Project Details → Project Header
Module Name: Project Details - Project Header
Version: 1.0
Last Updated: January 18, 2026
1. Module Overview
1.1 Module Name
Project Details - Project Header
1.2 Purpose
The Project Header serves as the primary visual and informational banner displayed at the top of every Project Details page. It provides users with essential project information at a glance, including the project name, dates, status, location, brand identity, and navigation to individual events within the project. Additionally, it alerts solo operators about scheduling conflicts and allows customization of the project's visual appearance through cover image management.
1.3 Business Goals
- Provide immediate visual context and brand identity for each project through customizable header images and brand logos.
- Enable quick identification of project status (Active, Archived, Completed) to streamline project management workflows.
- Alert solo operators about potential scheduling conflicts to prevent double-booking and ensure accurate availability management.
- Facilitate seamless navigation between the project overview and individual event details through the horizontal event card row.
- Display critical project metadata (dates, service area, timezone) to support multi-location and multi-timezone event coordination.
- Maintain consistency in project branding across Agency Portal, Client Portal, and Contractor Portal views.
2. User Roles & Permissions
Role
View Project Header
Edit Header Image
Dismiss Warning
Access Email Center
View Event Cards
Agency Owner
✅ Yes
✅ Yes
✅ Yes
✅ Yes
✅ Yes
Admin
✅ Yes
✅ Yes
✅ Yes
✅ Yes
✅ Yes
Project Manager
✅ Yes
✅ Yes
✅ Yes
✅ Yes
✅ Yes
Team Member
✅ Yes
❌ No
✅ Yes
✅ Yes (if assigned)
✅ Yes
Contractor
✅ Yes (Contractor Portal)
❌ No
N/A
❌ No
✅ Yes (assigned events only)
Client
✅ Yes (Client Portal)
❌ No
N/A
❌ No
✅ Yes
2.1 Role-Specific Notes
- The warning banner for scheduling conflicts is only visible to Agency Owner, Admin, and Project Manager roles within the Agency Portal, and only for agencies registered as "Solo Operator" type.
- Contractors viewing the Contractor Portal see the header image and project information but cannot modify any elements.
- Clients viewing the Client Portal see the header image and project information relevant to their engagement but cannot modify any elements.
- The "Emails" button is only visible and accessible within the Agency Portal.
3. User Flow
3.1 The user navigates to the Projects module from the left sidebar menu and clicks on any project from the project listing page.
3.2 The system redirects the user to the Project Details page and loads the Project Header section at the top of the page.
3.3 The system displays the brand logo in the top-left corner of the header image area, which is inherited from the brand configuration associated with the project.
3.4 The system displays the customizable header image as the background of the header section, defaulting to the brand's configured header image if no project-specific image has been set.
3.5 The system displays the project name prominently in the center of the header area.
3.6 The system displays the project date range showing the first event date through the last event date, or displays "TBD" if event dates have not been confirmed.
3.7 The system displays the project status tag (Active, Archived, or Completed) next to or below the project dates.
3.8 The system displays the service area showing the location of the next upcoming event, along with the corresponding timezone.
3.9 If the agency is registered as a "Solo Operator" and any event date within the current project conflicts with event dates in other projects or leads, the system displays a yellow warning banner above the header image with the message "Heads Up! This date has X other lead(s) and Y booked job(s). Check your availability!" along with a "Dismiss" button.
3.10 The user clicks the "Check your availability" link in the warning banner to review conflicting dates.
3.11 The system redirects the user to the Check Availability screen showing all conflicting projects and leads.
3.12 The user clicks the "Dismiss" button on the warning banner to hide it.
3.13 The system hides the warning banner for the current session, but the banner will reappear when the user revisits any project with conflicting dates until explicitly dismissed again.
3.14 The user clicks the camera icon or the header image area to update the cover image.
3.15 The system opens the "Update Cover Image" modal with two tabs: "Library" and "Upload".
3.16 The user selects the "Library" tab to choose from pre-set images provided by the system.
3.17 The system displays a grid of available library images with checkbox selection, showing the currently selected image with a yellow checkbox indicator.
3.18 The user clicks on a library image to select it and then clicks the "Update" button.
3.19 The system updates the header image for the current project only, closes the modal, and displays a success message confirming the change.
3.20 Alternatively, the user selects the "Upload" tab to upload a custom image.
3.21 The system displays a drag-and-drop upload area with the text "Upload file" and indicates the allowed file types (jpeg, jpg, png) and maximum file size (3.1 MB).
3.22 The user drags and drops an image file or clicks the upload area to select a file from their device.
3.23 The system validates the file type and size, uploads the image, and displays it as the selected cover image.
3.24 The user clicks the "Update" button to confirm the new cover image.
3.25 The system saves the uploaded image as the project's header image, closes the modal, and displays a success message.
3.26 The user clicks the "Cancel" button to close the modal without making any changes.
3.27 The system closes the modal and retains the existing header image.
3.28 The user clicks the "Emails" button located in the bottom-right corner of the header area.
3.29 The system redirects the user to the Project's Email Center where all project-related email communications are displayed.
3.30 The user views the horizontal event card row displayed below the header image, showing the "Overview" tab followed by individual event cards for each event within the project.
3.31 The system displays each event card with the event name, event date, team member avatars, stage indicator (e.g., "Inquiry"), and a three-dot menu icon.
3.32 The user scrolls horizontally if there are more event cards than can fit in the visible area.
3.33 The user clicks on the "Overview" tab to view the project-level overview information.
3.34 The system highlights the "Overview" tab as selected and displays the corresponding content area below.
3.35 The user clicks on an individual event card to view event-specific details.
3.36 The system highlights the selected event card, updates the content area to show event-specific information, and displays the Event Stage dropdown in the right sidebar instead of Project Name.
3.37 The user clicks the three-dot menu icon on an event card to access event-specific actions.
3.38 The system displays a dropdown menu with event-related actions (the specific actions are documented in the Event Tabs FRD).
4. Functional Logic
4.1 Warning Banner (Solo Operators Only)
- The warning banner is displayed only for agencies that selected "Solo Operator" (not "Studio") during the agency signup process.
- The system checks all event dates within the current project against event dates in all other projects and leads associated with the same agency.
- The conflict detection is based on actual event dates, not the overall project date range (start to end), ensuring accurate scheduling conflict identification.
- If a project spans multiple days (e.g., December 19-21) but only has events on December 19 and December 21, the system does not flag December 20 as a conflict.
- The warning message dynamically displays the count of conflicting leads and booked jobs, formatted as "This date has X other lead(s) and Y booked job(s)."
- The "Check your availability" link redirects users to a dedicated Check Availability screen where they can review all conflicting projects and leads.
- The "Dismiss" button hides the warning banner for the current session only.
- Once dismissed, the warning banner will not reappear during the same session for any project.
- When the user starts a new session or logs in again, the warning banner will reappear for all projects with conflicting dates until dismissed again.
- The warning banner appears at the top of the Project Details page, above the header image, ensuring maximum visibility.
- The warning banner is not displayed in the Client Portal or Contractor Portal views.
4.2 Brand Logo Display
- The brand logo is displayed in the top-left corner of the header image area.
- The logo is automatically pulled from the brand configuration associated with the project.
- If the project is associated with a brand that has no logo configured, the system displays a default placeholder or the agency name.
- The brand logo cannot be changed from the Project Header; it must be updated in the Brand Settings module.
- The brand logo is visible in both the Agency Portal and the Client/Contractor Portals, maintaining brand consistency across all views.
4.3 Header Image Display and Customization
- The header image serves as the visual background of the header section, creating a branded and personalized project appearance.
- By default, the header image is inherited from the brand configuration associated with the project.
- Users with appropriate permissions can override the brand's default header image with a project-specific image.
- Changes to the header image apply only to the current project and do not affect the brand's default configuration or other projects.
- The header image is visible in the Agency Portal, Client Portal, and Contractor Portal, ensuring consistent branding across all stakeholder views.
- Clicking the camera icon or anywhere on the header image area opens the "Update Cover Image" modal.
4.4 Update Cover Image Modal - Library Tab
- The "Library" tab displays a grid of pre-set images provided by the system.
- Users can select one image at a time by clicking on it.
- The currently selected image displays a yellow checkbox indicator in the top-left corner.
- If a project already has a custom or library-selected image, that image is pre-selected when the modal opens.
- The "Update" button is disabled until the user selects an image different from the current one.
- Clicking "Update" saves the selected library image as the project's header image.
- Clicking "Cancel" closes the modal without saving any changes.
4.5 Update Cover Image Modal - Upload Tab
- The "Upload" tab displays a drag-and-drop upload area with an upload icon and "Upload file" text.
- The system displays the allowed file types and size limit below the upload area: "Allowed *.jpeg, *.jpg, *.png, Max size of 3.1 MB".
- Users can drag and drop an image file directly onto the upload area or click to open a file picker.
- The system validates the uploaded file against the following criteria: file type must be JPEG, JPG, or PNG; file size must not exceed 3.1 MB.
- If the file type is invalid, the system displays an error message and does not accept the file.
- If the file size exceeds 3.1 MB, the system displays an error message indicating the size limit has been exceeded.
- Upon successful upload, the system displays a preview of the uploaded image within the modal.
- The "Update" button becomes enabled once a valid image is uploaded.
- Clicking "Update" saves the uploaded image as the project's header image and closes the modal.
- The uploaded image is stored in the system and associated specifically with the current project.
4.6 Project Name Display
- The project name is displayed prominently in the center of the header area, overlaid on the header image.
- The project name is pulled from the project record and cannot be edited directly from the header.
- To edit the project name, users must access the "Edit Project" functionality (documented in the Project Management Sidebar FRD).
- The project name uses a large, readable font with appropriate contrast against the header image background.
- The project name is visible in all portal views (Agency, Client, Contractor).
4.7 Project Dates Display
- The project date range is displayed below the project name, showing the first event date through the last event date.
- The date format follows the pattern: "Day, Mon DD - Day, Mon DD, YYYY" (e.g., "Wed, Dec 19 - Sat, Dec 21, 2024").
- If all event dates within the project are marked as TBD (To Be Determined), the system displays "TBD" instead of a date range.
- If some events have confirmed dates and others are TBD, the system displays the range of confirmed dates only.
- The project dates automatically update when event dates are modified through the Event management functionality.
4.8 Project Status Tag
- The status tag is displayed near the project dates, indicating the current state of the project.
- The system supports three project statuses: Active (default), Archived, and Completed.
- Active Status: Applied to all projects that are not archived or completed; displayed with a green or neutral tag style.
- Archived Status: Applied when a user manually archives the project or when automation rules trigger archival; displayed with a gray or muted tag style.
- Completed Status: Applied only when ALL events within the project have been marked as completed or archived; displayed with a distinct completed tag style.
- The status can be changed manually by users with appropriate permissions or automatically through workflow automation.
- If a project has three events and only two are completed, the project remains in "Active" status until the third event is also completed or archived.
- Status changes are logged in the Activity feed for audit purposes.
4.9 Service Area and Timezone Display
- The service area displays the location of the next upcoming event within the project.
- If all events have passed, the service area displays the location of the most recent event.
- The service area is formatted as "City, State/Region, Country" (e.g., "Boston, Massachusetts, USA").
- The timezone is displayed adjacent to the service area, formatted with the UTC offset (e.g., "Timezone: GMT-4").
- For multi-state or multi-timezone projects, the service area and timezone adjust based on the next upcoming event.
- The service area and timezone help users understand the geographical context and ensure accurate scheduling.
- The service area is displayed as a read-only field in the header; edits must be made through event management.
4.10 Emails Button
- The "Emails" button is positioned in the bottom-right corner of the header area.
- Clicking the "Emails" button redirects the user to the Project's Email Center module.
- The Email Center displays all email communications related to the current project, including sent and received emails.
- The button may display a notification badge indicating the count of unread or new emails (if applicable, based on Email Center FRD specifications).
- The "Emails" button is only visible in the Agency Portal and is hidden in Client and Contractor Portal views.
4.11 Event Navigation Row
- The event navigation row is displayed as a horizontal scrollable section immediately below the header image.
- The first card in the row is always the "Overview" tab, which displays project-level information across all events.
- Subsequent cards represent individual events within the project, displayed in chronological order based on event dates.
- If an event has a TBD date, it is positioned after events with confirmed dates.
- Each event card displays the following information: event name with a colored dot indicator, event date, team member avatars (showing assigned team members), stage indicator (e.g., "Stage: Inquiry"), and a three-dot menu icon for additional actions.
- The colored dot indicator on each event card corresponds to the event type or category for visual differentiation.
- If there are more event cards than can fit in the visible area, users can scroll horizontally to view additional cards.
- Clicking on the "Overview" tab loads the project-level overview content in the main content area below.
- Clicking on an individual event card loads event-specific content in the main content area and changes the right sidebar to display event-specific fields (e.g., Event Stage instead of Project Name).
- The currently selected tab or card is visually highlighted to indicate the active selection.
- The three-dot menu on each event card provides access to event-specific actions (documented in the Event Tabs FRD).
4.12 Cross-Portal Display Behavior
- In the Agency Portal, all header elements are displayed with full functionality as described above.
- In the Client Portal, the header displays the brand logo, header image, project name, dates, and status, but the "Emails" button, warning banner, and edit capabilities are hidden.
- In the Contractor Portal, the header displays the brand logo, header image, project name, dates, and event cards for events the contractor is assigned to, but the "Emails" button, warning banner, and edit capabilities are hidden.
- Header image changes made in the Agency Portal are immediately reflected in the Client and Contractor Portal views.
4.13 Responsive and UI Behavior
- The header section is designed to be responsive and adapts to different screen sizes.
- On smaller screens, the event navigation row remains horizontally scrollable with touch-friendly swipe gestures.
- The warning banner (if displayed) remains pinned at the top and does not scroll with the page content.
- The header image maintains its aspect ratio and may be cropped to fit different viewport widths while keeping the project name and key information visible.
5. Field Details & Validations
5.1 Header Display Fields
Field Name
Field Type
Source
Editable from Header
Validation Rules
Brand Logo
Image
Brand Configuration
No
Pulled from associated brand; falls back to placeholder if not configured
Header Image
Image
Brand Default or Project Override
Yes (via modal)
Allowed formats: JPEG, JPG, PNG; Max size: 3.1 MB
Project Name
Text
Project Record
No
Display only; edit via Edit Project
Project Dates
Date Range
Calculated from Events
No
Displays first to last event date; shows "TBD" if no dates confirmed
Status Tag
Enum
Project Record
No
Values: Active, Archived, Completed
Service Area
Text
Next Upcoming Event
No
Displays location of next upcoming event
Timezone
Text
Next Upcoming Event
No
Displays timezone with UTC offset
5.2 Update Cover Image Modal - Upload Tab
Field Name
Field Type
Required
Validation Rules
Upload Image
File Input
Yes (to update)
Allowed formats: .jpeg, .jpg, .png; Max size: 3.1 MB
5.3 Event Card Display Fields
Field Name
Field Type
Source
Description
Event Name
Text
Event Record
Displayed with colored dot indicator
Event Date
Date
Event Record
Format: Day, Mon DD, YYYY; or "TBD"
Team Members
Avatar Array
Event Assignments
Displays avatars of assigned team members; shows "+N" for overflow
Stage
Enum
Event Record
Current stage of the event (e.g., Inquiry, Booked, Completed)
Three-Dot Menu
Icon Button
N/A
Opens event action dropdown
5.4 Warning Banner Fields
Field Name
Field Type
Description
Warning Message
Dynamic Text
"Heads Up! This date has X other lead(s) and Y booked job(s)."
Check Availability Link
Hyperlink
Redirects to Check Availability screen
Dismiss Button
Button
Hides banner for current session
6. Success Message Handling
Action
Success Message
Post-Success Behavior
Update Cover Image (Library)
"Cover image updated successfully."
Modal closes; header image refreshes with new image
Update Cover Image (Upload)
"Cover image uploaded and updated successfully."
Modal closes; header image refreshes with uploaded image
Dismiss Warning Banner
No toast message displayed
Banner animates out and is hidden for the session
Navigate to Email Center
No toast message displayed
User is redirected to Email Center module
Select Event Card
No toast message displayed
Content area updates to show event-specific information
7. Error Message Handling
Error Scenario
Error Message
Trigger Condition
User Action Required
Invalid File Type (Upload)
"Invalid file type. Please upload a JPEG, JPG, or PNG image."
User attempts to upload a file that is not JPEG, JPG, or PNG
Select a valid image file
File Size Exceeded (Upload)
"File size exceeds the maximum limit of 3.1 MB. Please upload a smaller image."
User attempts to upload a file larger than 3.1 MB
Compress or select a smaller image file
Upload Failed (Network)
"Failed to upload image. Please check your connection and try again."
Network error during image upload
Retry upload or check internet connection
Image Processing Error
"Unable to process the image. Please try a different file."
System fails to process the uploaded image
Select a different image file
Permission Denied
"You do not have permission to update the cover image."
User without edit permissions attempts to update image
Contact administrator for access
Session Expired
"Your session has expired. Please log in again."
User session times out during image update
Log in again and retry
8. Edge Cases
Edge Case
System Behavior
Project has no events
The event navigation row displays only the "Overview" tab; no event cards are shown
All event dates are TBD
Project dates display "TBD"; event cards show "TBD" for dates; service area shows project-level location if available
Single event project
Event navigation row shows "Overview" tab and one event card
More than 5 events
Event navigation row becomes horizontally scrollable; scroll indicators or arrows may appear
Solo operator with no conflicts
Warning banner is not displayed
Solo operator with conflicts on multiple dates
Warning banner displays with aggregated count of all conflicting leads and booked jobs
User dismisses banner then navigates to another conflicting project
Warning banner reappears on the new project (dismiss is per-project within session)
Brand has no logo configured
System displays agency name or default placeholder in logo area
Brand has no default header image
System displays a default system header image
Header image upload interrupted
System discards partial upload; user must retry
User selects same library image as current
"Update" button remains disabled; no change is made
Project status changed to Completed but event reopened
Project status reverts to Active if any event is no longer completed
Extremely long project name
Text truncates with ellipsis; full name shown on hover/tooltip
Event card team members exceed display limit
Additional members shown as "+N" avatar indicator
User clicks header image but has no edit permission
Nothing happens; camera icon is not displayed for users without permission
Client views project in Client Portal
Warning banner, Emails button, and edit capabilities are hidden
Contractor views project in Contractor Portal
Only assigned event cards are visible; warning banner and Emails button are hidden
Timezone differs between events
Timezone display updates based on currently selected event or next upcoming event when on Overview
Project spans multiple timezones
Service area and timezone update dynamically based on event context
Image upload while another upload is in progress
System queues or prevents duplicate uploads; shows loading state
9. Acceptance Criteria
9.1 Warning Banner
- AC-1: The warning banner shall only be displayed for agencies registered as "Solo Operator" type.
- AC-2: The warning banner shall display the correct count of conflicting leads and booked jobs based on actual event dates.
- AC-3: The "Check your availability" link shall redirect users to the Check Availability screen.
- AC-4: The "Dismiss" button shall hide the warning banner for the current session.
- AC-5: The warning banner shall reappear when the user starts a new session and visits a project with conflicting dates.
9.2 Brand Logo and Header Image
- AC-6: The brand logo shall be displayed in the top-left corner of the header image area.
- AC-7: The header image shall default to the brand's configured image if no project-specific image is set.
- AC-8: Changes to the header image shall apply only to the current project.
- AC-9: The header image shall be visible in Agency Portal, Client Portal, and Contractor Portal.
9.3 Update Cover Image Modal
- AC-10: The modal shall display two tabs: "Library" and "Upload".
- AC-11: The Library tab shall display a grid of pre-set images with checkbox selection.
- AC-12: The Upload tab shall accept only JPEG, JPG, and PNG files up to 3.1 MB.
- AC-13: Invalid file uploads shall display appropriate error messages.
- AC-14: The "Update" button shall save the selected or uploaded image as the project header.
- AC-15: The "Cancel" button shall close the modal without saving changes.
9.4 Project Information Display
- AC-16: The project name shall be displayed prominently in the header area.
- AC-17: The project dates shall display the range from first event date to last event date.
- AC-18: The project dates shall display "TBD" if no event dates are confirmed.
- AC-19: The status tag shall correctly reflect the project status (Active, Archived, Completed).
- AC-20: The project shall only show "Completed" status when all events are completed or archived.
9.5 Service Area and Timezone
- AC-21: The service area shall display the location of the next upcoming event.
- AC-22: The timezone shall display the correct UTC offset for the next upcoming event.
- AC-23: For multi-timezone projects, the display shall update based on the selected event.
9.6 Emails Button
- AC-24: The "Emails" button shall be visible only in the Agency Portal.
- AC-25: Clicking the "Emails" button shall redirect to the Project's Email Center.
9.7 Event Navigation Row
- AC-26: The "Overview" tab shall always be the first item in the event navigation row.
- AC-27: Event cards shall be displayed in chronological order based on event dates.
- AC-28: Each event card shall display: event name, date, team member avatars, stage, and three-dot menu.
- AC-29: Clicking an event card shall load event-specific content in the main content area.
- AC-30: The event navigation row shall be horizontally scrollable when events exceed the visible area.
- AC-31: The currently selected tab or card shall be visually highlighted.
9.8 Cross-Portal Behavior
- AC-32: Client Portal shall display header information without edit capabilities or Emails button.
- AC-33: Contractor Portal shall display only event cards for events the contractor is assigned to.
- AC-34: Header image changes in Agency Portal shall reflect immediately in Client and Contractor Portals.
10. Manual Test Cases
Test Case Link-
11. Dependencies
Dependency Type
Dependency Name
Description
Impact if Unavailable
Internal Module
Brand Settings
Provides brand logo and default header image
Header displays fallback placeholder
Internal Module
Project Management
Provides project name, status, and metadata
Header cannot display project information
Internal Module
Event Management
Provides event dates, locations, team assignments
Event cards cannot be displayed; dates show as unavailable
Internal Module
Email Center
Destination for Emails button
Button click results in navigation error
Internal Module
Check Availability
Destination for warning banner link
Link click results in navigation error
Internal Module
User Management
Provides team member avatars and names
Avatars display as default placeholders
Internal Data
Agency Type Configuration
Determines if Solo Operator warning applies
Warning banner may display incorrectly
External Service
File Storage Service
Stores uploaded header images
Image uploads fail
External Service
Image Processing Service
Processes and optimizes uploaded images
Image processing errors
Internal Module
Automation Engine
May trigger status changes
Automated status updates fail
Internal Module
Activity Feed
Logs status changes and updates
Activity logging fails
Portal Integration
Client Portal
Displays header in client view
Client sees broken or missing header
Portal Integration
Contractor Portal
Displays header in contractor view
Contractor sees broken or missing header
12. References
Figma Link-
Project Overview
✅ Activity Tab
Functional Requirements Document (FRD)
Project Details → Activity Tab
Module Name: Project Details - Activity Tab
Version: 1.0
Last Updated: February 19, 2026
Status: Approved
1. Module Overview
1.1 Module Name
Project Details - Activity Tab
1.2 Purpose
The Activity Tab serves as a comprehensive audit log and activity feed that captures all significant user actions and system events related to a project. It provides users with complete visibility into the project's history, enabling them to track changes, monitor progress, review communications, and maintain accountability across all project activities. The tab displays activities in strict chronological order with timestamps adjusted to each user's timezone preferences.
1.3 Business Goals
- Provide complete transparency and traceability of all project-related actions for audit and accountability purposes.
- Enable quick access to related items (emails, invoices, documents, contracts, proposals) directly from the activity feed through contextual CTAs.
- Reduce the need to navigate between modules by surfacing key actions and events in a centralized timeline.
- Support team collaboration by showing who performed which actions and when.
- Facilitate client relationship management by logging all interactions and communications.
- Enable quick follow-up actions (sending reminders, viewing invoices, replying to emails, countersigning contracts) without leaving the Activity tab.
- Track the complete proposal lifecycle from creation to client acceptance for improved sales pipeline visibility.
2. User Roles & Permissions
2.1 Permission Matrix
Role
View Activity Tab
View All Activities
View Payment Activities
Perform CTAs
Send Reminders
Agency Owner
✅ Yes
✅ Yes
✅ Yes
✅ Yes
✅ Yes
Admin
✅ Yes
✅ Yes
✅ Yes
✅ Yes
✅ Yes
Project Manager
✅ Yes
✅ Yes
✅ Yes
✅ Yes
✅ Yes
2.2 Role-Specific Notes
- Project Manager is a dynamic role assigned per project. By default, the user who creates the project becomes the Project Manager. Agency Owner or Admin can reassign the Project Manager role to any user. There can only be one Project Manager per project. Detailed logic for the Project Manager assignment is documented in a separate FRD.
- Payment-related activities (Section A.4 - all 12 types) are only visible to Agency Owner, Admin, and Project Manager roles.
- The "Send Reminder" CTA for overdue invoices and failed payments is restricted to Agency Owner, Admin, and Project Manager roles.
- All users see timestamps in their own timezone based on their Date & Time Preferences configured in user settings.
2.3 Payment Activities Visibility Matrix
Activity Type
Agency Owner
Admin
Project Manager
Invoice sent
✅ Visible
✅ Visible
✅ Visible
Payment received
✅ Visible
✅ Visible
✅ Visible
Automated invoice reminders sent
✅ Visible
✅ Visible
✅ Visible
Automated overdue notice sent
✅ Visible
✅ Visible
✅ Visible
Invoice manually edited
✅ Visible
✅ Visible
✅ Visible
Partial refund issued
✅ Visible
✅ Visible
✅ Visible
Full refund issued
✅ Visible
✅ Visible
✅ Visible
Contractor paid
✅ Visible
✅ Visible
✅ Visible
Failed Payment
✅ Visible
✅ Visible
✅ Visible
Overdue invoice
✅ Visible
✅ Visible
✅ Visible
3. User Flow
3.1 The user navigates to the Project Details page by clicking on a project from the project listing or any other entry point.
3.2 The system loads the Project Details page with the Project Header and the Overview tab selected by default.
3.3 The user clicks on the "Activity" tab within the Overview section's horizontal tab navigation.
3.4 The system loads the Activity tab and displays the activity feed with the most recent activities appearing first.
3.5 The system displays each activity entry with the user avatar (or system icon for automated activities), user name and role, action description, timestamp in the user's timezone, and any applicable CTA buttons.
3.6 The user scrolls down to view older activities, and the system loads additional activities via infinite scroll as the user approaches the bottom of the current list.
3.7 The system displays a loading indicator while fetching additional activities during infinite scroll.
3.8 The user identifies an activity related to an email and clicks the "View Email" CTA button.
3.9 The system navigates the user to the Email Center with the relevant email thread displayed.
3.10 The user returns to the Activity tab and identifies an activity showing a file was uploaded.
3.11 The system displays the file attachment preview below the activity description, showing the file icon, file name, file size, and time since upload.
3.12 The user clicks the "Download" button on the file attachment preview.
3.13 The system initiates the file download to the user's device.
3.14 The user identifies an activity showing a client signed a contract and clicks the "Countersign" CTA.
3.15 The system navigates the user to the Contract module where they can countersign the contract.
3.16 The user (with appropriate role) identifies an activity for an overdue invoice and clicks the "View Invoice" CTA.
3.17 The system navigates the user to the Invoice module with the relevant invoice displayed.
3.18 The user returns to the Activity tab and clicks the "Send Reminder" CTA on an overdue invoice activity.
3.19 The system sends a payment reminder to the client and displays a success message confirming the reminder was sent.
3.20 The system greys out the "Send Reminder" button for that specific activity and displays a tooltip on hover indicating "Reminder sent on [timestamp]".
3.21 After 24 hours have passed since the reminder was sent, the system re-enables the "Send Reminder" button, allowing the user to send another reminder.
3.22 The user identifies a contractor invoice activity and clicks the "Pay" CTA.
3.23 The system navigates the user to the contractor payment flow or displays the payment modal.
3.24 The user clicks the "Reply" CTA on an email-received activity from a client.
3.25 The system navigates the user to the Email Center with the reply composer open for the relevant email thread.
3.26 The user identifies a proposal-related activity showing the client accepted a proposal and clicks the "View Proposal" CTA.
3.27 The system navigates the user to the Proposal module with the relevant proposal displayed.
3.28 The user identifies an activity showing an event and services were auto-created from a proposal and clicks the "View Event" CTA.
3.29 The system navigates the user to the Event Details tab for the newly created event.
3.30 The user continues scrolling through the activity feed until reaching the earliest activity, which is always "Project '[Project Name]' was created" with the creator's name and timestamp.
3.31 The system indicates that no more activities are available to load when the user reaches the end of the activity history.
3.32 When new activities occur while the user is viewing the Activity tab, the user must manually refresh the page to see the latest entries.
4. Functional Logic
4.1 Activity Feed Display
- The Activity tab displays all significant user actions and system events related to the project in a single, unified timeline.
- Activities are displayed in strict reverse chronological order, with the most recent activities appearing at the top.
- There is no filtering or sorting functionality; the feed always displays newest activities first.
- The activity feed uses infinite scroll behavior, loading additional activities as the user scrolls toward the bottom of the current list.
- The system loads activities in batches (e.g., 20-30 activities per batch) to optimize performance and reduce initial load time.
- A loading indicator is displayed at the bottom of the feed while additional activities are being fetched.
- The activity feed is never empty; the first activity is always "Project '[Project Name]' was created by [User Name]" with the creation timestamp.
4.2 Activity Entry Structure
- Each activity entry consists of the following components displayed in a consistent format.
- The user avatar is displayed on the left side of the entry; for automated system activities, a system icon is displayed instead.
- The user name and role are displayed next to the avatar, identifying who performed the action (e.g., "Mary Jane", "System").
- The action description provides a clear, concise summary of what occurred, including relevant context such as item names, amounts, or status changes.
- The timestamp displays the exact date and time of the activity, formatted according to the user's Date & Time Preferences from their settings.
- Each user sees timestamps converted to their own timezone, ensuring accurate time representation regardless of where the action originated.
- CTA buttons are displayed below or alongside the action description when applicable, providing quick access to related items or actions.
- For file-related activities, a file attachment preview is displayed below the description showing the file icon, file name, file size, and time since upload.
4.3 Activity Description Format Examples
- Project creation: "Project 'Jadon & Monica Wedding' was created" with timestamp.
- Team member addition: "[User Name] added [Team Member Name] to the project."
- Project Manager changed: "[User Name] assigned [New Project Manager Name] as Project Manager" (Informational).
- Project total adjusted: "[User Name] adjusted project total/pricing" with View CTA (redirects to Finances Tab).
- File upload: "[User Name] added file to '[Project Name]'" with file attachment preview showing file details.
- Email sent: "[User Name] sent an email to [Recipient Name]" with View Email CTA.
- Email received: "[Client Name] (Client) sent you an email" with View Email and Reply CTAs.
- Invoice activity: "[Client Name] viewed Invoice #[Invoice Number]" with View Invoice CTA.
- Contract sent: "[User Name] sent Contract for [Project Name] to [Client Name]" with View Contract CTA. If sent to multiple clients, display as "[User Name] sent Contract for [Project Name] to [Client Name] +N more" where N is the count of additional recipients.
- Contract signed by client: "Received signed contract from [Client Name]" with View Contract and Countersign CTAs.
- Contractor signed agreement: "[Contractor Name] signed the service agreement" with View Agreement and Countersign CTAs.
- Questionnaire sent: "[User Name] sent Questionnaire for [Project Name] to [Client Name/Contractor Name]" with View Questionnaire CTA. If sent to multiple recipients, display as "[User Name] sent Questionnaire for [Project Name] to [Recipient Name] +N more" where N is the count of additional recipients.
- Proposal sent: "[User Name] sent Proposal for [Project Name] to [Client Name]" with View Proposal CTA.
- Invoice sent: "[User Name] sent Invoice for [Project Name] to [Client Name]" with View Invoice CTA.
- Payment received: "Payment of $[Amount] received from [Client Name]" with View Invoice CTA.
- Contractor invoice: "[Contractor Name] (Contractor) uploaded invoice [Invoice Reference]" with View Invoice and Pay CTAs.
- Contractor event price adjusted: "[User Name] adjusted [Contractor Name]'s event price: 'Added parking fee due to venue change'" with View Contractor CTA.
- Overdue invoice: "Invoice #[Invoice Number] is overdue" with View Invoice and Send Reminder CTAs.
- Event venue changed: "[User Name] changed [Event Name] venue from [Old Venue] to [New Venue]" with View Event CTA.
- Event hours changed: "[User Name] updated hours of coverage for [Event Name] from [Old Hours] to [New Hours]" with View Event CTA.
- Number of shooters changed: "[User Name] changed number of shooters for [Event Name] from [Old Count] to [New Count]" with View Event CTA.
- Minimum photos changed: "[User Name] updated minimum photos for [Event Name] from [Old Count] to [New Count]" with View Event CTA.
- Service removed: "[User Name] removed [Service Name] from the project" with View Services CTA.
- Meeting scheduled: "Meeting '[Meeting Title]' scheduled with [Participant Name] on [Date/Time]" (Informational).
- Proposal viewed: "[Client Name] viewed the Proposal" with View Proposal CTA.
- Proposal accepted: "Client accepted Proposal and selected '[Package Name]'" with View Proposal CTA.
- Proposal expired: "Proposal for [Project Name] has expired" with View Proposal CTA.
- Auto-created event: "Event '[Event Name]' and Services were automatically created from Proposal" with View Event and View Services CTAs.
4.4 Admin/Studio Actions
- The system logs when a project is created, capturing the creator's name and timestamp.
- The system logs when a team member is added to the project, displaying the added member's name and a "View Team Member" CTA.
- The system logs when a team member is removed from the project as an informational entry without a CTA.
- The system logs when a project is archived or unarchived as informational entries without CTAs.
- The system logs when an event is rescheduled, displaying both the old and new date/time values and a "View Event" CTA.
- The system logs when an event venue is changed, displaying both the old and new venue and a "View Event" CTA.
- The system logs when an event's hours of coverage is changed, displaying both the old and new hours and a "View Event" CTA.
- The system logs when the number of shooters for an event is changed, displaying both the old and new count and a "View Event" CTA.
- The system logs when the minimum photos requirement for an event is changed, displaying both the old and new count and a "View Event" CTA.
- The system logs when an event is removed from the project as an informational entry without a CTA.
- The system logs when a deliverable is added, edited, or removed as informational entries without CTAs.
- The system logs when a new event is created, displaying the event name and a "View Event" CTA.
- The system logs when new services are added to the project with a "View Services" CTA.
- The system logs when a service is removed from the project with a "View Services" CTA.
- The system logs when the project is edited as an informational entry without a CTA.
- The system logs when project services are edited with a "View Services" CTA.
- The system logs when the Project Manager is changed as an informational entry without a CTA, displaying the format "[User Name] assigned [New Project Manager Name] as Project Manager".
- The system logs when the project total/pricing is adjusted with a "View" CTA that redirects to the Finances Tab.
- The system logs when a timeline is uploaded with "View Timeline" and "Download" CTAs.
- The system logs when an event status is updated, displaying the new status and a "View Event" CTA.
- The system logs when an email is sent by an agency user with a "View Email" CTA.
- The system logs when files or documents are manually uploaded with a "Download" CTA and displays the file attachment preview.
- The system logs when a Contract is sent with a "View Contract" CTA, displaying the format "[User Name] sent Contract for [Project Name] to [Client Name]". If sent to multiple clients, the format is "[User Name] sent Contract for [Project Name] to [Client Name] +N more".
- The system logs when a Questionnaire is sent with a "View Questionnaire" CTA, displaying the format "[User Name] sent Questionnaire for [Project Name] to [Client Name/Contractor Name]". If sent to multiple recipients, the format is "[User Name] sent Questionnaire for [Project Name] to [Recipient Name] +N more".
- The system logs when a Proposal is sent with a "View Proposal" CTA, displaying the format "[User Name] sent Proposal for [Project Name] to [Client Name]".
- The system logs when an Invoice is sent with a "View Invoice" CTA, displaying the format "[User Name] sent Invoice for [Project Name] to [Client Name]".
- The system logs when a signed contract is received from a client with "View Contract" and "Countersign" CTAs.
- The system logs when a questionnaire is completed with a "View" CTA linking to the completed questionnaire.
- The system logs when the primary client is changed with a "View Client" CTA.
- The system logs when a client is added to the project with a "View Client" CTA.
- The system logs when a client is removed from the project as an informational entry without a CTA.
- The system logs when a client views an invoice with a "View Invoice" CTA; clicking this CTA navigates to the invoice which shows the client view indicator in the invoice's activity history.
- The system logs when a client uploads files with "Download" and "View File" CTAs and displays the file attachment preview.
- The system logs when an event or project is cancelled as an informational entry without a CTA.
- The system logs when a SNAPSHOT is sent to a contractor (either from general settings toggle or manually from project details) as an informational entry without a CTA.
4.5 Proposal-Related Activities
- The system logs when a proposal is sent to a client with a "View Proposal" CTA, displaying the format "[User Name] sent Proposal for [Project Name] to [Client Name]".
- The system logs when a client views the proposal with a "View Proposal" CTA, displaying the format "[Client Name] viewed the Proposal".
- The system logs when a client fully accepts a proposal (selects package, signs contract, and makes initial payment) with a "View Proposal" CTA, displaying the format "Client accepted Proposal and selected '[Package Name]'".
- The proposal is considered accepted only when all three steps are completed: package selection, contract signing, and initial payment.
- The system logs when a proposal expires with a "View Proposal" CTA, displaying the format "Proposal for [Project Name] has expired".
- Proposal expiry is logged only when the proposal has an expiration date set, the expiration date has passed, AND the client has not accepted the proposal.
- If a client accepts the proposal before the expiration date, no expiry activity is logged.
4.6 Contractor Actions
- The system logs when a contractor is assigned to an event or project with a "View Contractor" CTA.
- The system logs when a service agreement is sent to a contractor with a "View Agreement" CTA.
- The system logs when a contractor signs the service agreement with "View Agreement" and "Countersign" CTAs.
- The system logs when a contractor submits deliverables with a "View Deliverables" CTA.
- The system logs when a contractor uploads an invoice with "View Invoice" and "Pay" CTAs.
- The system logs when a contractor marks a task as complete with a "View Task" CTA.
- The system logs when the agency pays a contractor's invoice with a "View Invoice" CTA.
- The system logs when manual adjustments are made to contractor pay with a "View Payment" CTA.
- The system logs when a contractor's event price is adjusted with a "View Contractor" CTA, displaying the format "[User Name] adjusted [Contractor Name]'s event price: '[User-provided description]'".
- The system logs when a contractor is removed from an event or project as an informational entry without a CTA.
4.7 System-Triggered Events
- The system logs when new files are uploaded (by any user or system process) with "View" and "Download" CTAs and displays the file attachment preview.
- The system logs when a new email is received from a client, displaying a one-line summary (not full content) with "View Email" and "Reply" CTAs.
- The system logs workflow automation triggers as informational entries without CTAs, including event pipeline status changes, automated questionnaires sent, automated emails sent, and automated tasks created.
- The system logs lead form submissions that initiate project activities with a "View" CTA linking to the lead form submission details.
- The system logs when an event and services are automatically created from a proposal acceptance with "View Event" and "View Services" CTAs, displaying the format "Event '[Event Name]' and Services were automatically created from Proposal".
- The system logs when a meeting is scheduled via Calendly as an informational entry without a CTA, displaying the format "Meeting '[Meeting Title]' scheduled with [Participant Name] on [Date/Time]".
4.8 Payment-Related Updates
- Payment-related activities are only visible to Agency Owner, Admin, and Project Manager roles.
- The system logs when an invoice is sent to a client with a "View Invoice" CTA.
- The system logs when a payment is received, displaying the amount and a "View Invoice" CTA.
- The system logs when automated invoice reminders are sent with a "View Invoice" CTA.
- The system logs when automated emails are sent from automations with a "View Email" CTA.
- The system logs when automated questionnaires are sent from automations with a "View Questionnaire" CTA.
- The system logs when an automated overdue notice is sent with a "View Invoice" CTA.
- The system logs when an invoice is manually edited (line items, amounts, due dates) with a "View Invoice" CTA.
- The system logs when a partial refund is issued, displaying the refund amount and a "View Invoice" CTA.
- The system logs when a full refund is issued with a "View Invoice" CTA.
- The system logs when a contractor is paid with a "View Invoice" CTA.
- The system logs when a payment fails with "View Invoice" and "Send Reminder" CTAs.
- The system logs when an invoice becomes overdue with "View Invoice" and "Send Reminder" CTAs.
4.9 Send Reminder Functionality
- The "Send Reminder" CTA is available for overdue invoice activities and failed payment activities.
- Only users with Agency Owner, Admin, or Project Manager roles can access the "Send Reminder" functionality.
- When the user clicks "Send Reminder", the system sends a payment reminder email to the client associated with the invoice.
- Upon successful reminder delivery, the system displays a success message confirming "Reminder sent successfully."
- After a reminder is sent, the "Send Reminder" button is immediately greyed out (disabled) for that specific activity entry.
- When a user hovers over the greyed-out button, a tooltip displays "Reminder sent on [Date] at [Time]" showing when the last reminder was sent.
- The "Send Reminder" button remains greyed out for a 24-hour cooldown period from the time the reminder was sent.
- After 24 hours have elapsed, the "Send Reminder" button automatically becomes active again, allowing the user to send another reminder.
- The cooldown period is tracked per activity entry, meaning if multiple overdue invoices exist, each has its own independent cooldown timer.
- If one user sends a reminder, the button is greyed out for all users viewing that activity entry until the 24-hour cooldown expires.
- The reminder timestamp is stored and displayed consistently across all users, converted to each user's local timezone.
4.10 Countersign Functionality
- The "Countersign" CTA is displayed alongside "View Contract" or "View Agreement" for contract/agreement signed activities.
- For client-signed contracts, clicking "Countersign" navigates the agency user to the Contract module where they can add their countersignature.
- For contractor-signed service agreements, clicking "Countersign" navigates the agency user to the Service Agreement module where they can add their countersignature.
- Once the contract or agreement has been countersigned, the "Countersign" CTA may be hidden or replaced with a "Signed" indicator (implementation based on Contract module logic).
4.11 File Attachment Preview Display
- For all file-related activities, a file attachment preview is displayed below the activity description.
- The preview includes a file type icon that visually represents the file format (e.g., document icon for .doc, spreadsheet icon for .xls, image icon for .png).
- The file name is displayed in full, truncating with an ellipsis if it exceeds the available width.
- The file size is displayed in human-readable format (e.g., "1.4 MB", "256 KB").
- The time since upload is displayed in relative format (e.g., "2 days ago", "5 hours ago", "Just now").
- A "Download" button is displayed on the file preview, allowing users to download the file directly.
- For previewable file types (PDF, images), a "Preview" option may also be available.
- Clicking the file name or icon opens a preview if available, or initiates a download if preview is not supported.
4.12 Timestamp and Timezone Handling
- All activity timestamps are stored in UTC in the database to ensure consistency.
- When displaying timestamps to users, the system converts UTC timestamps to the user's local timezone.
- The user's timezone preference is retrieved from their Date & Time Preferences in user settings.
- The date and time format follows the user's configured format preferences (e.g., "DD/MM/YYYY" vs "MM/DD/YYYY", "12-hour" vs "24-hour").
- If a user changes their timezone settings, all timestamps in the Activity tab are immediately re-rendered in the new timezone upon page refresh.
- The relative time display (e.g., "2 days ago") is also calculated based on the user's local timezone.
4.13 Infinite Scroll Behavior
- The activity feed initially loads the most recent batch of activities (e.g., 20-30 entries).
- As the user scrolls down and approaches the bottom of the currently loaded activities, the system automatically fetches the next batch.
- A loading spinner or skeleton loader is displayed at the bottom of the feed while additional activities are being fetched.
- The system continues loading additional batches as the user scrolls until all activities have been loaded.
- When the user reaches the final activity (project creation), the system indicates that no more activities are available.
- If a network error occurs during infinite scroll loading, the system displays an error message with a "Retry" option.
- The scroll position is maintained when new activities are loaded, preventing the user from losing their place.
4.14 Activity Feed Refresh
- The activity feed does not update in real-time; new activities are not automatically displayed while the user is viewing the tab.
- When new activities occur while the user is viewing the Activity tab, the user must manually refresh the page to see the latest entries.
- Upon page refresh, the system reloads the activity feed from the beginning, displaying the most recent activities first.
- There is no "Load new activities" prompt or notification; users are expected to refresh the page manually to see updates.
4.15 Activity for Deleted or Inaccessible Items
- If an activity references an item that has been deleted (e.g., a file that was later removed), the CTA button is either hidden or displays as disabled with a tooltip indicating "Item no longer available."
- The activity entry itself remains visible for historical record purposes, even if the linked item is no longer accessible.
- For activities referencing restricted items (e.g., financial data for users without finance permissions), the CTA may be hidden or display an appropriate access restriction message.
5. Field Details & Validations
5.1 Activity Entry Display Fields
Field Name
Field Type
Source
Description
User Avatar
Image
User Profile
Profile picture of the user who performed the action; system icon for automated activities
User Name
Text
User Profile
Full name of the user who performed the action
User Role
Text
User Profile / Assignment
Role context (e.g., "Contractor", "Admin", "Client") displayed in parentheses when relevant
Action Description
Text
Activity Log
Clear, concise description of the action performed
Timestamp
DateTime
Activity Log (UTC)
Converted to user's timezone and formatted per user preferences
CTA Buttons
Button Array
Activity Type
Dynamic based on activity type; may include multiple CTAs
File Preview
Component
File Storage
Displayed for file-related activities only
5.2 File Attachment Preview Fields
Field Name
Field Type
Description
File Icon
Image/Icon
Visual representation of file type
File Name
Text
Full file name with extension; truncates with ellipsis if too long
File Size
Text
Human-readable size (e.g., "1.4 MB")
Time Since Upload
Text
Relative time (e.g., "2 days ago")
Download Button
Button
Initiates file download
5.3 Send Reminder State Fields
Field Name
Field Type
Description
Last Reminder Sent
DateTime
Timestamp of when the last reminder was sent for this activity
Cooldown Active
Boolean
True if within 24-hour cooldown period
Tooltip Text
Text
"Reminder sent on [Date] at [Time]" when cooldown is active
6. Success Message Handling
Action
Success Message
Post-Success Behavior
Send Reminder (Overdue Invoice)
"Reminder sent successfully."
Button greys out; tooltip shows reminder timestamp; 24-hour cooldown begins
Send Reminder (Failed Payment)
"Payment reminder sent successfully."
Button greys out; tooltip shows reminder timestamp; 24-hour cooldown begins
File Download Initiated
No toast message
File download begins in browser
Navigate to Related Item
No toast message
User is redirected to the relevant module/item
Page Refresh
No toast message
Activity feed reloads with latest activities
7. Error Message Handling
Error Scenario
Error Message
Trigger Condition
User Action Required
Send Reminder Failed
"Failed to send reminder. Please try again."
Network error or email service failure when sending reminder
Retry sending the reminder
Reminder Already Sent (Cooldown Active)
"A reminder was already sent recently. Please wait before sending another."
User attempts to send reminder during 24-hour cooldown (edge case if button state fails)
Wait for cooldown period to expire
Infinite Scroll Load Failed
"Unable to load more activities. Please check your connection."
Network error during infinite scroll fetch
Click "Retry" or refresh the page
File Download Failed
"Failed to download file. Please try again."
Network error or file not found during download
Retry download or contact support if file is missing
Item Not Found
"The requested item is no longer available."
User clicks CTA for a deleted item
No action available; item has been removed
Permission Denied
"You do not have permission to access this item."
User clicks CTA for an item they don't have permission to view
Contact administrator for access
Activity Load Failed
"Unable to load activities. Please refresh the page."
Initial activity feed fails to load
Refresh the page
Invalid Client Email (Send Reminder)
"Unable to send reminder. Client email address is invalid."
Client email is invalid or missing when sending reminder
Update client email address and retry
8. Edge Cases
Edge Case
System Behavior
Project with only one activity
The activity feed displays only the project creation activity with a message indicating no additional activities
Extremely long activity history (1000+ activities)
Infinite scroll loads activities in batches; performance is optimized through pagination
Activity references a deleted file
CTA button is disabled or hidden; activity entry remains visible with note "File no longer available"
Activity references a deleted user
User name displays as "[Deleted User]" or shows the name at the time of the activity
Multiple reminders sent by different users
Only one reminder can be sent per 24-hour period regardless of which user sends it
User changes timezone while viewing Activity tab
Timestamps update to new timezone upon page refresh
Network disconnection during infinite scroll
Error message displayed with "Retry" option; previously loaded activities remain visible
Activity created while user is viewing the tab
User must manually refresh the page to see new activities; no automatic updates
Activity for archived project
Activity tab remains accessible and displays all historical activities
CTA leads to a module user doesn't have access to
Permission denied message is displayed; user is not redirected
Concurrent activity creation
Activities are ordered by exact timestamp; ties are resolved by database insertion order
Activity description contains very long text
Text wraps appropriately; may truncate with "Show more" option if excessively long
File attachment has very long filename
Filename truncates with ellipsis; full name shown on hover
Reminder sent exactly at 24-hour boundary
System uses server timestamp; button enables at or after exactly 24 hours
User without email permissions clicks "View Email"
User is redirected to Email Center with appropriate access level
Automated activity occurs at midnight (timezone edge)
Timestamp correctly reflects the activity time in each user's local timezone
Activity for item that was subsequently edited
Activity shows state at time of action; current item state may differ
Browser back button after CTA navigation
User returns to Activity tab at their previous scroll position (if supported)
Activity log during system maintenance
Graceful degradation with message "Activity temporarily unavailable"
Proposal accepted without all three steps
Proposal acceptance activity is NOT logged until all three steps (package selection, contract signing, initial payment) are completed
Proposal expires after partial completion
Proposal expired activity is logged; partial completion data is retained but proposal is marked as expired
Client accepts proposal on expiration date
If acceptance occurs before midnight on expiration date, no expiry activity is logged
Multiple packages in proposal - client selects one
Activity description shows the specific package name selected by the client
Event auto-created but services fail
Separate error handling; partial success may result in event created without services
Email received from unknown sender
Activity displays sender email address if name is not available
Project Manager is reassigned
New Project Manager gains access to payment activities; previous Project Manager loses access (if they don't have Agency Owner or Admin role)
Contract already countersigned
"Countersign" CTA is hidden or shows "Signed" indicator
User clicks Countersign without signing permissions
Permission denied message is displayed
9. Acceptance Criteria
9.1 Activity Feed Display
- AC-1: The Activity tab shall display all project-related activities in reverse chronological order (newest first).
- AC-2: The activity feed shall never be empty; the project creation activity shall always be present as the first historical entry.
- AC-3: Each activity entry shall display user avatar, user name, action description, and timestamp.
- AC-4: Timestamps shall be displayed in the user's local timezone based on their Date & Time Preferences.
- AC-5: The date and time format shall match the user's configured format preferences.
- AC-6: The activity feed shall not update in real-time; users must manually refresh to see new activities.
9.2 Infinite Scroll
- AC-7: The system shall implement infinite scroll to load additional activities as the user scrolls down.
- AC-8: A loading indicator shall be displayed while fetching additional activities.
- AC-9: The system shall indicate when no more activities are available to load.
- AC-10: Scroll position shall be maintained when new activities are loaded.
9.3 Activity Types and CTAs
- AC-11: All 71 activity types defined in the specification shall be logged appropriately.
- AC-12: Each activity type shall display the correct CTA buttons as specified.
- AC-13: Informational activities (without CTAs) shall display without action buttons.
- AC-14: CTA buttons shall navigate users to the correct related module or item.
9.4 File Attachment Preview
- AC-15: File-related activities shall display a file attachment preview below the description.
- AC-16: The file preview shall show file icon, file name, file size, and time since upload.
- AC-17: The Download button shall initiate file download when clicked.
- AC-18: Long file names shall truncate with ellipsis and show full name on hover.
9.5 Send Reminder Functionality
- AC-19: The "Send Reminder" CTA shall be available for overdue invoice and failed payment activities.
- AC-20: Only Agency Owner, Admin, and Project Manager roles shall be able to send reminders.
- AC-21: Upon clicking "Send Reminder", the system shall send a payment reminder email to the client.
- AC-22: A success message shall be displayed upon successful reminder delivery.
- AC-23: The "Send Reminder" button shall be greyed out immediately after sending.
- AC-24: A tooltip shall display "Reminder sent on [timestamp]" when hovering over the greyed-out button.
- AC-25: The "Send Reminder" button shall re-enable after exactly 24 hours from the last reminder.
- AC-26: The cooldown shall apply globally across all users for the same activity entry.
9.6 Payment Activities Visibility
- AC-27: Payment-related activities (all 12 types) shall only be visible to Agency Owner, Admin, and Project Manager roles.
- AC-28: The activity count and pagination shall adjust based on the user's role and visible activities.
9.7 Contract/Agreement Signing CTAs
- AC-29: "Receive signed contract" activity shall display both "View Contract" and "Countersign" CTAs.
- AC-30: "Contractor signed service agreement" activity shall display both "View Agreement" and "Countersign" CTAs.
- AC-31: Clicking "Countersign" shall navigate the user to the appropriate module to add their countersignature.
- AC-32: Once countersigned, the "Countersign" CTA shall be hidden or replaced with a "Signed" indicator.
9.8 Activity Types - Admin/Studio Actions
- AC-33: Project created, archived, and unarchived activities shall be logged correctly.
- AC-34: Team member addition and removal activities shall be logged with appropriate CTAs.
- AC-35: Event-related activities (create, reschedule, venue change, hours change, shooters change, minimum photos change, remove, status update) shall be logged with View Event CTA where applicable.
- AC-36: File and document upload activities shall display file attachment preview with Download CTA.
- AC-37: Contract, Questionnaire, Proposal, and Invoice sent activities shall be logged with respective View CTAs.
- AC-38: Client-related activities shall be logged with appropriate CTAs.
- AC-39: "Client viewed invoice" activity shall navigate to invoice showing client view indicator in invoice's activity history.
- AC-40: Service added and removed activities shall be logged with View Services CTA.
- AC-41: Project Manager changed activity shall be logged as informational without CTA.
- AC-42: Project total/pricing adjusted activity shall be logged with View CTA that redirects to Finances Tab.
9.9 Activity Types - Proposal Activities
- AC-43: Proposal sent activity shall be logged when agency sends a proposal to client.
- AC-44: Proposal viewed activity shall be logged when client opens/views the proposal.
- AC-45: Proposal accepted activity shall be logged only when all three steps are completed (package selection, contract signing, initial payment).
- AC-46: Proposal accepted activity description shall include the selected package name.
- AC-47: Proposal expired activity shall be logged only when expiration date is set, date has passed, and client has not accepted.
- AC-48: Event and Services auto-created activity shall be logged with View Event and View Services CTAs.
9.10 Activity Types - Contractor Actions
- AC-49: Contractor assignment and removal activities shall be logged correctly.
- AC-50: Service agreement activities shall be logged with View Agreement CTA (and Countersign for signed agreements).
- AC-51: Contractor invoice activities shall display View Invoice and Pay CTAs.
- AC-52: Task completion and payment activities shall be logged with appropriate CTAs.
- AC-53: Contractor Event Price adjusted activity shall be logged with View Contractor CTA and include user-provided description.
9.11 Activity Types - System-Triggered Events
- AC-54: New file uploads shall be logged with View and Download CTAs.
- AC-55: New email received from client shall be logged with View Email and Reply CTAs.
- AC-56: Workflow automation triggers (including automated task creation) shall be logged as informational entries.
- AC-57: Lead form submissions shall be logged with View CTA.
- AC-58: Meeting scheduled via Calendly shall be logged as informational entry without CTA.
9.12 Activity Types - Payment-Related Updates
- AC-59: Invoice sent, payment received, and refund activities shall be logged with View Invoice CTA.
- AC-60: Automated reminder and notice activities shall be logged with View Invoice CTA.
- AC-61: Failed payment and overdue invoice activities shall be logged with View Invoice and Send Reminder CTAs.
9.13 Error Handling
- AC-62: Network errors during infinite scroll shall display an error message with Retry option.
- AC-63: CTAs for deleted items shall be disabled or hidden with appropriate messaging.
- AC-64: Permission errors shall display appropriate access denied messages.
- AC-65: Invalid client email errors shall display appropriate messaging when sending reminders.
10. Manual Test Cases
Test Cases Link: [Click Here]
11. Dependencies
Dependency Type
Dependency Name
Description
Impact if Unavailable
Internal Module
Email Center
Destination for email-related CTAs (View Email, Reply)
Email CTAs fail to navigate
Internal Module
Invoice Module
Destination for invoice-related CTAs
Invoice CTAs fail to navigate
Internal Module
Contract Module
Destination for contract-related CTAs and Countersign
Contract CTAs fail to navigate
Internal Module
Service Agreement Module
Destination for agreement-related CTAs and Countersign
Agreement CTAs fail to navigate
Internal Module
Questionnaire Module
Destination for questionnaire-related CTAs
Questionnaire CTAs fail to navigate
Internal Module
Proposal Module
Destination for proposal-related CTAs
Proposal CTAs fail to navigate
Internal Module
File Storage Module
Source for file downloads and previews
File downloads fail
Internal Module
User Management Module
Provides user avatars and names
Avatars display as placeholders
Internal Module
Event Management
Destination for event-related CTAs
Event CTAs fail to navigate
Internal Module
Team Management Module
Destination for team member CTAs
Team member CTAs fail to navigate
Internal Module
Client Management Module
Destination for client-related CTAs
Client CTAs fail to navigate
Internal Module
Contractor Management Module
Destination for contractor-related CTAs
Contractor CTAs fail to navigate
Internal Module
Task Management Module
Destination for task-related CTAs
Task CTAs fail to navigate
Internal Module
Lead Management Module
Destination for lead form submission CTAs
Lead form CTAs fail to navigate
Internal Module
Services Module
Destination for View Services CTA
Services CTAs fail to navigate
Internal Module
Finances Tab
Destination for project pricing View CTA
Pricing CTA fails to navigate
Internal Module
Project Manager Assignment
Determines which user has Project Manager role for payment visibility
Payment visibility may fail
Internal Service
Activity Logging Service
Records all activities to the database
Activities fail to appear in feed
Internal Service
Email Service
Sends reminder emails
Send Reminder functionality fails
External Service
Calendly Integration
Triggers meeting scheduled activities
Meeting activities not logged
External Service
Timezone Service
Converts timestamps to user timezones
Timestamps display in UTC
User Settings
Date & Time Preferences
Provides user's timezone and format preferences
Falls back to system defaults
Internal Module
Automation Engine
Triggers automated activities
Automated activities not logged
Internal Module
Payment Gateway
Processes payments and triggers payment activities
Payment activities not logged
12. References
12.1 Figma Designs
Link: [Click Here]
Appendix A: Complete Activity Types Reference (71 Types)
A.1 Admin/Studio Actions (43 Types)
#
Activity Type
CTA(s)
Category
Description Format
1
Project created
---
Informational
"Project '[Project Name]' was created"
2
Adding a Team Member to the project
View Team Member
Navigation
"[User Name] added [Team Member Name] to the project"
3
Removing a Team member from the project
---
Informational
"[User Name] removed [Team Member Name] from the project"
4
Project archived
---
Informational
"[User Name] archived the project"
5
Project unarchived
---
Informational
"[User Name] unarchived the project"
6
Event rescheduled
View Event
Navigation
"[User Name] rescheduled [Event Name] from [Old Date] to [New Date]"
7
Event venue changed
View Event
Navigation
"[User Name] changed [Event Name] venue from [Old Venue] to [New Venue]"
8
Event hours of coverage changed
View Event
Navigation
"[User Name] updated hours of coverage for [Event Name] from [Old Hours] to [New Hours]"
9
Number of shooters changed
View Event
Navigation
"[User Name] changed number of shooters for [Event Name] from [Old Count] to [New Count]"
10
Minimum photos requirement changed
View Event
Navigation
"[User Name] updated minimum photos for [Event Name] from [Old Count] to [New Count]"
11
Event removed from project
---
Informational
"[User Name] removed [Event Name] from the project"
12
Deliverable added
---
Informational
"[User Name] added a deliverable to [Event Name]"
13
Deliverable edited
---
Informational
"[User Name] edited a deliverable in [Event Name]"
14
Deliverable removed
---
Informational
"[User Name] removed a deliverable from [Event Name]"
15
Create Event
View Event
Navigation
"[User Name] created event '[Event Name]'"
16
Adding new services to the project
View Services
Navigation
"[User Name] added new services to the project"
17
Service removed from project
View Services
Navigation
"[User Name] removed [Service Name] from the project"
18
Edit Project
---
Informational
"[User Name] edited the project details"
19
Edit project services
View Services
Navigation
"[User Name] edited project services"
20
Project Manager changed
---
Informational
"[User Name] assigned [New Project Manager Name] as Project Manager"
21
Project total/pricing adjusted
View
Navigation
"[User Name] adjusted project total/pricing" (redirects to Finances Tab)
22
Upload Timeline
View Timeline, Download
Navigation + Action
"[User Name] uploaded a timeline"
23
Event status update
View Event
Navigation
"[User Name] updated [Event Name] status to [New Status]"
24
Email sent (by agency user)
View Email
Navigation
"[User Name] sent an email to [Recipient Name]"
25
Upload files or documents
Download
Action
"[User Name] added file to '[Project Name]'"
26
Sent Contract
View Contract
Navigation
"[User Name] sent Contract for [Project Name] to [Client Name]" or "[User Name] sent Contract for [Project Name] to [Client Name] +N more"
27
Sent Questionnaire
View Questionnaire
Navigation
"[User Name] sent Questionnaire for [Project Name] to [Recipient Name]" or "[User Name] sent Questionnaire for [Project Name] to [Recipient Name] +N more"
28
Sent Proposal
View Proposal
Navigation
"[User Name] sent Proposal for [Project Name] to [Client Name]"
29
Sent Invoice
View Invoice
Navigation
"[User Name] sent Invoice for [Project Name] to [Client Name]"
30
Receive signed contract
View Contract, Countersign
Navigation + Action
"Received signed contract from [Client Name]"
31
Completed Questionnaires
View
Navigation
"[Client Name] completed the questionnaire"
32
Primary client changed
View Client
Navigation
"[User Name] changed primary client to [Client Name]"
33
Client added to the project
View Client
Navigation
"[User Name] added [Client Name] to the project"
34
Client removed from the project
---
Informational
"[User Name] removed [Client Name] from the project"
35
Client viewed invoice
View Invoice
Navigation
"[Client Name] viewed Invoice #[Invoice Number]"
36
Client uploaded file(s)
Download, View File
Action + Navigation
"[Client Name] uploaded file(s)"
37
Event cancelled
---
Informational
"[User Name] cancelled [Event Name]"
38
Project cancelled
---
Informational
"[User Name] cancelled the project"
39
SNAPSHOT sent to contractor
---
Informational
"SNAPSHOT sent to [Contractor Name]"
40
Proposal sent to client
View Proposal
Navigation
"[User Name] sent Proposal for [Project Name] to [Client Name]"
41
Proposal viewed by client
View Proposal
Navigation
"[Client Name] viewed the Proposal"
42
Proposal accepted
View Proposal
Navigation
"Client accepted Proposal and selected '[Package Name]'"
43
Proposal expired
View Proposal
Navigation
"Proposal for [Project Name] has expired"
A.2 Contractor Actions (10 Types)
#
Activity Type
CTA(s)
Category
Description Format
44
Contractor assigned to the event/project
View Contractor
Navigation
"[Contractor Name] was assigned to [Event/Project Name]"
45
Sent service agreement
View Agreement
Navigation
"Service agreement sent to [Contractor Name]"
46
Contractor signed the service agreement
View Agreement, Countersign
Navigation + Action
"[Contractor Name] signed the service agreement"
47
Contractor submitted deliverables
View Deliverables
Navigation
"[Contractor Name] submitted deliverables for [Event Name]"
48
Contractor uploads invoice
View Invoice, Pay
Navigation + Action
"[Contractor Name] (Contractor) uploaded invoice [Invoice Reference]"
49
Contractor marked task complete
View Task
Navigation
"[Contractor Name] marked task '[Task Name]' as complete"
50
Agency paid invoice (to contractor)
View Invoice
Navigation
"Paid [Contractor Name]'s invoice [Invoice Reference]"
51
Manual adjustments to contractor pay
View Payment
Navigation
"[User Name] made manual adjustment to [Contractor Name]'s pay"
52
Contractor Event Price adjusted
View Contractor
Navigation
"[User Name] adjusted [Contractor Name]'s event price: '[User-provided description]'"
53
Contractor removed from the event/project
---
Informational
"[Contractor Name] was removed from the [Event/Project Name]"
A.3 System-Triggered Events (6 Types)
#
Activity Type
CTA(s)
Category
Description Format
54
New file uploads
View, Download
Navigation + Action
"New file uploaded to '[Project Name]'"
55
New email received (from client)
View Email, Reply
Navigation + Action
"[Client Name] (Client) sent you an email"
56
Workflow automation triggers
---
Informational
"[Automation Name] triggered: [Action Description]"
57
Lead form submissions
View
Navigation
"New lead form submission received"
58
Event and Services created from Proposal
View Event, View Services
Navigation
"Event '[Event Name]' and Services were automatically created from Proposal"
59
Meeting scheduled
---
Informational
"Meeting '[Meeting Title]' scheduled with [Participant Name] on [Date/Time]"
A.4 Payment-Related Updates (12 Types) - Visible to Agency Owner, Admin, and Project Manager only
#
Activity Type
CTA(s)
Category
Description Format
60
Invoice sent
View Invoice
Navigation
"Invoice #[Invoice Number] sent to [Client Name]"
61
Payment received
View Invoice
Navigation
"Payment of $[Amount] received from [Client Name]"
62
Automated invoice reminders sent
View Invoice
Navigation
"Automated reminder sent for Invoice #[Invoice Number]"
63
Automated email sent (from automations)
View Email
Navigation
"Automated email sent to [Recipient Name]"
64
Automated questionnaire sent
View Questionnaire
Navigation
"Automated questionnaire sent to [Client Name]"
65
Automated overdue notice sent
View Invoice
Navigation
"Automated overdue notice sent for Invoice #[Invoice Number]"
66
Invoice manually edited
View Invoice
Navigation
"[User Name] edited Invoice #[Invoice Number]"
67
Partial refund issued
View Invoice
Navigation
"Partial refund of $[Amount] issued for Invoice #[Invoice Number]"
68
Full refund issued
View Invoice
Navigation
"Full refund issued for Invoice #[Invoice Number]"
69
Contractor paid
View Invoice
Navigation
"Payment of $[Amount] sent to [Contractor Name]"
70
Failed Payment
View Invoice, Send Reminder
Navigation + Action
"Payment failed for Invoice #[Invoice Number]"
71
Overdue invoice
View Invoice, Send Reminder
Navigation + Action
"Invoice #[Invoice Number] is overdue"
✅ Files/Documents Tab
Functional Requirements Document (FRD)
Project Details → Files/Documents Tab
Module Name: Project Details - Files/Documents Tab
Version: 1.2
Last Updated: April 1, 2026
Status: Approved
1. Module Overview
1.1 Module Name
Project Details - Files/Documents Tab
1.2 Purpose
The Files/Documents Tab serves as a centralized repository for all project-related files and documents. It provides two distinct sections: "Documents & Forms" for system-generated documents created through form builders (contracts, invoices, proposals, questionnaires), and "Uploaded Files" for manually uploaded files by agency users, contractors, and clients. The tab exists at both the Project level and Event level, with specific visibility rules governing cross-level access.
1.3 Business Goals
- Provide a single location to access all project-related documents and files for improved organization and efficiency.
- Enable quick creation and sending of smart documents (contracts, proposals, questionnaires, invoices) directly from the project context.
- Maintain clear separation between system-generated documents and manually uploaded files.
- Support multi-event projects by maintaining event-level document organization while providing project-level visibility.
- Ensure appropriate document visibility based on user roles and portal access (Agency, Client, Contractor).
- Track document lifecycle status (Pending, In Progress, Completed, Expired) for better workflow management.
- Facilitate collaboration between agency users while maintaining confidentiality from clients and contractors.
1.4 Tab Location and Structure
1.4.1 Tab Location
The Files/Documents Tab exists at two levels:
Project Level:
- Located within the Project Details page under the horizontal tab navigation
- Tab order: Activity | Files/Documents | Meetings | Finances | Notes | Post Production
Event Level:
- Located within each Event's detail view
- Tab order: Services | Contractors | Raw Media | Files/Documents | Notes | Info
1.4.2 Sub-Tab Structure
Both Project-level and Event-level Files/Documents tabs contain two sub-tabs:
Sub-Tab
Description
Documents & Forms
System-generated documents created through form builders
Uploaded Files
Manually uploaded files by users
1.4.3 Default View
- Default sub-tab: "Documents & Forms"
- Default sorting: "Latest" (newest first)
- Default pagination: 10 rows per page
2. User Roles & Permissions
2.1 Agency Portal Users
Role
View Files
Upload Files
Create Smart Files
Download
Delete Own Files
Delete Any File
Agency Owner
✅ Yes
✅ Yes
✅ Yes
✅ Yes
✅ Yes
✅ Yes
Admin
✅ Yes
✅ Yes
✅ Yes
✅ Yes
✅ Yes
✅ Yes
Project Owner
✅ Yes
✅ Yes
✅ Yes
✅ Yes
✅ Yes
❌ No
Project Manager
✅ Yes
✅ Yes
✅ Yes
✅ Yes
✅ Yes
❌ No
2.2 Client Portal Users
Action
Permission
View Client Contract
✅ Yes
View Client Questionnaire
✅ Yes
View Proposal
✅ Yes
View Invoice
✅ Yes
View files uploaded by Agency
❌ No
View files uploaded by Contractors
❌ No
View own uploaded files
✅ Yes
Upload files
✅ Yes (Project and Event level)
Download files
✅ Yes (own files and documents sent to them)
Delete files
✅ Yes (own uploaded files only)
2.3 Contractor Portal Users
Action
Permission
View Service Agreement (for assigned events)
✅ Yes
View Contractor Questionnaire (for assigned events)
✅ Yes
View files uploaded by Agency
❌ No
View files uploaded by Clients
❌ No
View files uploaded by other Contractors
❌ No
View own uploaded files
✅ Yes
Upload files
✅ Yes (Event level only)
Download files
✅ Yes (own files and documents sent to them)
Delete files
✅ Yes (own uploaded files only)
2.4 Role-Specific Notes
- Documents & Forms (Smart Documents / System-generated Forms) refers to documents created through form builders: Contracts (Client Contract, Service Agreement), Proposals, Questionnaires (Client, Contractor), and Invoices.
- Agency Owner and Admin can delete any file regardless of who uploaded it.
- Project Owner and Project Manager can only delete files they uploaded themselves.
- Contractors can only access event-level data; they cannot see project-level documents or files.
- Files uploaded by agency users are visible only to other agency users (internal files).
- Files uploaded by contractors are visible only to agency users, not to clients or other contractors.
- Files uploaded by clients are visible only to agency users, not to contractors.
3. User Flow
3.1 Viewing Documents & Forms
3.1.1 The user navigates to the Project Details page and clicks on the "Files/Documents" tab.
3.1.2 The system displays the Files/Documents tab with "Documents & Forms" sub-tab selected by default.
3.1.3 The system loads and displays all documents created through form builders in a list view, sorted by latest first.
3.1.4 Each document entry displays the document icon, document name, event name (if event-level), document type, status badge, created date/time, sent to recipients, and a 3-dot action menu.
3.1.5 The user clicks on a document row to open the document activity page showing viewers, information collected, and file activity.
3.1.6 The user clicks the 3-dot menu to access additional actions: View, Download, Copy Link, Delete.
3.2 Viewing Uploaded Files
3.2.1 The user clicks on the "Uploaded Files" sub-tab.
3.2.2 The system displays all manually uploaded files in a list view, sorted by latest first.
3.2.3 Each file entry displays the file icon, file name, event name (if event-level), file type, created date/time, added by (name and role for contractors/clients), and a 3-dot action menu.
3.2.4 The user clicks on a file row to view the file. For images and PDFs, the file opens in a new browser tab. For Word and Excel files, a modal is displayed with the message "This file can't be previewed. Try downloading it instead." along with a Download button.
3.2.5 The user clicks the 3-dot menu to access additional actions: View, Download, Delete.
3.3 Uploading Files
3.3.1 The user clicks the "+" button next to the "Documents" header.
3.3.2 The system displays the "Add New Document" modal with tabs: Local File, Invoice, Proposal, Contracts, Questionnaire.
3.3.3 For local file upload, the user selects the "Local File" tab.
3.3.4 The user drags and drops files into the upload area or clicks to browse and select files.
3.3.5 The system validates each file for supported type and size (max 15 MB per file, max 15 files per session).
3.3.6 If validation passes, the user clicks "Upload File" button and the system uploads the files.
3.3.7 Upon successful upload, the files appear in the "Uploaded Files" sub-tab.
3.3.8 If validation fails, the system displays an appropriate error message.
3.4 Creating Smart Documents
3.4.1 The user clicks the "+" button and selects a document type tab (Invoice, Proposal, Contracts, or Questionnaire).
3.4.2 For Contracts, the user sees two sub-tabs: "Client Contract" and "Service Agreement".
3.4.3 For Questionnaires, the user sees two sub-tabs: "Client Questionnaires" and "Contractor Questionnaires".
3.4.4 The user can use the search bar to find specific templates or agreements.
3.4.5 The system displays available templates for the selected document type.
3.4.6 The user selects a template and clicks "Review & Send".
3.4.7 The system opens the form builder for the selected template, allowing the user to customize and send the document.
3.4.8 Upon sending, the document appears in the "Documents & Forms" sub-tab with status badge "Pending".
3.5 Viewing Files
3.5.1 The user clicks on a file row or selects "View" from the 3-dot menu.
3.5.2 For images and PDFs, the system opens the file in a new browser tab.
3.5.3 For unsupported file types (Word, Excel), the system displays a modal with the file name, "Uploaded On" date, "By" uploader name, the message "This file can't be previewed. Try downloading it instead.", and a Download button.
3.5.4 The user can download the file directly from the modal by clicking the Download button.
3.5.5 The user clicks the close button (X) to exit the modal.
3.6 Deleting Files
3.6.1 The user clicks the 3-dot menu and selects "Delete".
3.6.2 The system displays a confirmation dialog: "Are you sure you want to delete '[File Name]'? This action cannot be undone."
3.6.3 The user clicks "Delete" to confirm or "Cancel" to abort.
3.6.4 If confirmed, the system permanently deletes the file and removes it from the list.
3.6.5 The system displays a success message confirming the deletion.
3.6.6 Deleted files cannot be recovered.
3.7 Copying Document Link
3.7.1 The user clicks the 3-dot menu on a document in Documents & Forms and selects "Copy Link".
3.7.2 The system copies the shareable link to the clipboard.
3.7.3 The system displays a success message: "Link copied to clipboard."
4. Functional Logic
4.1 Project Level vs Event Level Visibility
4.1.1 Project-Level Documents & Forms Tab
- The system displays all project-level documents (Lead Form, Client Contract, Proposal, Invoice, and Client Questionnaire) when a user navigates to the Documents & Forms tab at the project level.
- All event-level documents (Service Agreement, Contractor Questionnaire) from every event within the project are also retrieved and displayed at the project level.
- For event-level documents displayed at the project level, the system shows the event name below the document name to indicate which event the document belongs to.
4.1.2 Project-Level Uploaded Files Tab
- The Uploaded Files tab at the project level displays all files uploaded directly at the project level, along with all files uploaded at the event level from every event.
- Files uploaded by contractors from all events are displayed to agency users at the project level; these files are not visible to clients or other contractors.
- Files uploaded by clients from both project and event levels are displayed to agency users at the project level; these files are not visible to contractors.
- Event-level files displayed at the project level show the event name below the file name to indicate their source event.
4.1.3 Event-Level Documents & Forms Tab
- The Documents & Forms tab at the event level displays only documents specific to that event, including Service Agreement and Contractor Questionnaire.
- Project-level documents (Client Contract, Proposal, Invoice, Client Questionnaire, Lead Form) are not displayed at the event level.
4.1.4 Event-Level Uploaded Files Tab
- The Uploaded Files tab at the event level displays only files uploaded directly at that specific event.
- Files uploaded by contractors assigned to that event and files uploaded by clients for that event are included in the event-level view.
- Project-level uploaded files are not displayed at the event level.
4.2 Cross-Level Document Creation
- Creating a client-related document (Client Contract, Proposal, Invoice, or Client Questionnaire) from the event level results in the document being created at the project level, since clients are associated with the overall project rather than individual events.
- Creating a contractor-related document (Service Agreement or Contractor Questionnaire) from the event level results in the document being created at the event level; this document becomes visible at both the event level and the project level.
- Projects with multiple events require separate service agreements for each event, even if the same contractor is assigned to multiple events.
- A contractor's signature on a service agreement for one event does not apply to other events; separate signatures are required for each event assignment.
4.3 Document Types and Hierarchy
Document Type
Created At
Target Recipient
Visible at Project Level
Visible at Event Level
Lead Form
Project (auto)
---
✅ Yes
❌ No
Client Contract
Project
Client
✅ Yes
❌ No
Client Questionnaire
Project
Client
✅ Yes
❌ No
Proposal
Project
Client
✅ Yes
❌ No
Invoice
Project
Client
✅ Yes
❌ No
Service Agreement
Event
Contractor
✅ Yes
✅ Yes (respective event)
Contractor Questionnaire
Event
Contractor
✅ Yes
✅ Yes (respective event)
4.4 Document Status Lifecycle
- Documents are assigned a "Pending" status and display a "Pending" badge upon being sent to a client or contractor.
- The status updates to "In Progress" with an "In Progress" badge once the recipient opens and views the document for the first time.
- Completing the required action (signing a contract, submitting a questionnaire, or accepting a proposal) triggers a status update to "Completed" with a "Completed" badge.
- Documents with configured expiration dates automatically transition to "Expired" status with an "Expired" badge if the expiration date passes without recipient completion.
- The status badge is displayed on the document row in the list view. (Note: This feature requires Figma design update.)
4.5 File Upload Rules
- Each uploaded file must not exceed 15 MB; files exceeding this limit are rejected with an error message.
- A maximum of 15 files can be uploaded per session; attempting to upload more than 15 files triggers an error message for the excess files.
- Supported image formats include .jpeg, .jpg, .webp, and .png; supported document formats include .pdf, .doc, .docx, .xls, and .xlsx.
- Unsupported file types are rejected with an error message indicating the accepted file formats.
- Drag-and-drop upload is supported; users can drag files directly into the upload area to initiate the upload process.
- Duplicate file names are allowed; files with identical names are stored separately without overwriting.
- No storage limits are enforced per project or per agency; unlimited file storage is permitted.
- Bulk download functionality is not available in v1; users must download files individually.
- File renaming functionality is not available; the original file name is retained after upload.
4.6 File Visibility Rules (Uploaded Files)
Uploaded By
Visible to Agency Users
Visible to Contractors
Visible to Clients
Agency User
✅ Yes
❌ No
❌ No
Contractor
✅ Yes
❌ No (only uploader sees their own)
❌ No
Client
✅ Yes
❌ No
❌ No (only uploader sees their own)
- Files uploaded by agency users remain internal and are visible only to other agency users, regardless of whether they are uploaded at the project or event level.
- Contractor-uploaded files are visible to all agency users and to the uploading contractor only; other contractors and clients cannot view these files.
- Client-uploaded files are visible to all agency users and to the uploading client only; contractors cannot view these files.
- Clients accessing the Client Portal can view only the files they have uploaded themselves; agency and contractor uploads are not visible.
- Contractors accessing the Contractor Portal can view only the files they have uploaded themselves; agency, client, and other contractor uploads are not visible.
4.7 Contractor Questionnaire Types
4.7.1 Post-Event Questionnaires
- Post-Event Questionnaires can be configured with an "Automatically send to contractors" toggle, which triggers automatic sending after the event date passes.
- Contractors receive these questionnaires as part of their post-event workflow, alongside tasks like uploading timelines and files.
- Detailed sending logic and workflow behavior are documented in the Questionnaires FRD.
4.7.2 General Contractor Questionnaires
- General Contractor Questionnaires can be sent manually to contractors at any time, independent of event completion.
- These questionnaires are not tied to any specific workflow and can be used for any purpose the agency requires.
4.8 Add New Document Modal Structure
4.8.1 Modal Tabs
- Clicking the "+" button opens the Add New Document modal with five tabs: Local File, Invoice, Proposal, Contracts, and Questionnaire.
- The Local File tab displays a file upload area with drag-and-drop support and indicates the maximum file size of 15 MB.
- The Invoice tab displays available invoice templates created by the agency (e.g., Main Invoice, Client Invoice, Contractor Invoice).
- The Proposal tab displays available proposal templates created by the agency.
- The Contracts tab contains two sub-tabs: "Client Contract" for contract templates sent to clients, and "Service Agreement" for agreement templates sent to contractors.
- The Questionnaire tab contains two sub-tabs: "Client Questionnaires" for questionnaire templates sent to clients, and "Contractor Questionnaires" for templates sent to contractors.
- The Contractor Questionnaires sub-tab displays two sections: "Post-Event Questionnaires" and "General Contractor Questionnaires".
4.8.2 Search Functionality
- A search bar is available in the Contracts and Questionnaire tabs, allowing users to search for specific templates or agreements.
- Entering a search term filters the displayed list to show only matching templates or agreements.
4.8.3 Template Names
- Invoice templates can be given any custom name by the agency (e.g., "Contractor Invoice" is simply a template name).
- All invoices are sent to clients regardless of their template name; the name does not affect the recipient or document behavior.
4.9 Service Agreement Modal Structure
- The Service Agreement sub-tab displays agreements grouped by event name, with each event shown as a section header with its name and color indicator.
- Under each event section, all contractors assigned to that event are listed with their avatar, name, and role (e.g., "Nick Robinson - Photographer").
- Each contractor entry displays the service agreement name and expiration information (e.g., "Expires in 2 weeks after sending to recipient", "No expiration date", or "Expiration date Aug 17, 2024").
- A "Review & Send" button is displayed for agreements that have not been sent; clicking this button opens the form builder for review and customization.
- An "Automatically Sent" badge replaces the "Review & Send" button for agreements that were auto-sent via system settings.
- Events with no assigned contractors are not displayed in the Service Agreement modal.
- Search functionality is available within the modal to filter and find specific agreements.
4.10 Sorting and Pagination
- The default sort order for the Files/Documents tab is "Latest" (newest first).
- Two sorting options are available via the sort dropdown: "Latest" and "Oldest".
- Selecting "Oldest" reorders the list to display the oldest items first.
- The default pagination setting is 10 rows per page.
- Four pagination options are available: 10, 25, 50, and 100 rows per page.
- Selecting a different rows-per-page option updates the list accordingly.
- Search and filter functionality are not available within the Files/Documents tab.
4.11 3-Dot Menu Actions
4.11.1 Documents & Forms Actions
- The 3-dot menu on documents provides four actions: View, Download, Copy Link, and Delete.
- Selecting "View" opens the document activity page, which displays:
- Viewer information (who has viewed the document and when)
- Information Collected section (form responses if applicable)
- File Activity log (creation, sending, viewing events)
- "Download PDF" and "View Contract/Document" buttons in the header
- Selecting "Download" initiates a download of the document to the user's device.
- Selecting "Copy Link" copies the shareable document link to the clipboard and displays a success confirmation message.
- Selecting "Delete" triggers a confirmation dialog before proceeding with deletion.
4.11.2 Uploaded Files Actions
- The 3-dot menu on uploaded files provides three actions: View, Download, and Delete.
- Selecting "View" for an image (.jpg, .jpeg, .png, .webp) or PDF opens the file in a new browser tab.
- Selecting "View" for a Word (.doc, .docx) or Excel (.xls, .xlsx) file displays a modal with the file name, upload date, uploader name, the message "This file can't be previewed. Try downloading it instead.", and a Download button.
- Selecting "Download" initiates a download of the file to the user's device.
- Selecting "Delete" triggers a confirmation dialog before proceeding with deletion.
4.11.3 Document Activity Page
- The Document Activity Page is displayed when a user selects "View" from the 3-dot menu on a document in the Documents & Forms section, or clicks on a document row.
- The page header displays:
- Back arrow to return to the Files/Documents tab
- Document name with status badge (e.g., "In Progress", "Completed", "Pending", "Expired")
- "Download PDF" button to download the document
- "View [Document Type]" button (e.g., "View Contract") to open the full document
- The page displays a list of viewers showing:
- User avatar and name
- View status ("Viewed" or "Not viewed")
- Last viewed date and time (if viewed) or "N/A" (if not viewed)
- The "Information Collected" section displays:
- Form field responses submitted by the recipient (if applicable)
- Empty state message "No information collected yet. Wait until your client complete contract from his side." when no responses exist
- The "File Activity" section displays a chronological log of events including:
- Document creation (e.g., "The contract has been successfully created by [User Name]")
- Document sending (e.g., "The contract has been successfully sent by [User Name]")
- Document viewing (e.g., "The contract has been viewed by [User Name]")
- Document completion/signing (e.g., "The contract has been signed by [User Name]")
- Each activity entry shows the date and time
4.12 File and Document Deletion Logic
4.12.1 Delete Permissions
- Agency Owners and Admins can delete any file or document, regardless of who originally uploaded or created the item.
- Project Owners and Project Managers can delete only files they uploaded themselves; attempting to delete another user's file results in a permission denied error.
- Clients can delete only files they uploaded via the Client Portal.
- Contractors can delete only files they uploaded via the Contractor Portal.
4.12.2 Delete Confirmation
- Selecting "Delete" displays a confirmation dialog with the message: "Are you sure you want to delete '[File/Document Name]'? This action cannot be undone."
- Clicking "Delete" in the confirmation dialog proceeds with permanent deletion; clicking "Cancel" closes the dialog without any action.
4.12.3 Permanent Deletion
- Deleted files and documents are permanently removed from the database and file storage with no backup copy retained.
- A success message ("File deleted successfully." or "Document deleted successfully.") is displayed upon successful deletion, and the item is immediately removed from the list view.
- No recovery option is available because there is no trash or recycle bin feature.
4.12.4 Delete Restrictions (Permission-Based)
- Users without sufficient permissions who attempt to delete a file receive an error message: "You do not have permission to delete this file."
- The Delete option remains visible and clickable in the 3-dot menu for all documents; permission errors are shown upon clicking.
4.12.5 Document-Specific Deletion Restrictions (Status-Based)
Certain document types have deletion restrictions based on their completion status. These restrictions apply to all users, including Agency Owner and Admin (no role-based override).
Restricted Documents:
Document Type
Can Delete
Cannot Delete
Delete Option Behavior
Service Agreement
Pending, In Progress
Signed by contractor
Visible; shows restriction dialog
Client Contract
Pending, In Progress
Signed by client
Visible; shows restriction dialog
Proposal
Pending, In Progress
Accepted by client
Visible; shows restriction dialog
Invoice
Pending, In Progress
Any payment received (partial or full)
Visible; shows restriction dialog
Lead Form
—
Never deletable (any status)
Hidden from kebab menu
Unrestricted Documents:
Document Type
Deletion Rule
Client Questionnaire
Always deletable (any status, even if filled/submitted)
Contractor Questionnaire
Always deletable (any status, even if filled/submitted)
Deletion Restriction Behavior:
- The Delete option remains visible and clickable in the 3-dot menu for Service Agreements, Client Contracts, Proposals, and Invoices regardless of their status.
- When a user clicks Delete on a restricted document (signed/accepted/paid), the system displays a dialog instead of the delete confirmation dialog.
- The restriction dialog displays:
- Message: "This document cannot be deleted as it has already been signed or has payment associated with it."
- Close button to dismiss the dialog
- Clicking the Close button closes the dialog and returns the user to the document list.
- For Lead Forms, the Delete option is completely hidden from the 3-dot menu; users cannot attempt to delete Lead Forms.
- This restriction applies to all users including Agency Owner and Admin; no user can override this restriction.
4.13 Link Sharing and Expiration
- Shareable links can be generated for Documents & Forms via the "Copy Link" action; the link is copied to the clipboard upon selection.
- Uploaded files do not support link sharing in v1; only smart documents created through form builders can be shared via link.
- Document expiration is optional and can be enabled via a toggle in the form builder during document creation.
- Enabling expiration allows the user to set an expiration period (e.g., "2 weeks after sending" or a specific date).
- Documents automatically transition to "Expired" status once the expiration date passes without recipient completion.
- Recipients attempting to access an expired document link see the message: "This document has expired. Please contact the sender for a new link."
- Password protection for shareable links is not available; links are accessible to anyone with the URL.
4.14 Empty States
4.14.1 Documents & Forms - Empty State
- An empty Documents & Forms tab displays the message: "No documents yet. Create contracts, invoices, proposals, or questionnaires to share with your clients and contractors."
- A "+ Create Document" CTA button is displayed, which opens the Add New Document modal when clicked.
4.14.2 Uploaded Files - Empty State
- An empty Uploaded Files tab displays the message: "No files uploaded yet. Upload files to keep all your project documents organized in one place."
- A "+ Upload File" CTA button is displayed, which opens the Add New Document modal with the Local File tab selected when clicked.
4.15 File View Behavior
- Clicking on an image file (.jpeg, .jpg, .webp, .png) or PDF opens the file in a new browser tab for viewing.
- Word documents (.doc, .docx) and Excel files (.xls, .xlsx) cannot be viewed directly; selecting "View" displays a modal with the message: "This file can't be previewed. Try downloading it instead."
- The non-previewable file modal displays:
- File name in the top left corner
- "Uploaded On [Date]" below the file name
- "By [User Name]" after the upload date
- Message: "This file can't be previewed. Try downloading it instead."
- A Download button to download the file
- A close button (X) in the top right corner
- Navigation controls to move between files (previous/next) are not available; each file must be viewed individually.
- Lightbox or gallery view for images is not available; each image opens in a separate browser tab.
4.16 Activity Tab Integration
- File uploads by any user are logged as activity entries with View and Download CTAs.
- Document creation (Contract, Questionnaire, Proposal, Invoice) is logged as an activity entry with a View CTA.
- Sending a document to a client or contractor is logged as an activity entry indicating the document was sent.
- A recipient viewing a document for the first time is logged as an activity entry indicating the document was viewed.
- Completing a document action (signing a contract, submitting a questionnaire, accepting a proposal) is logged as an activity entry indicating completion.
4.17 Notification Rules
- Agency users assigned to a project receive notifications when clients or contractors upload files to that project.
- Agency users not assigned to the project do not receive upload notifications.
- Clients receive notifications when an agency user sends them a document (Contract, Questionnaire, Proposal, or Invoice).
- Contractors receive notifications when an agency user sends them a document (Service Agreement or Contractor Questionnaire).
4.18 Data Persistence Rules
- Files uploaded by a contractor remain visible to agency users even after the contractor is removed from the event or project.
- Files uploaded by a client remain visible to agency users even after the client is removed from the project.
- Files and documents associated with a deleted event are retained at the project level; the event name is replaced with "[Deleted Event]" indicator.
- Deleting an event does not permanently remove event-level files and documents; they remain accessible at the project level.
5. Field Details & Validations
5.1 Documents & Forms - List View Columns
Column Name
Field Type
Description
Icon
Image
Document type icon (color-coded by type)
Name
Text
Document name; Event name displayed below in smaller text if event-level document
Type
Text
Document type: Invoice, Contract, Proposal, Questionnaire, Survey, Lead Form
Status
Badge
Status indicator: Pending, In Progress, Completed, Expired (Figma update required)
Created
DateTime
Date and time document was created (format: DD MMM YYYY, HH:MM AM/PM)
Sent To
Avatar Group
Avatars of all recipients the document was sent to; "+N" indicator if many recipients
Actions
Menu
3-dot menu with View, Download, Copy Link, Delete
5.2 Uploaded Files - List View Columns
Column Name
Field Type
Description
Icon
Image
File type icon based on extension
Name
Text
File name; Event name displayed below in smaller text if event-level file
Type
Text
File extension in short form (Doc, PDF, JPG, PNG, XLS, etc.)
Created
DateTime
Date and time file was uploaded (format: DD MMM YYYY, HH:MM AM/PM)
Added By
Text + Avatar
User avatar, name, and role; Role displayed in smaller text for Contractor/Client only (not for agency users)
Actions
Menu
3-dot menu with View, Download, Delete
5.3 File Upload Validations
Field
Validation Rule
Error Message
File Type
Must be .jpeg, .jpg, .webp, .png, .pdf, .doc, .docx, .xls, .xlsx
"This file type is not supported. Please upload jpeg, jpg, webp, png, pdf, doc, docx, xls, or xlsx files."
File Size
Must not exceed 15 MB
"File size exceeds the 15 MB limit. Please upload a smaller file."
File Count
Maximum 15 files per upload session
"You can upload a maximum of 15 files at once. Please remove some files and try again."
5.4 Non-Previewable File Modal Fields (Word/Excel)
Field
Position
Description
File Name
Top left
Full name of the file (e.g., "2. Dashboard.docx")
Uploaded On
Below file name
Date the file was uploaded (format: "Uploaded On [Day], [Month] [DD], [YYYY]")
By
After upload date
Name of the user who uploaded the file
Message
Center
"This file can't be previewed. Try downloading it instead."
Download Button
Center (below message)
Primary button to download the file
Close Button (X)
Top right corner
Button to close the modal
5.5 Add New Document Modal - Local File Tab
Field
Description
Upload Area
Drag and drop zone with upload icon and "Upload file" text
Max Size Note
Text below upload area: "Max size of 15 MB"
Cancel Button
Secondary button to close modal
Upload File Button
Primary button to confirm upload
5.6 Document Activity Page Fields
Section
Field
Description
Header
Back Arrow
Returns to Files/Documents tab
Header
Document Name
Name of the document with status badge
Header
Download PDF Button
Downloads the document as PDF
Header
View [Type] Button
Opens the full document (e.g., "View Contract")
Viewers List
User Avatar
Profile picture of the viewer
Viewers List
User Name
Name of the viewer (e.g., "Aaron Ramsdale (You)")
Viewers List
View Status
"Viewed" or "Not viewed"
Viewers List
Last Viewed
Date and time of last view, or "N/A"
Information Collected
Form Responses
Responses submitted by recipient (if any)
Information Collected
Empty State
"No information collected yet. Wait until your client complete contract from his side."
File Activity
Activity Entry
Description of activity (e.g., "The contract has been successfully sent by [User Name]")
File Activity
Activity Timestamp
Date and time of activity (e.g., "16 Dec 2024 · 1:31 PM")
5.7 Deletion Restriction Dialog Fields
Field
Position
Description
Message
Center
"This document cannot be deleted as it has already been signed or has payment associated with it."
Close Button
Bottom center
Primary button to dismiss the dialog and return to document list
6. Success Message Handling
Action
Success Message
Post-Success Behavior
Single File Upload
"File uploaded successfully."
File appears in Uploaded Files list
Multiple Files Upload
"[X] files uploaded successfully."
Files appear in Uploaded Files list
Document Created
"Document created successfully."
Document appears in Documents & Forms list
Document Sent
"Document sent successfully."
Status changes to "Pending"; recipient notified
File Download
No toast message
File download begins in browser
Link Copied
"Link copied to clipboard."
Link available in clipboard
File Deleted
"File deleted successfully."
File removed from list
Document Deleted
"Document deleted successfully."
Document removed from list
7. Error Message Handling
Error Scenario
Error Message
Trigger Condition
User Action Required
Unsupported File Type
"This file type is not supported. Please upload jpeg, jpg, webp, png, pdf, doc, docx, xls, or xlsx files."
User attempts to upload unsupported file type
Select a supported file type
File Size Exceeded
"File size exceeds the 15 MB limit. Please upload a smaller file."
User attempts to upload file larger than 15 MB
Compress or resize the file
Max Files Exceeded
"You can upload a maximum of 15 files at once. Please remove some files and try again."
User attempts to upload more than 15 files
Reduce number of files
Upload Failed
"Failed to upload file. Please try again."
Network error or server error during upload
Retry the upload
Offline Upload
"You appear to be offline. Please check your connection and try again."
User attempts upload without internet connection
Connect to internet and retry
Large File Timeout
"Upload timed out. Please try again or upload a smaller file."
Upload takes too long due to large file size
Retry or upload smaller file
Corrupted File
"This file appears to be corrupted. Please try uploading a different file."
File is corrupted or invalid
Upload a different file
Preview Not Available
"This file can't be previewed. Try downloading it instead."
User attempts to view Word or Excel file
Download the file to view
Delete Failed
"Failed to delete file. Please try again."
Network error during delete operation
Retry the delete
Permission Denied (Delete)
"You do not have permission to delete this file."
User without delete permission attempts delete
Contact admin if access needed
Document Deletion Restricted
Dialog: "This document cannot be deleted as it has already been signed or has payment associated with it."
User attempts to delete a signed Service Agreement, signed Contract, accepted Proposal, or Invoice with payment
Click Close button to dismiss dialog; document cannot be deleted
Document Expired (Link Access)
"This document has expired. Please contact the sender for a new link."
Recipient accesses expired document link
Contact document sender
Download Failed
"Failed to download file. Please try again."
Network error during download
Retry the download
Copy Link Failed
"Failed to copy link. Please try again."
Clipboard access denied or error
Retry or manually copy URL
8. Edge Cases
Edge Case
System Behavior
Duplicate file names uploaded
System auto-renames the new file by appending an incrementing number suffix in parentheses. E.g., if 'Photography' already exists, the new upload is saved as 'Photography(1)'. Subsequent duplicates become 'Photography(2)', etc. Original file remains unchanged; new file stored with suffixed name.
File uploaded while offline
Upload does not proceed; offline error message displayed
Preview requested for Word/Excel file
Modal displayed with "This file can't be previewed. Try downloading it instead." message; user can download
Same contractor assigned to multiple events
Each event has a separate service agreement; all visible at project level; contractor sees each in their portal under respective events
Client uploads file at event level
File visible at both event level and project level for agency users
Contractor uploads file
File created at event level; visible at event level and project level for agency users only
User creates client document from event level
Document is created at project level, not visible at event level
All documents deleted from list
Empty state message displayed with CTA to create document
Maximum pagination reached
Standard pagination behavior; last page indicator shown
User with delete-own-only permission tries to delete others' files
"You do not have permission to delete this file" error displayed
User attempts to delete signed Service Agreement
Restriction dialog displayed with message: "This document cannot be deleted as it has already been signed or has payment associated with it." User clicks Close to dismiss.
User attempts to delete signed Client Contract
Restriction dialog displayed with message: "This document cannot be deleted as it has already been signed or has payment associated with it." User clicks Close to dismiss.
User attempts to delete accepted Proposal
Restriction dialog displayed with message: "This document cannot be deleted as it has already been signed or has payment associated with it." User clicks Close to dismiss.
User attempts to delete Invoice with payment
Restriction dialog displayed with message: "This document cannot be deleted as it has already been signed or has payment associated with it." User clicks Close to dismiss. Applies to both partial and full payments.
User attempts to delete filled Questionnaire
Deletion proceeds normally; questionnaires are always deletable regardless of completion status
Lead Form delete option
Delete option is hidden from the 3-dot menu for Lead Forms; users cannot attempt to delete Lead Forms
Agency Owner/Admin attempts to delete restricted document
Same restriction applies; no role-based override available for signed/paid documents or Lead Forms
Document sent to multiple recipients
All recipient avatars displayed in "Sent To" column with "+N" indicator if overflow
Very long file name
File name truncates with ellipsis; full name shown on hover tooltip
Project has no events
Only project-level documents and files are available; no event-level content
Event has no contractors assigned
Service Agreement tab does not show that event section
Contractor removed from event
Contractor's previously uploaded files remain visible to agency users
Client removed from project
Client's previously uploaded files remain visible to agency users
Event deleted from project
Event-level files/documents remain at project level with "[Deleted Event]" shown as event name
Service Agreement auto-sent
"Automatically Sent" badge displayed instead of "Review & Send" button
Expired document in list
"Expired" status badge displayed on the document row
User accesses expired document link
"This document has expired. Please contact the sender for a new link." message displayed
No templates exist for document type
Empty list shown in Add New Document modal for that tab
Search in modal returns no results
"No results found" message displayed in modal
9. Acceptance Criteria
9.1 Tab Structure
- AC-1: The Files/Documents tab shall be accessible at both Project level and Event level.
- AC-2: The tab shall contain two sub-tabs: "Documents & Forms" and "Uploaded Files".
- AC-3: "Documents & Forms" shall be the default selected sub-tab.
- AC-4: The list shall be sorted by "Latest" (newest first) by default.
9.2 Documents & Forms Display
- AC-5: All system-generated documents shall be displayed in the Documents & Forms tab.
- AC-6: Each document shall display icon, name, type, status badge, created date/time, sent to recipients, and action menu.
- AC-7: Event-level documents shall display the event name below the document name.
- AC-8: Document status shall be displayed as a badge (Pending, In Progress, Completed, Expired).
9.3 Uploaded Files Display
- AC-9: All manually uploaded files shall be displayed in the Uploaded Files tab.
- AC-10: Each file shall display icon, name, type, created date/time, added by, and action menu.
- AC-11: "Added By" column shall display user name and role (for Contractor/Client only, not for agency users).
- AC-12: Event-level files shall display the event name below the file name.
9.4 File Upload
- AC-13: Users shall be able to upload files up to 15 MB each.
- AC-14: Users shall be able to upload up to 15 files per upload session.
- AC-15: Drag and drop upload shall be supported.
- AC-16: Only supported file types (.jpeg, .jpg, .webp, .png, .pdf, .doc, .docx, .xls, .xlsx) shall be accepted.
- AC-17: Appropriate error messages shall be displayed for validation failures.
- AC-18: Duplicate file names shall be allowed.
9.5 Smart Document Creation
- AC-19: The "Add New Document" modal shall display tabs for Local File, Invoice, Proposal, Contracts, Questionnaire.
- AC-20: Contracts tab shall have sub-tabs for Client Contract and Service Agreement.
- AC-21: Questionnaire tab shall have sub-tabs for Client Questionnaires and Contractor Questionnaires.
- AC-22: Contractor Questionnaires shall have sections for Post-Event and General questionnaires.
- AC-23: Service Agreement shall be grouped by event with contractors listed under each event.
- AC-24: Search bar shall be available in Contracts and Questionnaire tabs.
- AC-25: Creating client documents from event level shall create them at project level.
- AC-26: Auto-sent service agreements shall display "Automatically Sent" badge instead of "Review & Send" button.
9.6 File View
- AC-27: Images (.jpeg, .jpg, .webp, .png) and PDFs shall open in a new browser tab when "View" is selected.
- AC-28: Word and Excel files shall display a modal with "This file can't be previewed. Try downloading it instead." message and a Download button.
- AC-29: Non-previewable file modal shall display file name, upload date, uploader name, message, Download button, and close button.
- AC-30: No navigation between files in view mode.
9.7 File Actions and Deletion
- AC-31: Documents & Forms shall have View, Download, Copy Link, and Delete actions. View action shall open the document activity page.
- AC-32: Uploaded Files shall have View, Download, and Delete actions.
- AC-33: Delete action shall require confirmation dialog.
- AC-34: Agency Owner and Admin shall be able to delete any file.
- AC-35: Project Owner and Project Manager shall only be able to delete their own uploaded files.
- AC-36: Deleted files cannot be recovered.
- AC-37: Users without delete permission shall see "Permission denied" error when attempting to delete others' files.
- AC-38: Signed Service Agreements shall not be deletable by any user.
- AC-39: Signed Client Contracts shall not be deletable by any user.
- AC-40: Accepted Proposals shall not be deletable by any user.
- AC-41: Invoices with any payment (partial or full) shall not be deletable by any user.
- AC-42: Client Questionnaires shall be deletable regardless of completion status.
- AC-43: Contractor Questionnaires shall be deletable regardless of completion status.
- AC-44: Lead Forms shall not be deletable; Delete option shall be hidden from the kebab menu.
- AC-45: Delete option shall remain visible and clickable for Service Agreements, Client Contracts, Proposals, and Invoices; restriction dialog shall be shown when attempting to delete restricted documents.
- AC-46: Restriction dialog shall display message: "This document cannot be deleted as it has already been signed or has payment associated with it." with a Close button.
9.8 Project vs Event Level Visibility
- AC-47: Project-level tab shall display all project-level and event-level documents and files.
- AC-48: Event-level tab shall only display documents and files specific to that event.
- AC-49: Project-level documents shall not appear at event level.
- AC-50: Event-level documents and files shall be visible at both levels with event name displayed.
9.9 Cross-Portal Visibility
- AC-51: Agency-uploaded files shall only be visible to agency users.
- AC-52: Contractor-uploaded files shall only be visible to agency users and the uploading contractor.
- AC-53: Client-uploaded files shall only be visible to agency users and the uploading client.
- AC-54: Contractors shall not see files uploaded by clients or other contractors.
- AC-55: Clients shall not see files uploaded by contractors or agency users.
9.10 Data Persistence
- AC-56: Files uploaded by removed contractors shall remain visible to agency users.
- AC-57: Files uploaded by removed clients shall remain visible to agency users.
- AC-58: Files from deleted events shall remain at project level with "[Deleted Event]" indicator.
9.11 Pagination and Sorting
- AC-59: Default pagination shall be 10 rows per page.
- AC-60: Pagination options shall include 10, 25, 50, 100.
- AC-61: Sorting options shall include Latest (default) and Oldest.
9.12 Notifications
- AC-62: Agency users who are part of the project shall receive notifications when clients or contractors upload files.
- AC-63: Clients and contractors shall receive notifications when agency sends them documents.
9.13 Link Sharing and Expiration
- AC-64: Shareable links shall be available for Documents & Forms only (not Uploaded Files).
- AC-65: Expired document links shall display appropriate expiration message.
- AC-66: Copy Link action shall copy link to clipboard with success confirmation.
9.14 Error Handling
- AC-67: Appropriate error messages shall be displayed for all error scenarios as defined in Section 7.
- AC-68: Offline upload attempts shall be prevented with appropriate messaging.
- AC-69: Corrupted or invalid files shall be rejected with error message.
10. Manual Test Cases
Test cases: Click Here
11. Dependencies
Dependency Type
Dependency Name
Description
Impact if Unavailable
Internal Module
Lead Form Module
Source for auto-added lead forms
Lead forms not displayed
Internal Module
Contract Module
Form builder for client contracts
Cannot create client contracts
Internal Module
Service Agreement Module
Form builder for service agreements
Cannot create service agreements
Internal Module
Proposal Module
Form builder for proposals
Cannot create proposals
Internal Module
Invoice Module
Form builder for invoices
Cannot create invoices
Internal Module
Questionnaire Module
Form builder for questionnaires
Cannot create questionnaires
Internal Module
Event Management
Event data for event-level documents
Event association fails
Internal Module
Contractor Management
Contractor data for service agreements
Cannot assign agreements to contractors
Internal Module
Client Management
Client data for client documents
Cannot associate documents with clients
Internal Module
Activity Tab
Logs file-related activities
Activity logging fails
Internal Service
File Storage Service
Stores uploaded files
File upload/download fails
Internal Service
Notification Service
Sends upload/document notifications
Notifications not sent
External Service
Email Service
Sends document links to recipients
Document sending fails
User Settings
Date & Time Preferences
Formats timestamps
Falls back to system defaults
12. References
- Figma Link:
Appendix A: Document Type Reference
A.1 Client-Facing Documents (Project Level)
Document Type
Created Via
Recipient
Visible at Project
Visible at Event
Status Tracking
Expiration
Lead Form
Auto (Lead submission)
---
✅ Yes
❌ No
N/A
No
Client Contract
Form Builder
Client
✅ Yes
❌ No
✅ Yes
Optional
Client Questionnaire
Form Builder
Client
✅ Yes
❌ No
✅ Yes
Optional
Proposal
Form Builder
Client
✅ Yes
❌ No
✅ Yes
Optional
Invoice
Form Builder
Client
✅ Yes
❌ No
✅ Yes
No
A.2 Contractor-Facing Documents (Event Level)
Document Type
Created Via
Recipient
Visible at Project
Visible at Event
Status Tracking
Expiration
Service Agreement
Form Builder
Contractor
✅ Yes (with event name)
✅ Yes
✅ Yes
Optional
Post-Event Questionnaire
Form Builder (auto-send option)
Contractor
✅ Yes (with event name)
✅ Yes
✅ Yes
Optional
General Contractor Questionnaire
Form Builder
Contractor
✅ Yes (with event name)
✅ Yes
✅ Yes
Optional
A.3 Uploaded Files Visibility Matrix
Uploaded By
Upload Level
Visible at Project Level
Visible at Event Level
Visible to Agency
Visible to Client
Visible to Contractor
Agency User
Project
✅ Yes
❌ No
✅ Yes
❌ No
❌ No
Agency User
Event
✅ Yes (with event name)
✅ Yes
✅ Yes
❌ No
❌ No
Client
Project
✅ Yes
❌ No
✅ Yes
✅ Own only
❌ No
Client
Event
✅ Yes (with event name)
✅ Yes
✅ Yes
✅ Own only
❌ No
Contractor
Event
✅ Yes (with event name)
✅ Yes
✅ Yes
❌ No
✅ Own only
☑️ Finance Tab
Functional Requirements Document (FRD) Project Overview > Finance Tab
Document Information
Attribute
Details
Module Name
Project Overview > Finance Tab
Version
1.0
Created Date
December 24, 2025
1. Module Overview
1.1 Module Name
Project Overview > Finance Tab
1.2 Purpose
The Finance Tab provides a comprehensive financial dashboard within the Project Details module, displaying all financial information related to a project. It consolidates income (payments received from clients) and expenses (payments made to contractors) into a single view, enabling agency owners and administrators to monitor project profitability, track payment statuses, and manage financial transactions efficiently.
1.3 Business Goals
- Provide a centralized view of all project-related financial data for agency owners and administrators.
- Enable real-time tracking of client payments and contractor expenses within a project context.
- Calculate and display project profitability metrics including total revenue, expenses, and profit margins.
- Streamline payment management by allowing users to initiate, track, and reconcile payments from a single interface.
- Improve financial visibility by displaying payment statuses, due dates, and outstanding balances.
- Support informed decision-making through accurate financial summaries tied to project performance.
2. User Roles & Permissions
Role
View Finance Tab
View Financial Summary
View Client Payments
View Contractor Payments
Create Invoice
Mark as Paid
Process Refund
Make Payment to Contractor
Ask for Refund from Contractor
Agency Owner
✓
✓
✓
✓
✓
✓
✓
✓
✓
Admin
✓
✓
✓
✓
✓
✗
✗
✗
✗
Note: Only Agency Owner and Admin roles have access to the Finance Tab. Other roles do not have visibility into project financial data.
3. User Flow
3.1 The user navigates to the Projects module from the left sidebar menu.
3.2 The system displays the list of all projects available to the user based on their permissions.
3.3 The user clicks on a specific project to open the Project Details page.
3.4 The system loads the Project Details page with the Overview tab selected by default, displaying event cards and tab navigation.
3.5 The user clicks on the "Finances" tab from the tab navigation bar (Activity | Files/Documents | Meetings | Finances | Notes | Post Production).
3.6 The system loads the Finance Tab and displays the Financial Summary section with Total Project Price, Remaining Balance Due, Total Expenses, and Total Margin/Profit.
3.7 The system displays the "Create Invoice" CTA button below the Financial Summary section.
3.8 The system loads and displays the "Payments from Client" section showing all client payment records in a tabular format.
3.9 The system loads and displays the "Payments to Contractors" section showing all contractor payment records with their respective event assignments.
3.10 The user reviews the Financial Summary to understand the overall project financial health.
3.11 The user scrolls down to view detailed payment records from clients and payments to contractors.
3.12 The user clicks on a payment row's kebab menu to access available actions based on the payment status.
3.13 The system displays the appropriate action options based on the selected payment's current status.
3.14 The user performs the desired action (View Invoice, Mark as Paid, Refund, Make Payment, etc.).
3.15 The system processes the action and updates the payment status and financial calculations accordingly.
3.16 The user clicks on "Amount Paid" in the Payments to Contractors section to view the contractor's payment history.
3.17 The system opens the Payment History modal, displaying all payment transactions for the selected contractor.
3.18 The user reviews the payment history details, including issue date, paid date, payment method, amount, and status.
3.19 The user clicks "View Invoice" to view a specific contractor invoice in PDF preview modal.
3.20 The user clicks "Close" button to close the Payment History modal and return to the Finance Tab.
3.21 The user clicks "View All" link in the Payments from Client section to navigate to the Billing > Transactions tab with the project filter applied.
4. Functional Logic
4.1 Empty States
4.1.1 No Proposal and No Invoice State
- When no proposal has been sent and no invoice has been created for the project, the system displays the Financial Summary section with all values showing $0.00.
- The system displays an empty state message: "No proposal or invoice has been created for this project yet. Send a proposal or create an invoice to start tracking finances."
- The empty state includes a "Create Invoice" CTA button and optionally a "Send Proposal" CTA button to guide the user.
- The "Payments from Client" section displays the message: "No payments scheduled. Create an invoice or send a proposal to set up a payment schedule."
- The "Payments to Contractors" section displays the message: "No contractors have been assigned yet. Assign a contractor to an event to track payments."
4.1.2 Proposal Sent but Not Signed State
- When a proposal has been sent to the client but not yet signed, the system displays the Financial Summary section with values based on the proposal amounts (as projected figures).
- The system displays a status message: "Awaiting client to sign the proposal contract."
- The "Payments from Client" section displays the projected payment schedule from the proposal with all statuses showing as "Unpaid."
- Once the client signs the proposal, the system updates all financial calculations and payment schedules accordingly.
4.1.3 No Contractors Assigned State
- When no contractors have been assigned to any event within the project, the "Payments to Contractors" section displays an empty state.
- The system displays the message: "No contractors have been assigned yet. Assign a contractor to an event to track payments."
- The Total Expenses in the Financial Summary show $0.00.
- The Total Margin/Profit equals the Total Project Price when no contractors are assigned.
4.2 Financial Summary Section
4.2.1 Total Project Price Calculation
- The Total Project Price represents the total amount the client will pay to the agency for the entire project.
- If the client has signed a Proposal, the Total Project Price is calculated as the sum of the selected package price and all selected A la carte items price from the signed proposal.
- If the client has not signed any proposal, the Total Project Price is determined by the sum of all invoices sent by the agency to the client for that project.
- If multiple invoices exist for a project without a signed proposal, the system calculates the Total Project Price as the sum of all invoice amounts.
- If an invoice is voided (due to project deletion) or removed/deleted, the corresponding invoice amount is deducted from the Total Project Price.
- If the client has signed a proposal and the agency sends additional service invoices for services beyond the original proposal scope, the Total Project Price is calculated as: (Price of Selected Package) + (Price of Selected À La Carte Items) + (Sum of All Additional Service Invoices).
- The Total Project Price updates in real-time whenever new invoices are created, existing invoices are modified, or invoices are voided/deleted.
- The system displays the Total Project Price in USD currency format with two decimal places.
4.2.2 Remaining Balance Due Calculation
- The Remaining Balance Due represents the outstanding amount the client has yet to pay to the agency.
- The system calculates the Remaining Balance Due using the formula: Total Project Price - Total Amount Paid by Client.
- The Total Amount Paid by Client is the sum of all successful payment transactions received from the client across all payment schedules.
- If the client has made multiple partial payments, the system sums all individual payment amounts to determine the total paid.
- When a refund is processed for a client payment, the refunded amount is added back to the Remaining Balance Due.
- The Remaining Balance Due cannot be negative; if overpayment occurs, the system tracks it separately for refund processing.
- The system updates the Remaining Balance Due in real-time after each successful payment or refund transaction.
4.2.3 Total Expenses Calculation
- The Total Expenses represent the total expenditure the agency incurs to complete the project successfully.
- The system calculates Total Expenses as the sum of all contractor fees (Event Prices) for all contractors assigned to all events within the project.
- For each contractor, the Event Price is the agreed-upon amount the agency committed to pay when assigning the contractor to an event.
- If a contractor has not been paid yet (Amount Paid = $0), their full Event Price is still counted toward Total Expenses.
- If a contractor is paid less than their agreed Event Price, the system uses the agreed Event Price (not the actual paid amount) for expense calculation.
- If a contractor is paid more than their agreed Event Price (overage), the system uses the actual paid amount instead of the original Event Price for expense calculation.
- When a contractor is unassigned from an event and has not received any payment, the entire Event Price is deducted from Total Expenses.
- When a contractor is unassigned from an event after receiving partial or full payment without refund, only the actual Amount Paid is retained in Total Expenses.
- The system recalculates Total Expenses dynamically whenever contractors are assigned, unassigned, or payments are processed.
4.2.4 Total Margin/Profit Calculation
- The Total Margin/Profit represents the agency's profit from the project after accounting for all contractor expenses.
- The system calculates Total Margin/Profit using the formula: Total Project Price - Total Expenses.
- The Total Margin/Profit can be negative if Total Expenses exceed the Total Project Price.
- The system displays the Total Margin/Profit in USD currency format with appropriate positive/negative indication.
- The Total Margin/Profit updates automatically whenever Total Project Price or Total Expenses change.
4.2.5 Create Invoice CTA
- The "Create Invoice" button is displayed below the Financial Summary section.
- When the user clicks the "Create Invoice" button, the system redirects them to the Invoice Builder module.
- The Invoice Builder is pre-populated with the current project context to streamline invoice creation.
- The "Create Invoice" button is always visible and enabled for Agency Owner and Admin roles.
4.3 Payments from Client Section
4.3.1 Section Overview
- The "Payments from Client" section displays all payment records associated with the project in a tabular format.
- Payments are derived from the payment schedule defined in the signed Proposal or manually created Invoices.
- The section displays columns: Status, Payment Date, Due Date, Amount, Action.
- The default sort order is by Due Date in ascending order (earliest due date first).
- All columns are sortable except status and action column; users can click on column headers to change the sort order.
4.3.2 Payment Statuses
- Unpaid: The initial state for all scheduled payments awaiting client action; no payment has been initiated.
- Processing: The payment has been initiated by the client and is awaiting confirmation from the payment gateway.
- Paid: The payment has been successfully completed, and funds have been received.
- Overdue: The payment due date has passed, and the payment status is either Unpaid or Failed; status changes immediately when the due date passes with no grace period.
- Failed: The payment attempt was unsuccessful due to a declined card, insufficient funds, or other payment gateway errors.
- Refunded: A full refund has been processed for the payment; for partial refunds, the status remains "Paid" with a note indicating partial refund details.
4.3.3 Status Visual Indicators
- Unpaid: Gray badge/text
- Processing: Yellow/amber badge with processing indicator
- Paid: Green badge
- Overdue: Red badge
- Failed: Red badge with error indicator
- Refunded: Purple/gray badge
4.3.4 Kebab Menu Actions by Status
Status
Available Actions
Unpaid
View Invoice, Download Invoice, Mark as Paid
Processing
View Invoice, Download Invoice
Paid
View Invoice, Download Invoice, Refund
Overdue
View Invoice, Download Invoice, Mark as Paid
Failed
View Invoice, Download Invoice, Mark as Paid
Refunded
View Invoice, Download Invoice
4.3.5 Action Behaviors
- View Invoice: Redirects the user to the Invoice Details page for the selected payment's associated invoice.
- Download Invoice: Downloads the invoice as a PDF file to the user's device.
- Mark as Paid: Opens a modal allowing the user to manually mark the payment as paid, requiring selection of payment method and mandatory note entry.
- Refund: For online payments (processed through Stripe), initiates an automatic refund through Stripe; for manual payments, opens a modal to mark as refunded with a mandatory note for the refund reason; updates the Remaining Balance Due by adding back the refunded amount.
4.3.6 Notes Feature
- Notes can be added when performing the "Mark as Paid" action to record how the payment was received (e.g., "Paid via check #1234").
- Notes can be added when performing the "Refund" action to record the reason for the refund (e.g., "Refunding overpayment by customer").
- Notes are displayed via a tooltip icon on the payment row when a note exists.
- Users can hover over the note icon to view the full note content.
4.3.7 View All Link
- The "View All" link is displayed at the bottom of the Payments from Client section.
- When clicked, the system redirects the user to the Billing > Transactions tab.
- The Transactions tab is automatically filtered to show only transactions for the current project.
4.4 Payments to Contractors Section
4.4.1 Section Overview
- The "Payments to Contractors" section displays all contractors assigned to events within the project.
- Each contractor row shows: Contractor Avatar, Contractor Name, Role, Event Name, Event Price, Amount Paid, Status, Action Icons, and Kebab Menu.
- If the same contractor is assigned to multiple events within the project, they appear as separate line items with their respective event names.
- The section displays all contractor assignments regardless of payment status.
4.4.2 Column Details
- Contractor: Displays the contractor's profile avatar, full name, and role (e.g., "Photographer," "Videographer").
- Event: Displays the name of the event the contractor is assigned to (e.g., "Rehearsal Dinner," "Wedding," "Engagement Photoshoot").
- Event Price: Displays the agreed-upon contractor fee for the specific event assignment.
- Amount Paid: Displays the total amount paid to the contractor so far; clicking this field opens the Payment History modal.
- Status: Displays the current payment status for the contractor.
- Action Icons: Three icons indicating invoice upload status, deliverables upload status, and payment status.
- Actions: Kebab menu with available actions based on status.
4.4.3 Kebab Menu Actions
The kebab menu (⋮) provides a single action regardless of contractor payment status:
- View Invoice History – Opens a view of all invoices submitted by the contractor.
4.4.6 Action Behaviors
- View Invoice History: Opens the Invoice History Modal.
4.5 Invoice History Modal
4.5.1 Modal Trigger
The Invoice History modal can be opened in two ways:
- Clicking on the "Amount Paid" value in the Payments to Contractors section.
- Selecting "View Invoice History" from the kebab menu (⋮) on a contractor row.
The modal displays all invoice transactions for the selected contractor on the specific event assignment.
4.5.2 Modal Content
- Modal Title: "Invoice History"
- Close Button (X): Located in the top-right corner; closes the modal immediately and returns to the Finance Tab.
- Columns: Issued, Paid, Payment Method, Amount, Status, Note Icon, and Actions.
- All columns are sortable except Status and Actions; users can click on column headers to change sort order.
4.5.3 Column Details
- Issued: The date when the invoice was issued (format: MMM DD, YYYY).
- Paid: The date when the payment was completed/confirmed (format: MMM DD, YYYY). Blank if unpaid.
- Payment Method: The method used for payment (Bank Transfer, Cash, Check, Zelle, PayPal, Venmo, Google Pay, Apple Pay).
- Amount: The invoice amount in USD.
- Status: The status of the individual invoice transaction — Paid, Failed, Unpaid, or Processing.
- Note Icon: Displays when a note exists for the transaction (e.g., when marked as paid manually); hovering shows the note content.
- Actions: Context-sensitive action buttons that vary based on the invoice status (see 4.5.4).
4.5.4 Actions by Status
Status
Available Actions
Paid
View Invoice, Ask for Refund
Failed
Pay, Mark as Paid, View Invoice
Unpaid
Pay, Mark as Paid, View Invoice
Processing
View Invoice
4.5.5 Action Behaviors
- View Invoice: Opens the contractor's uploaded invoice in a PDF preview modal.
- Pay: Redirects the user to the "Pay Contractor" pop-up as displayed in Finance > Contractor Invoices module when the "Pay" button is clicked.
- Mark as Paid: Opens a modal allowing the user to manually mark the invoice as paid, requiring selection of payment method and mandatory note entry.
- Ask for Refund: Sends an email notification and in-app notification to the contractor requesting them to process a refund through their Stripe account.
4.5.6 Modal Actions
- Close Button: Yellow button at the bottom-right of the modal; closes the modal and returns to the Finance Tab.
4.6 Real-time Updates and Calculations
- All financial calculations (Total Project Price, Remaining Balance Due, Total Expenses, Total Margin/Profit) update in real-time when underlying data changes.
- Payment statuses update automatically based on payment gateway responses and due date comparisons.
- The Finance Tab reflects the latest data each time it is loaded or when actions are performed.
- No manual refresh is required to see updated financial information after performing actions.
5. Field Details & Validations
5.1 Financial Summary Fields
Field Name
Field Type
Required
Validation Rules
Description
Total Project Price
Currency (Display)
Yes
Positive number or zero; USD format with 2 decimal places
Total amount client will pay for the project
Remaining Balance Due
Currency (Display)
Yes
Non-negative number; USD format with 2 decimal places
Outstanding amount client has yet to pay
Total Expenses
Currency (Display)
Yes
Positive number or zero; USD format with 2 decimal places
Total contractor fees for all assigned contractors
Total Margin/Profit
Currency (Display)
Yes
Can be positive or negative; USD format with 2 decimal places
Calculated profit (Total Project Price - Total Expenses)
5.2 Payments from Client Table Fields
Field Name
Field Type
Required
Validation Rules
Description
Status
Badge/Tag
Yes
Must be one of: Unpaid, Processing, Paid, Overdue, Failed, Refunded
Current payment status
Payment Date
Date (Display)
Conditional
Format: MM/DD/YY HH:MM AM/PM; displayed only when payment is made
Date and time payment was received
Due Date
Date (Display)
Yes
Format: MM/DD/YY HH:MM AM/PM
Scheduled payment due date
Amount
Currency (Display)
Yes
Positive number; USD format with 2 decimal places
Payment amount
Action
Kebab Menu
Yes
Actions vary by status
Available actions for the payment
5.3 Payments to Contractors Table Fields
Field Name
Field Type
Required
Validation Rules
Description
Contractor Avatar
Image
Yes
Default avatar if not uploaded
Contractor profile picture
Contractor Name
Text (Display)
Yes
Max 100 characters
Full name of contractor
Contractor Role
Text (Display)
Yes
Max 50 characters
Contractor's role/service type
Event
Text (Display)
Yes
Max 100 characters
Name of assigned event
Event Price
Currency (Display)
Yes
Positive number; USD format with 2 decimal places
Agreed contractor fee for the event
Amount Paid
Currency (Clickable)
Yes
Non-negative number; USD format with 2 decimal places
Total amount paid to contractor
Status
Badge/Tag
Yes
Must be one of: Unpaid, Processing, Paid, Overdue, Failed
Contractor payment status
Invoice Icon
Icon (Display)
Yes
Filled or empty state
Indicates if invoice is uploaded
Deliverables Icon
Icon (Display)
Yes
Filled or empty state
Indicates if deliverables are uploaded
Payment Icon
Icon (Display)
Yes
Empty, half-filled, or filled state
Visual payment progress indicator
Action
Kebab Menu
Yes
Actions vary by status
Available actions for the payment
5.4 Payment History Modal Fields (Payment to Contractors)
Field Name
Field Type
Required
Validation Rules
Description
Issued
Date (Display)
Yes
Format: MMM DD, YYYY
Date payment was issued
Paid
Date (Display)
Yes
Format: MMM DD, YYYY
Date payment was completed
Payment Method
Text (Display)
Yes
One of: Bank Transfer, Cash, Check, Zelle, PayPal, Venmo, Google Pay, Apple Pay
Method used for payment
Amount
Currency (Display)
Yes
Positive number; USD format with 2 decimal places
Payment amount
Status
Badge/Tag
Yes
Must be: Paid
Payment status
Note Icon
Icon (Hover)
Conditional
Displayed when note exists
Hover to view note content
View Invoice
Link
Yes
Opens PDF preview modal
Link to view invoice
5.5 Mark as Paid Modal Fields
Field Name
Field Type
Required
Validation Rules
Description
Payment Method
Dropdown
Yes
Must select one of: Cash, Check, Zelle, PayPal, Venmo, Google Pay, Apple Pay
Method used for offline payment
Note
Text Area
Yes
Min 1 character; Max 500 characters
Description of how payment was received
5.6 Refund Modal Fields
Field Name
Field Type
Required
Validation Rules
Description
Refund Reason
Text Area
Yes
Min 1 character; Max 500 characters
Reason for processing the refund
6. Success Message Handling
Action
Success Message
Trigger Condition
Post-Success Action
Mark as Paid (Client)
"Payment has been successfully marked as paid."
User submits Mark as Paid form with valid payment method and note
Payment status updates to "Paid"; Remaining Balance Due recalculates; Payment row refreshes
Mark as Paid (Contractor)
"Contractor payment has been successfully marked as paid."
User submits Mark as Paid form with valid payment method and note
Payment status updates to "Paid"; Amount Paid updates; Payment icon fills accordingly
Refund Processed (Online)
"Refund has been successfully processed through Stripe."
Stripe refund API returns success
Payment status updates to "Refunded"; Remaining Balance Due increases; Payment row refreshes
Refund Processed (Manual)
"Payment has been marked as refunded."
User submits refund reason for manual payment
Payment status updates to "Refunded"; Remaining Balance Due increases; Payment row refreshes
Ask for Refund (Contractor)
"Refund request has been sent to the contractor."
System successfully sends email and in-app notification
Notification sent to contractor; No immediate status change
Make Payment (Contractor)
"Payment has been successfully processed."
Payment gateway returns success
Payment status updates; Amount Paid increases; Payment icon updates
Invoice Downloaded
"Invoice downloaded successfully."
PDF file download completes
Invoice PDF saved to user's device
7. Error Message Handling
Scenario
Error Message
Trigger Condition
User Action Required
System Response
Refund Failed (Stripe)
"Refund could not be processed. Please try again or contact support."
Stripe API returns error
Retry refund or contact support
Display error; Log error details; Retain original payment status
Payment Processing Failed
"Payment could not be processed. Please verify payment details and try again."
Payment gateway returns decline/error
Verify payment details; Retry payment
Display error; Status changes to "Failed"
Mark as Paid - Missing Payment Method
"Please select a payment method."
User attempts to submit without selecting payment method
Select a payment method
Prevent form submission; Highlight required field
Mark as Paid - Missing Note
"Please enter a note describing the payment."
User attempts to submit without entering note
Enter payment note
Prevent form submission; Highlight required field
Refund - Missing Reason
"Please enter a reason for the refund."
User attempts to submit refund without reason
Enter refund reason
Prevent form submission; Highlight required field
Invoice Not Found
"Invoice not found. The invoice may have been deleted."
User clicks View Invoice for deleted invoice
Contact administrator
Display error; Close action menu
Contractor Invoice Not Uploaded
"Contractor has not uploaded an invoice yet."
User clicks View Invoice when no invoice exists
Wait for contractor to upload invoice
Display informational message
Network Error
"Unable to connect. Please check your internet connection and try again."
API request fails due to network issues
Check connection; Retry action
Display error; Retain current state
Session Expired
"Your session has expired. Please log in again."
User session timeout
Log in again
Redirect to login page
Insufficient Permissions
"You do not have permission to perform this action."
Non-authorized role attempts action
Contact administrator
Display error; Prevent action
Partial Refund Exceeds Paid Amount
"Refund amount cannot exceed the paid amount."
Partial refund amount is greater than payment received
Enter valid refund amount
Prevent refund submission
8. Edge Cases
#
Edge Case Scenario
System Behavior
Expected Outcome
1
Contractor assigned to multiple events in same project
System displays separate line items for each event assignment with respective Event Name, Event Price, and Amount Paid
Each assignment tracked independently
2
Same contractor assigned to same event twice (duplicate)
System prevents duplicate assignment at assignment level
Error message displayed during assignment
3
Contractor unassigned after receiving partial payment, no refund
System retains only the Amount Paid as expense; deducts remaining Event Price from Total Expenses
Total Expenses reflects actual expenditure
4
Contractor unassigned before any payment made
System deducts entire Event Price from Total Expenses
Total Expenses recalculates to exclude unassigned contractor
5
Contractor paid more than Event Price (overage)
System uses actual Amount Paid instead of Event Price for expense calculation
Total Expenses reflects actual overpayment
6
Client makes overpayment
System tracks overpayment; Remaining Balance Due shows $0.00 or negative (credit)
Agency can process refund for excess amount
7
All invoices voided (project deleted)
System sets Total Project Price to $0.00; historical payments retained for audit
Financial Summary shows $0.00; payment history preserved
8
Invoice deleted while payments exist
System deducts invoice amount from Total Project Price; payment records retained
Payments remain visible; Total Project Price decreases
9
Payment status changes to Overdue (due date passes)
System automatically changes status from Unpaid/Failed to Overdue at midnight of due date
Status badge changes to red "Overdue"
10
Partial refund processed
System keeps status as "Paid" and adds note with partial refund details
Remaining Balance Due increases by refund amount
11
Full refund processed
System changes status to "Refunded"
Remaining Balance Due increases by full refund amount
12
Client signs proposal after invoices already sent
System calculates Total Project Price as Proposal amount + Additional Invoices (excluding proposal-generated invoice)
No duplicate counting of proposal invoice
13
Network failure during refund processing
System displays error; retains original status; does not complete refund
User can retry when connection restored
14
User clicks Amount Paid when no payments made ($0)
System opens Payment History modal with empty state message
Modal shows "No payments have been made yet"
15
Multiple payment methods for same invoice
System tracks each transaction separately in Payment History
All payment methods visible in history
16
Contractor invoice deleted after payment
System retains payment records; View Invoice shows "Invoice not found" error
Payment history preserved; invoice inaccessible
17
Currency display for large amounts
System formats with appropriate commas (e.g., $14,200.00)
Currency displayed consistently
18
Project with no events
System shows empty Payments to Contractors section; Total Expenses = $0
"No contractors have been assigned yet" message displayed
19
Simultaneous status update (race condition)
System processes requests sequentially; last write wins
Consistent final state
20
User navigates away during payment processing
System continues processing; updates status on next page load
Payment completes independently of user navigation
9. Acceptance Criteria
9.1 Financial Summary
- AC-001: The Finance Tab must display Total Project Price calculated correctly based on signed proposal amounts and/or invoice totals.
- AC-002: The Remaining Balance Due must accurately reflect Total Project Price minus all successful client payments.
- AC-003: The Total Expenses must sum all contractor Event Prices, using actual paid amount when overpayment occurs.
- AC-004: The Total Margin/Profit must display the difference between Total Project Price and Total Expenses.
- AC-005: All financial values must display in USD format with two decimal places and comma separators for thousands.
- AC-006: The "Create Invoice" button must redirect users to the Invoice Builder module.
9.2 Payments from Client
- AC-007: All client payments must display with correct Status, Payment Date, Due Date, and Amount.
- AC-008: Payment statuses must update immediately when due date passes (Unpaid/Failed → Overdue).
- AC-009: Kebab menu must display only relevant actions based on current payment status.
- AC-010: Mark as Paid action must require payment method selection and mandatory note entry.
- AC-011: Refund action must process through Stripe for online payments and mark as refunded for manual payments.
- AC-012: View All link must redirect to Billing > Transactions tab with project filter applied.
- AC-013: Default sort order must be by Due Date in ascending order.
9.3 Payments to Contractors
- AC-014: All contractor assignments must display with Contractor Name, Role, Event Name, Event Price, Amount Paid, and Status.
- AC-015: Same contractor assigned to multiple events must appear as separate line items.
- AC-016: Action icons must correctly indicate invoice upload, deliverables upload, and payment status.
- AC-017: Amount Paid must be clickable and open Payment History modal.
- AC-018: Make Payment action must redirect to Pay Contractor pop-up.
- AC-019: Ask for Refund action must send email and in-app notification to contractor.
9.4 Payment History Modal
- AC-020: Payment History modal must display all payment transactions for the selected contractor.
- AC-021: All columns in Payment History must be sortable.
- AC-022: View Invoice link must open contractor invoice in PDF preview modal.
- AC-023: Note icon must appear when note exists and display note content on hover.
- AC-024: Close button must close modal and return to Finance Tab.
9.5 Empty States
- AC-025: Empty state message must display when no proposal or invoice exists.
- AC-026: Empty state message must display when awaiting client signature on proposal.
- AC-027: Empty state message must display when no contractors are assigned.
9.6 Access Control
- AC-028: Only Agency Owner and Admin roles must have access to the Finance Tab.
- AC-029: Other roles must not see the Finance Tab in navigation.
9.7 Real-time Updates
- AC-030: All financial calculations must update in real-time when underlying data changes.
- AC-031: Payment status updates must reflect immediately after action completion.
10. Manual Test Cases
Test cases have been documented in a separate Excel file for direct upload to the test management system.
Link: Click Here
11. Dependencies
Dependency Type
Module/Service
Dependency Description
Impact if Unavailable
Internal Module
Proposal Module
Provides signed proposal data including package prices and à la carte items for Total Project Price calculation
Total Project Price cannot be calculated from proposal; falls back to invoice-only calculation
Internal Module
Invoice Builder Module
"Create Invoice" CTA redirects to this module; provides invoice data for financial calculations
Cannot create new invoices; existing invoice data still displayed
Internal Module
Billing Module (Invoices Tab)
Provides invoice details and payment schedule data
Invoice details unavailable; payment tracking affected
Internal Module
Billing Module (Transactions Tab)
"View All" link redirects here with project filter
Cannot navigate to detailed transaction view
Internal Module
Finance > Contractor Invoices
"Make Payment" action redirects to Pay Contractor pop-up
Cannot process contractor payments through UI
Internal Module
Contractor Management
Provides contractor assignment data for Payments to Contractors section
Contractor list unavailable; expense calculation affected
Internal Module
Event Management
Provides event names and contractor event assignments
Event context unavailable; cannot differentiate multi-event contractors
Internal Module
Project Details Module
Parent module containing the Finance Tab
Finance Tab inaccessible if Project Details unavailable
External Service
Stripe Payment Gateway
Processes online payments and refunds for client payments
Online payments fail; manual payment marking required
External Service
Stripe Connect
Processes payments to contractors
Contractor payments fail; manual marking required
External Service
Email Service
Sends "Ask for Refund" notifications to contractors
Refund request notifications not delivered
External Service
In-App Notification Service
Delivers in-app notifications for refund requests
Contractors not notified within the application
External Service
PDF Generation Service
Generates downloadable invoice PDFs
Invoice download fails; view-only mode available
Configuration
Currency Settings
USD currency format configuration
Currency display issues
Configuration
Date/Time Format
Date formatting standards (MM/DD/YY, MMM DD, YYYY)
Date display inconsistencies
Configuration
User Permissions
Role-based access control settings
Unauthorized access or restricted functionality
12. References
Refer- Click Here
Event kebab Menu - Edit and Cancel event
Functional Requirements Document (FRD)
Event Kebab Menu - Edit Event & Cancel Event
Module Name: Event Kebab Menu Actions
Version: 1.0
Last Updated: May 27, 2026
Status: Draft
1. Module Overview
1.1 Purpose
This module defines the functionality for the kebab menu (three-dot menu) options available on individual events within a project. The kebab menu provides quick access to two primary actions: Edit Event and Cancel Event. These actions allow agency users to modify event details or permanently cancel an event with appropriate handling of financial records, contractor assignments, and notifications.
1.2 Scope
This FRD covers:
- Edit Event modal and all editable fields
- Cancel Event flow with decision logic based on event count and primary event status
- Single Event Confirmation pop-up (project cancellation warning)
- Primary Event Blocking modal (when invoice exists)
- Cancel Event modal with invoice handling, notifications, and warnings
- Post-cancellation behavior for all affected entities
- Contractor availability check and payment schedule impact on date changes
1.3 Module Location
- Primary Access: Project Details > Events Tab > Event Card > Kebab Menu (⋮)
- Alternative Access: Project Details > Events Horizontal Tab > Kebab Menu on Event Tab
2. User Roles & Permissions
Action
Agency Owner
Admin
Project Owner
Project Manager
View Kebab Menu
✅
✅
✅
✅
Edit Event
✅
✅
✅
❌
Cancel Event
✅
✅
✅
❌
Undo Cancellation
❌
❌
❌
❌
Undo Archive
✅
✅
✅
❌
Note: Project Managers who are assigned as Project Owner of a specific project can Edit Event but cannot Cancel Event.
3. User Flow
3.1 Accessing Kebab Menu
- User navigates to Project Details.
- User locates the event card or event tab.
- User clicks the kebab menu (⋮) icon.
- System displays dropdown with options: "Edit Event" and "Cancel Event".
3.2 Edit Event Flow
- User clicks "Edit Event" from kebab menu.
- System displays Edit Event modal with pre-populated data.
- User modifies desired fields.
- User clicks "Save".
- If event date is changed:
- System performs contractor availability check (if contractors assigned and date is future/past).
- System displays Payment Schedule Impact pop-up (if primary event and unpaid payments).
- System saves changes and closes modal.
- Success toast: "Event updated successfully."
3.3 Cancel Event Flow - Decision Tree
User clicks "Cancel Event" from kebab menu
│
▼
┌─────────────────────┐
│ How many events │
│ in project? │
└─────────────────────┘
│
┌───────────────┼───────────────┐
▼ ▼ ▼
1 Event 2 Events 3+ Events
│ │ │
▼ │ │
Single Event │ │
Confirmation Is this the Is this the
Pop-up primary event? primary event?
│ │ │
│ ┌────┴────┐ ┌────┴────┐
│ ▼ ▼ ▼ ▼
│ Yes No Yes No
│ │ │ │ │
│ ▼ │ │ │
│ Auto-assign │ │ │
│ other as │ │ │
│ primary + │ Is invoice │
│ info message │ generated? │
│ in Cancel │ │ │
│ Modal │ ┌──┴──┐ │
│ │ │ ▼ ▼ │
│ │ │ Yes No │
│ │ │ │ │ │
│ │ │ ▼ ▼ │
│ │ │ Blocking Auto-assign
│ │ │ Modal another as
│ │ │ (Change primary
│ │ │ Primary) │
│ │ │ │ │
│ ▼ ▼ │ ▼
│ Cancel Event Modal ◄─────────┘
│ │
▼ ▼
Cancel Project Event
Pop-up Cancelled
4. Functional Logic
4.1 Edit Event Modal
4.1.1 Modal Display
When user clicks "Edit Event", the system displays a modal with all event details pre-populated and editable.
4.1.2 Warning Message
A warning message is displayed at the top of the Edit Event modal (below title, above fields) for all users with edit access.
Element
Content
Style
Yellow warning box
Icon
ℹ️ Info icon
Position
Top of modal, below title, above fields
Visibility
Always visible (not dismissible)
Message
Warning: Changes to this event may impact proposals, contracts, invoices, or contractor assignments. Please review before saving. Ignore this warning if no related actions have been taken on this event.
4.1.3 Editable Fields
Field
Type
Required
Validation
Event Type
Dropdown
Yes
Must select one
Services
Multi-select Chips
Yes
At least one service
Event Stage
Dropdown
Yes
Must select one
Event Date
Date Picker
Yes
Can be TBD or actual date
Event Time
Time Picker
Yes (if date set)
Valid time format
Event End Date
Date Picker
No
Must be after start date
Event End Time
Time Picker
No
Must be after start time
Primary Venue
Google Autocomplete
No
Valid address
Event Notes
Textarea
No
Max 2000 characters
4.1.4 Service Removal Logic
When a service is removed from the event:
- Contractors assigned to that service type remain visible on agency side.
- Contractors lose access to the event on their side (hidden).
- Contractors are immediately marked as available on that date in calendar.
- Contractors are removed from Do Not Book list for that date.
- Email notification sent to affected contractors.
4.1.5 Event Stage Change
- Event Stage is editable from the Edit Event modal.
- Changing the stage updates the pipeline position.
- No restrictions on stage changes.
4.1.6 Date Change - Contractor Availability Check
When the event date is changed and contractors are assigned:
Trigger Conditions:
- New date is a future date OR past date (not TBD).
- Contractors are currently assigned to the event.
Flow:
- System performs availability check for all assigned contractors.
- If any contractor is unavailable, Update Event modal is displayed (same as Info Tab flow).
- User can keep, remove, or replace contractors.
Not Triggered When:
- Changing from future date to TBD.
- No contractors assigned.
4.1.7 Date Change - Payment Schedule Impact
When the event date is changed on the primary event:
Trigger Conditions:
- Event is the primary event.
- There are unpaid payments on linked invoice(s).
- Date change is one of: Future → Past, TBD → Past, Future → TBD.
Flow:
- Payment Schedule Impact pop-up is displayed (same logic as Section 4.11 in Events Info Tab FRD).
- User can choose "No Changes" or "Update Invoice(s)" / "Update to TBD".
Flow Order:
- User saves date change.
- Contractor Availability Modal (if applicable).
- Payment Schedule Impact Pop-up (if applicable).
- Changes saved.
4.1.8 Internal Notes
- Notes added in Edit Event modal are displayed in Event > Info section.
- Displayed as read-only after save.
- Visible to agency users only.
4.2 Cancel Event - Single Event Confirmation
4.2.1 Trigger Condition
Displayed when the project has only one event and user attempts to cancel it.
4.2.2 Pop-up Content
Element
Content
Title
Cancel Project?
Message
This is the only event in this project. Canceling it will cancel the entire project. Would you like to create a TBD event to keep the project open?
Primary Button
Proceed to Cancel Project
Secondary Button
Create TBD Event
4.2.3 Button Actions
Button
Action
Proceed to Cancel Project
Opens Cancel Event modal (becomes Cancel Project flow)
Create TBD Event
Opens Create Event modal with TBD date pre-selected
4.3 Cancel Event - Primary Event Blocking Modal
4.3.1 Trigger Conditions
Displayed when ALL of the following are true:
- Project has 3 or more events.
- User is attempting to cancel the primary event.
- An invoice has been generated for the client.
4.3.2 Pop-up Content
Element
Content
Title
Cannot Cancel Primary Event
Message
This event is the primary event linked to the project's invoice payment schedule. Please assign another event as primary before canceling this event.
Primary Button
Change Primary Event
Secondary Button
Cancel
4.3.3 Button Actions
Button
Action
Change Primary Event
Opens Edit Project modal to change primary event. After save, returns to Event Details screen. User must manually initiate cancellation again.
Cancel
Closes modal, no action taken.
4.3.4 Non-Blocking Scenarios (3+ Events)
If user cancels the primary event but no invoice exists:
- System auto-assigns another event as primary.
- Cancel Event modal opens normally.
- No blocking.
4.4 Cancel Event - Auto Primary Assignment (2 Events)
4.4.1 Trigger Condition
When project has exactly 2 events and user cancels the primary event.
4.4.2 Behavior
- The remaining event automatically becomes the primary event.
- Cancel Event modal displays with an informational message about the auto-assignment.
4.5 Cancel Event Modal
4.5.1 Header Section (Always Visible)
Field
Description
Event
Event name (e.g., "Engagement Shoot")
Date
Event date (e.g., "Aug 15, 2025")
Part of Project
Project/Package name (e.g., "Smith Wedding Package")
Invoice
Financial summary (see below)
Invoice Display:
- Single Invoice: Total: $8,500 | Paid: $3,000 | Balance: $5,500
- Multiple Invoices:
- Invoice 1: Total: $5,000 | Paid: $2,000 | Balance: $3,000
- Invoice 2: Total: $3,500 | Paid: $1,000 | Balance: $2,500
Note: Invoice section is hidden if no invoices exist for the project.
4.5.2 Auto-Primary Assignment Message (2 Events Only)
Element
Content
Info Box (Blue)
ℹ️ The remaining event "[Event Name]" will become the primary event.
Visibility: Only shown when canceling the primary event in a 2-event project.
4.5.3 Invoice Handling Section
Visibility: Only shown if invoices exist.
Element
Content
Section Title
Invoice Handling
Option 1 (Radio)
No financial changes — Keep invoice as-is (Package pricing unchanged)
Option 2 (Radio)
Edit invoice / Adjust balance — Open invoice editor (Step 2)
Default Selection: Option 1 (No financial changes)
Behavior:
- Option 1: Button shows "Confirm"
- Option 2: Button shows "Next: Edit Invoice" → Redirects to Finance > Billing > Invoices tab with project filter
4.5.4 Notifications Section
Element
Content
Section Title
Notifications — Who should be notified about this cancellation?
Toggle 1
Notify team members (Default: ON)
Toggle 2
Notify contractors (Default: ON)
Toggle 3
Notify client (Default: ON)
Notification Delivery: Email
4.5.5 Internal Notes Section
Element
Content
Label
Internal Notes (Optional)
Placeholder
"Add a reason or note for this cancellation (e.g., Client canceled engagement shoot; package unchanged)."
Character Limit
2000
Visibility After Save
Agency only — displayed in Event > Info section
Display Format
Note text with "Cancelled by: [User Name] on [Date]"
4.5.6 Tasks Warning (Conditional)
Visibility: Only shown if there are To Do or In Progress tasks.
Element
Content
Warning Box
⚠️ [X] pending task(s) will be deleted upon cancellation. Completed tasks will be retained.
4.5.7 Contractor Payment Warning (Conditional)
Visibility: Only shown if contractors have already been paid.
Element
Content
Warning Box
⚠️ [X] contractor(s) have already been paid. You will need to arrange refunds manually.
4.5.8 Warning & Legal Disclaimer
Element
Content
Warning (Yellow Box)
⚠️ Warning: Canceling this event will permanently remove the event and all connected services from your project. This action cannot be undone.
Legal Disclaimer
ℹ️ Legal Disclaimer: Pixally does not enforce contract terms between you and your clients. Please review your agreement before cancelling or editing an invoice. You are responsible for determining whether additional payments are due.
4.5.9 Modal Buttons
Invoice Handling Selection
Buttons
No financial changes
Close | Confirm
Edit invoice / Adjust balance
Close | Next: Edit Invoice
4.6 Post-Cancellation Behavior
4.6.1 Event Display
View
Behavior
Agency Side
Event appears grayed out with "Cancelled" badge. Appears last in event list (before archived). Visible in Events tab with badge.
Contractor Side
Event is hidden. No access.
Client Portal
Event appears grayed out with "Cancelled" badge. Not actionable.
Events Tab List
Event tab is grayed out with "Cancelled" badge.
Global Search
Event does not appear in search results.
4.6.2 Contractor Impact
Area
Behavior
Event Access
Contractors lose access to cancelled event immediately.
Calendar Availability
Contractors immediately available on that date.
Unpaid Invoices
Auto-voided. Email notification sent.
Paid Invoices
Remain for record. Agency handles refund manually. Email notification includes refund info.
Payment History
Contractors can still view payment history for audit purposes.
Feedback Forms
Contractors cannot submit feedback for cancelled events.
Do Not Book
Date removed from DNB list.
4.6.3 Financial Records
Area
Behavior
Client Invoice
Remains as-is unless user selected "Edit invoice".
Contractor Unpaid Invoices
Auto-voided.
Contractor Paid Invoices
Retained for record.
Expenses
Remain visible in financial reports for bookkeeping/tax purposes.
Payment Overdue Emails
Blocked for cancelled events.
4.6.4 Tasks & To-Dos
Task Status
Behavior
To Do
Deleted upon cancellation.
In Progress
Deleted upon cancellation.
Completed
Retained.
4.6.5 Team Members
- Team members remain assigned to the event.
- Event becomes inactive (not in active to-do lists).
4.6.6 IC Agreements
Agreement Status
Agency Side
Contractor Side
Unsigned
Expired. Viewable with "Expired" tag.
Hidden.
Signed
Remains. Viewable with "Cancelled" tag.
Hidden.
4.6.7 Files & Documents
- All uploaded files and photos remain accessible.
- Useful for legal or payment dispute purposes.
4.6.8 Calendar Integration
Calendar
Behavior
Google Calendar (if synced)
Event auto-removed.
Pixally Calendar
Event updated/marked as cancelled.
4.6.9 Automated Communications
Communication Type
Behavior
Snapshot Emails
Blocked for cancelled events.
Payment Reminders
Blocked for cancelled events.
Cancellation Notifications
Sent based on toggle selections.
4.6.10 Event Numbering
- Event numbering (e.g., Wedding 1, Wedding 2) remains unchanged.
- No re-sequencing occurs.
4.6.11 Project-Level Impact (Single Event Cancellation)
When the only event in a project is cancelled:
- Entire project is cancelled.
- Project moves to Archive with "Cancelled" tag.
- All proposals associated with the project get expired.
- Client portal shows project as grayed out with "Cancelled" status.
5. Field Details & Validations
5.1 Edit Event Modal Fields
Field
Type
Required
Max Length
Validation Rules
Warning Message
Display (Yellow Box)
N/A
N/A
Always visible. Not dismissible. Displays at top of modal.
Event Type
Dropdown
Yes
N/A
Must select from predefined list.
Services
Multi-select Chips
Yes
N/A
At least one service must be selected.
Event Stage
Dropdown
Yes
N/A
Must select from pipeline stages.
Event Date
Date Picker
Yes
N/A
Can be TBD or valid date.
Event Time
Time Picker
Conditional
N/A
Required if Event Date is set. Valid time format.
Event End Date
Date Picker
No
N/A
Must be on or after Event Date.
Event End Time
Time Picker
No
N/A
Must be after Event Time if same day.
Primary Venue
Text (Autocomplete)
No
500
Google Places autocomplete.
Event Notes
Textarea
No
2000
Free text.
5.2 Cancel Event Modal Fields
Field
Type
Required
Max Length
Validation Rules
Invoice Handling
Radio
Yes (if invoice exists)
N/A
Must select one option.
Notify Team Members
Toggle
No
N/A
Default: ON
Notify Contractors
Toggle
No
N/A
Default: ON
Notify Client
Toggle
No
N/A
Default: ON
Internal Notes
Textarea
No
2000
Free text. Agency-only visibility.
6. Success Message Handling
Action
Message
Type
Edit Event saved
"Event updated successfully."
Toast
Edit Event with service removal
"Event updated successfully. Affected contractors have been notified."
Toast
Event cancelled
"Event cancelled successfully."
Toast
Event cancelled (single event/project)
"Project cancelled and moved to archive."
Toast
TBD Event created
"TBD event created successfully."
Toast
7. Error Message Handling
Scenario
Message
Type
Network error during save
"Unable to save changes. Please check your connection and try again."
Toast
Server error
"Something went wrong. Please try again later."
Toast
No services selected
"Please select at least one service."
Inline
End date before start date
"End date must be on or after the start date."
Inline
End time before start time (same day)
"End time must be after the start time."
Inline
Notes exceed limit
"Notes cannot exceed 2000 characters."
Inline
8. Edge Cases
#
Edge Case
System Behavior
1
User cancels primary event with 3+ events and invoice exists
Blocking modal displayed. User must change primary event first.
2
User cancels primary event with 3+ events and no invoice
Auto-assigns another event as primary. Cancel modal opens normally.
3
User cancels primary event with 2 events
Other event auto-becomes primary. Info message shown in Cancel modal.
4
User cancels only event in project
Single Event Confirmation pop-up shown. Can create TBD event or proceed to cancel project.
5
User removes all services from event
Validation error: "Please select at least one service."
6
User changes date on non-primary event with contractors
Contractor availability check triggered. No payment schedule impact.
7
User changes date on primary event with unpaid payments
Both contractor availability check and payment schedule impact triggered.
8
Contractor has both paid and unpaid invoices
Unpaid invoices voided. Paid invoices retained. Warning shown about manual refund.
9
Multiple invoices exist for project
All invoices shown in Cancel modal. User redirected to Billing > Invoices with project filter if editing.
10
User closes browser during invoice edit flow
Cancellation not completed. Event remains active. User must restart cancellation.
11
Two admins attempt cancellation simultaneously
First request processed. Second user sees updated state (already cancelled).
12
Contractor accepts job at moment of cancellation
System processes cancellation. Contractor sees event as cancelled.
13
Client payment completes after cancellation
Payment processed. Agency handles reconciliation manually.
14
Client tries to sign proposal for cancelled event
Proposal shown as expired. Cannot be signed.
15
All events in project cancelled
Project moves to Archive with "Cancelled" tag.
16
Brand access validation in multi-brand agency
System verifies user has access to the brand before allowing cancellation.
9. Acceptance Criteria
9.1 Kebab Menu
- AC-01: Kebab menu shall be visible on event cards and event tabs.
- AC-02: Kebab menu shall display "Edit Event" and "Cancel Event" options.
- AC-03: Users without permission shall not see Edit Event or Cancel Event options.
9.2 Edit Event
- AC-04: Edit Event modal shall display warning message at the top (below title, above fields).
- AC-05: Warning message shall be always visible and not dismissible.
- AC-06: Edit Event modal shall display all event fields pre-populated.
- AC-07: All fields shall be editable as per field specifications.
- AC-08: Saving changes shall display success toast.
- AC-09: Removing a service shall trigger email notification to affected contractors.
- AC-10: Changing date shall trigger contractor availability check if contractors assigned.
- AC-11: Changing date on primary event with unpaid payments shall trigger payment schedule impact pop-up.
- AC-12: Event Notes shall have 2000 character limit.
- AC-13: Validation errors shall be displayed inline.
9.3 Cancel Event - Single Event
- AC-14: Canceling only event in project shall show Single Event Confirmation pop-up.
- AC-15: "Create TBD Event" shall open Create Event modal with TBD pre-selected.
- AC-16: "Proceed to Cancel Project" shall open Cancel Event modal for project cancellation.
8.4 Cancel Event - Primary Event Blocking
- AC-17: Canceling primary event with 3+ events and invoice shall show blocking modal.
- AC-18: "Change Primary Event" shall open Edit Project modal.
- AC-19: After changing primary, user must manually re-initiate cancellation.
- AC-20: Canceling primary event with 3+ events and no invoice shall auto-assign another primary.
8.5 Cancel Event - Two Events
- AC-21: Canceling primary event with 2 events shall auto-assign other as primary.
- AC-22: Cancel modal shall display info message about auto-assignment.
8.6 Cancel Event Modal
- AC-23: Header section shall always display event details.
- AC-24: Invoice section shall display only if invoices exist.
- AC-25: Multiple invoices shall display as "Invoice 1", "Invoice 2", etc.
- AC-26: "No financial changes" selection shall show "Confirm" button.
- AC-27: "Edit invoice" selection shall show "Next: Edit Invoice" button.
- AC-28: "Next: Edit Invoice" shall redirect to Finance > Billing > Invoices with project filter.
- AC-29: Notification toggles shall default to ON.
- AC-30: Internal Notes shall be optional with 2000 character limit.
- AC-31: Tasks warning shall display count of pending tasks to be deleted.
- AC-32: Contractor payment warning shall display count of paid contractors.
- AC-33: Warning and legal disclaimer shall always be visible.
8.7 Post-Cancellation
- AC-34: Cancelled event shall be grayed out with "Cancelled" badge on agency side.
- AC-35: Cancelled event shall be hidden from contractors.
- AC-36: Cancelled event shall be grayed out and not actionable on client portal.
- AC-37: Cancelled event shall not appear in global search.
- AC-38: Contractors shall be immediately available on cancelled event date.
- AC-39: Unpaid contractor invoices shall be auto-voided.
- AC-40: Paid contractor invoices shall be retained.
- AC-41: To Do and In Progress tasks shall be deleted.
- AC-42: Completed tasks shall be retained.
- AC-43: Unsigned IC Agreements shall be marked as expired.
- AC-44: Signed IC Agreements shall be viewable with "Cancelled" tag.
- AC-45: Files and documents shall remain accessible.
- AC-46: Google Calendar event shall be auto-removed if synced.
- AC-47: Snapshot emails shall be blocked for cancelled events.
- AC-48: Internal Notes shall display with "Cancelled by: [User Name] on [Date]" in Info section.
8.8 Permissions
- AC-49: Agency Owner, Admin, and Project Owner shall be able to Edit Event.
- AC-50: Agency Owner, Admin, and Project Owner shall be able to Cancel Event.
- AC-51: Project Manager shall not be able to Edit Event or Cancel Event.
- AC-52: Cancellation cannot be undone.
- AC-53: Archive can be undone by Agency Owner, Admin, and Project Owner.
9. Notification Email Templates (Placeholders)
9.1 Team Member Notification
Field
Content
Subject
[Event Cancellation] [Event Name] - [Project Name]
Body
[Placeholder - Content to be provided]
9.2 Contractor Notification
Field
Content
Subject
[Event Cancellation] [Event Name] - [Project Name]
Body
[Placeholder - Content to be provided. Include: cancellation info, voided invoice details (if applicable), refund info (if applicable)]
9.3 Client Notification
Field
Content
Subject
[Event Cancellation] [Event Name] - [Project Name]
Body
[Placeholder - Content to be provided]
9.4 Contractor Service Removal Notification
Field
Content
Subject
[Service Update] [Event Name] - [Project Name]
Body
[Placeholder - Content to be provided. Notify contractor that their service has been removed from the event.]
10. Dependencies
#
Type
Dependency
Description
Impact if Unavailable
1
Internal Module
Project Details
Event data and project context.
Cannot access Edit or Cancel functionality.
2
Internal Module
Finance > Billing > Invoices
Invoice editing after cancellation.
User cannot edit invoices during cancellation flow.
3
Internal Module
Edit Project Modal
Change primary event.
Cannot change primary event; blocking modal cannot redirect.
4
Internal Module
Create Event Modal
Create TBD event.
Cannot create TBD event to keep project open.
5
Internal Module
Contractor Availability
Check contractor conflicts on date change.
Availability check may fail; proceed with warning.
6
Internal Module
Payment Schedule
Payment schedule impact on date change.
Payment impact pop-up may not display.
7
External Service
Google Calendar API
Auto-remove cancelled events.
Events must be manually removed from Google Calendar.
8
External Service
Email Service
Send cancellation notifications.
Notifications fail; retry or manual notification required.
9
Internal Module
Activity Tab
Log cancellation activity.
Activity may not be logged; audit trail incomplete.
11. Activity Logging
Action
Activity Log Entry
Event Edited
"[User Name] edited event [Event Name]"
Event Date Changed
"[User Name] changed event date from [Old Date] to [New Date]"
Service Removed
"[User Name] removed [Service Name] from event [Event Name]"
Event Cancelled
"[User Name] cancelled event [Event Name]"
Project Cancelled
"[User Name] cancelled project [Project Name]"
Primary Event Changed
"[User Name] changed primary event to [Event Name]"
Contractor Removed (via cancellation)
"Contractor [Contractor Name] removed from event [Event Name]"
Contractor Invoice Voided
"Invoice [Invoice ID] for [Contractor Name] voided due to event cancellation"
12. References
- Events Info Tab FRD (Contractor Availability Check, Payment Schedule Impact)
- Project Details Module FRD
- Finance Module FRD
- Notification System Documentation
Document End
Events - Services tab
Services Management Module
1. Module Overview
- Module Name: Services Management Tab
- Purpose: Enable users to configure, manage, and assign contractors for event services, including Photography, Videography, and Content Creation, within the event management
- Business Goal: Streamline service configuration and contractor assignment to ensure proper event coverage and resource allocation
2. User Roles & Permissions
Role
Description
Key Permissions
Agency Admin
Full event management access
Create, edit, delete services; assign contractors; full configuration access
3. User Flow
- Service Configuration (Add New Service)
- The user navigates to the Event → Services tab
- View existing configured services or the empty state
- Clicks the (Services “+”) button to add a new service or the “Edit Service” button to modify an existing service
- Edit Service Management
- Users click on the “Edit Service” button in the respective service to modify an existing service (Photography/Videography/Content Creation)
- Configures service details (package, coverage hours, deliverables, roles)
- Saves configuration and returns to the services dashboard
- Contractor Assignment
- The user clicks the “Assign Contractors” button
- The system validates prerequisites (venue, event date)
- Opens contractor assignment pop-up (separate module)
Critical Path: Project creation → View Project Details → Events → Services tab
4. Field Details & Validations
Services tab Fields
Field Name
Type
Required
Validation Rules
Services +
Button
Yes
Open the “Add New Services” pop-up if any of the Photography, Videography, or Content Creation services have not been selected for the event.
- “+” button not displayed if all services are already been setup
Services Name
Label
Yes
Auto-populated based on the selected service during project creation
Assign Contractors
Button
Yes
- Opens the contractor assignment pop-up to assign contractors in the event
- On clicking "Assign Contractor", show a pop-up if: the venue is not added, the event date is TBD, or both are not configured
Edit Service
Button
Yes
- Opens the edit services options
- Opens edit service screen to update:
Package, Coverage hours, Min amount of photos, Roles needed, Service note
Package
Display Card
Yes
- Display Options: Basic, Intermediate, Advanced
- Must be one of the predefined package types
- Display the package selected by the user within the edit service interface
- By default, show the “Basic” package
Hours Coverage
Display Card (Numeric)
Yes
- Display the count of hours coverage required for the service
- By default display the “--”
- Display the hours entered by the user within the edit service interface (Min 1 - Max 24)
Min Amount of Photos
Display Card (Numeric)
Yes
Display the minimum amount of photos entered by the user within the edit service interface (Min 1 - Max 5000)
Number of Shooters
Display Card (Numeric)
Yes
- The default display value is 1 (As Lead shooter is by default selected)
- The count shows the number of selected checkboxes in Edit Service > "Roles needed for this event
- System automatically counts selected roles (checkboxes) up to max 4 roles
Roles Needed For This Event
List Display
Yes
Display the name of the role which are selected in the Edit Services: Lead Shooter (By default display), Second Shooter, Drone Operator, and Assistant
- Role will be displayed as the card in the contractor's tab under the respective service for contractor assignment
Service Note
Text Block
No
Display the service note text entered by the user within the Edit Service interface
Assigned Contractors
Card/Row
Conditional
- Display the contractor details if a contractor is assigned to the service
- Contractor’s details - (Full name, specialization, Role icon, Pay rate, Contractor fee, Service area, and Miles to location - System to calculate miles based on contractor address (from Contractor Portal) and venue location (from Project Management), Average rating of the contractor)
- If multiple contractors are present, display them stacked vertically (one above the other).
- On clicking the kebab menu, display the following options: Open Profile, Pay Contractor, Update Event Price, Replace, Remove
5. Error Message Handling
Field
Validation Scenario
Error Message
Assign Contractors button
Venue not configured
Opens pop-up “Please set the event venue before assigning contractors.”
Assign Contractors button
Event date TBD
“Please set the event date before assigning contractors.”
Assign Contractors button
Both the venue & event date are missing
Opens pop-up “Please configure event venue and date before assigning contractors.”
General
Server timeout
“Something went wrong.”
6. Functional Logic
- Service Type Limitation: Only three predefined service types are available (Photography, Videography, and Content Creation)
- Project Service Selection: Services are initially selected during the project creation phase and can be added later using the “Services +” button
- Service + button logic: The system will automatically hide the “+” (Add Services) button if all available services have already been added to the event
- Role-Based Shooter Calculation: The number of shooters automatically reflects the count of selected role checkboxes (1-4 range) in the edit service interface
- Package Static Assignment: All services default to the “Basic” package and reflect the package selected in the edit service interface
- Contractor Assignment Prerequisites: The system validates venue and event date configuration before allowing contractor assignment
- Service Persistence: All service configurations are saved to the particular event
7. Test Cases
Link Here: Pixally Test cases - 01.04.25
8. Acceptance Criteria
- Service Configuration: Users can successfully create and configure services for Photography, Videography, and Content Creation, with all required fields validated
- Role Management: The System accurately calculates the number of shooters based on selected role checkboxes with range validation (1-4)
- Field Validation: All form fields properly validate input with appropriate error messages displayed inline
- Contractor Assignment Validation: The system prevents contractor assignment when venue or event date prerequisites are not met
- Data Persistence: All service configurations save successfully and persist across user sessions
- Error Handling: All error scenarios display appropriate messages without system crashes
9. Dependencies
Module/System
Dependency Type
Impact if Unavailable
Contractor Management
Integration
Cannot assign contractors to services
Contractor Portal
Data Exchange
Contractor information is not accessible
Brand Management
Configuration
Service branding/templates unavailable
Add new services not accessible
Calendar System
Data Validation
Cannot validate event dates for contractor assignment
Project Management
Data Validation
Cannot validate venue configuration for contractor assignment
Project Management
Core Dependency
Cannot access service configuration without an active project
10. References
Link: Click Here
Edit services
Edit Services
- Purpose: Enable users to modify existing service configurations, including package selection, coverage hours, deliverables, role assignments, and service notes
1. User Flow
- Edit Service Access
- The user navigates to the Event → Services tab
- Click the "Edit Service" button on the desired service card
- The system opens the edit service form with pre-populated current values
- Service Configuration Update
- User views service type (read-only display)
- Modifies package selection, coverage hours, and the Min amount of photos
- Configures role assignments and adds service notes
- The system validates changes in real-time
- Changes Submission
- The user clicks "Save Changes" to submit modifications
- The system validates all required fields and business rules
- On success, returns to the services dashboard with updated information
- On error, displays inline validation messages
Critical Path: Service selection → Parameter modification → Validation → Save → Dashboard return
2. Field Details & Validations
Edit Service Form Fields
Field Name
Type
Required
Validation Rules
Service Type
Display Text
Yes
- Displays the service name (view only), e.g., Photography, Videography, or Content Creation, for the service being edited.
Package
Dropdown
Yes
- Options: Basic, Intermediate, Advanced
- Must be one of the predefined package types
Coverage
Numeric Input
Yes
- Allows numeric input only, starting from 1
- Minimum: 1
- Maximum: 24
Min amount of photos
Numeric Input
Yes
- Conditional: Only appears if the Service Type is Photography.
- Allows numeric input only
- Minimum: 1
- Maximum: 5,000
Add Custom Field
Button
Yes
Opens the “Add custom field” pop-up
Role Checkboxes
Checkbox Group
Yes
- Options: Lead Shooter, Second Shooter, Drone Operator, Assistant
- Displays the number of selected checkboxes (1–4) in “No of Shooters” (Services tab). For example, if one checkbox is selected, “No of Shooters” shows 1
- Selected role after saving will be displayed as a card in the contractor's tab under the respective service for contractor assignment
Service Note
Text Area
Yes
- Max 250 characters, plain text only
- Added note is displayed in the Service Note section under the Services tab
Cancel
Button
No
Closes the edit service interface and returns to the previous services view without saving the change
Save Changes
Button
No
- On click validates all required fields and input validations. If valid, saves changes and returns to the previous services interface.
- If validation occurs, displays relevant error messages and prevents submission.
3. Success Message Handling
Validation Scenario
Error Message
On successfully saving service changes
"Your {Photography/Videography/Content Creation} service has been updated successfully."
4. Error Message Handling
Field
Validation Scenario
Error Message
Package
Not selected
“Please select a package.”
Coverage
Empty
“Please enter the coverage duration.”
Coverage
Coverage > 24
“Coverage must be between 1 and 24 hours.”
Min amount of photos
Empty
“Please enter the minimum amount of photos.”
Min Amount of photos
Min Amount of photos > 5000
“Minimum amount of photos must be between 1 and 5000.”
Roles
Unselected all
“Please select a role.”
Service Note
Exceeds 250 characters
"Service note cannot exceed 250 characters."
General
Save operation failed
"Something went wrong."
5. Functional Logic
- Service Type Heading: Read-only field showing the type of service being edited (Photography, Videography, or Content Creation)
- Coverage: The Coverage input field only accepts numeric values between 1 and 24 (inclusive)
- Conditional Photo Field: The "Min amount of photos" field appears and becomes mandatory only when editing the Photography service and input allows numeric values between 1 and 5000 (inclusive)
- Role Count Calculation: Selected role checkboxes automatically update the shooter count (Number of Shooters) displayed on the services dashboard (1- 4 range)
- Role: The selected role after saving will be displayed in the contractor's tab in their respective service for contractor assignment
- Form Pre-population: All fields load with current service configuration values
- Change Detection: The System tracks modifications to enable/disable save functionality
6. Edge Cases
Scenario
Expected Behavior
The user navigates away without saving changes
Data will not be saved
Multiple users editing the same service simultaneously
Last save wins, display notification of concurrent changes
Session timeout during the edit
Preserve form data, require re-authentication, restore form state
The service was deleted by another user while editing
Display an error message and redirect to the services dashboard
7. Test Cases
Link: Pixally Test cases - 01.04.25
8. Acceptance Criteria
- Form Pre-population: Edit service form loads with all current service configuration values correctly displayed
- Conditional Field Logic: The "Min amount of photos" field appears and validates only when editing the Photography service
- Service Type Display: The service type heading is displayed as a read-only field showing which service is being edited
- Role Assignment: Users can select/deselect contractor roles with accurate count reflection on the service tab (Number of Shooters)
- Validation Coverage: All required fields validate with appropriate inline error messages
- Save Functionality: Valid changes save successfully and return the user to the updated services dashboard
- Custom field & Delete service Flow Integration: Custom field and delete service buttons properly navigate to respective workflows
9. Reference
- Figma Link: Click here
Add New Service
1. Add New Services Flow
- Purpose: Enable users to add new services (Photography, Videography, Content Creation) to existing events within a project through a pop-up interface
2. User Flow
- Service Addition Initiation
- The user navigates to the Event → Services tab
- The “+” (Add Services) button is displayed only when at least one service remains available to add. When clicked, it opens the “Add New Services” pop-up
- Service Configuration
- The user views the current event name (read-only)
- Selects one service type from the available options (services already added are grayed out and cannot be selected).
- For the selected service pop-up expands and the system dynamically shows relevant fields based on the selected services
- Service Submission
- The user completes all required fields for the selected services
- Clicks the "Add new services" button
- The system validates and creates a new service, and shows a success toast message
- The pop-up closes and returns to the services tab
Critical Path: Service selection → Service configuration → Validation → Service creation → Service tab displays additional service (Photography/Videography/Content Creation)
3. Field Details & Validations
Field Name
Type
Required
Validation Rules
Event Name
Text Display (Read-only)
Yes
Automatically populated based on the currently selected event tab
Service Type
Button Toggle
Yes
- Single select (Allow only one service selection per service (single service per submission)
- Already added services appear disabled/grayed out
- Selecting a service expands the pop-up and displays its configuration section, and deselecting collapses the pop-up
Choose Package
Dropdown
Yes
- Options: Basic, Intermediate, Advanced
Coverage
Text Input
Yes
- Allows numeric input only, starting from 1
- Minimum: 1
- Maximum: 24
Min amount of photos
Numeric Input
Yes
- Conditional: Only appears if the Service Type is Photography selected
- Allows numeric input only, starting from 1
- Minimum: 1
- Maximum: 5,000
Role Checkboxes
Checkbox Group
Yes
- Options: Lead Shooter, Second Shooter, Drone Operator, Assistant
- After the service is added successfully display the number of selected checkboxes (1–4) in “No of Shooters” (Services tab). For example, if one checkbox is selected, “No of Shooters” shows 1 in services tab
Service Note
Text Area
No
- Max 250 characters, plain text only
- Added note is displayed in the Service Note section under the services tab of the respective service
Cancel
Button
No
Closes the pop-up without saving changes and returns to the services tab
Add
Button
No
- The ‘Add’ button remains enabled at all times, and validations occur upon click
- If no validation occurs service will be added to the respective event with a success toast message
4. Success Message Handling
Validation Scenario
Error Message
On successfully saving service changes
"Your {Photography/Videography/Content Creation} service has been added successfully."
5. Error Message Handling
Field
Validation Scenario
Error Message
Service Type
No service selected
"Please select a service type."
Package
Not selected
“Please select a package.”
Coverage
Empty
“Please enter the coverage duration.”
Coverage
Coverage > 24
“Coverage must be between 1 and 24 hours.”
Min amount of photos
Empty
“Please enter the minimum amount of photos.”
Min amount of Photos
Min amount of photos > 5000
“Minimum amount of photos must be between 1 and 5000.”
Roles
Unselected all
“Please select a role.”
Service Note
Exceeds 250 characters
"Service note cannot exceed 250 characters."
General
Server error
"Something went wrong."
6. Functional Logic
- Service Availability Check: The system will automatically hide the “+” (Add Services) button if all available services have already been added to the event
- Dynamic Service Sections: Each selected service type expands the pop-up and displays its configuration section
- Conditional Field Display: The "Min amount of photos" field only appears when the Photography service is selected
- Service State Management: Already added services for the current event appear disabled/grayed out in the service type selection
- Button State Control: The "Add new services" button remains enabled. If validations fail, display relevant errors.
7. Test Cases
Link: Pixally Test cases - 01.04.25
8. Acceptance Criteria
- Pop-up Access Control: The "Services +" button successfully opens the add services pop-up when additional services can be added
- Service Addition Prevention: The System hides the “+” button when all service types are already configured for the event
- Service Type Selection: Users can select a service type that has not yet been added to the event. Already-added service types are disabled and cannot be selected again
- Dynamic Configuration: Selected service expands the pop-up and displays its configuration section with appropriate fields
- Conditional Field Logic: The "Min amount of photos" field appears only when the Photography service is selected
- Validation Coverage: All required fields validate properly with specific error messages
- Success Flow: Successfully added services, displaysthe dynamic service type name for the success message, and returns the user to the services tab
9. References
- Figma Link: Click here
Snapshot
Functional Requirements Document (FRD)
Module: Project Details > Snapshot
1. Module Overview
Module Name: Snapshot
Purpose: The Snapshot module provides a one-page project brief for contractors containing all essential event information in a single, downloadable PDF format. The Snapshot consolidates key project details tailored to each contractor's assigned service and role, eliminating the need for contractors to navigate between multiple tabs and serving as an offline backup during network issues or platform downtime.
Business Goals:
- Improve contractor preparedness by providing a comprehensive, easily accessible summary of event details before the event date.
- Reduce on-site confusion by ensuring contractors have all critical information (venue, contacts, timeline, assigned services, other team members) available offline.
- Enhance communication efficiency between agencies and contractors by delivering personalized, role-specific information.
- Maintain data accuracy through dynamic data fetching that reflects the latest project state at the time of sending.
- Support timely information delivery through controlled access timing and automated sending capabilities.
2. User Roles & Permissions
Role
View Snapshot
Send Snapshot
Download PDFs
Configure Auto-Send
Access Contractor Portal
Agency Owner
✓
✓
✓
✓
✗
Agency Admin
✓
✓
✓
✓
✗
Agency Manager
✓
✓
✓
✗
✗
Agency Staff
✓
✓ (based on event access)
✓ (based on event access)
✗
✗
Contractor
✓ (own Snapshot only)
✗
✓ (own Snapshot only, 1 week before event)
✗
✓
3. User Flow
3.1 Agency Portal - Send Snapshot Flow
3.1.1 The agency user navigates to the Projects section from the left sidebar menu and selects a specific project.
3.1.2 The system loads the Project Details page displaying the project header with cover image, project name, event dates, and location.
3.1.3 The agency user clicks on a specific event card (e.g., "Rehearsal Dinner", "Wedding") to view event details.
3.1.4 The system displays the Event Details page with tabs including Services, Contractors, Raw Media, Files/Documents, Notes, and Info.
3.1.5 The agency user locates the "Send SNAPSHOT" button in the Services tab area.
3.1.6 The agency user hovers over the "Send SNAPSHOT" button and the system displays a tooltip with the following information: "📌 Snapshot - A one-page project brief for contractors. Use Snapshot to: See all key info in one place — no clicking around between tabs. Have an offline backup in case of network issues or Pixally downtime."
3.1.7 The agency user clicks the "Send SNAPSHOT" button to initiate the snapshot sending process.
3.1.8 The system displays the "Send SNAPSHOT" modal containing a list of all contractors assigned to the current event.
3.1.9 The system displays each contractor entry with their profile photo (or initials avatar if no photo), contractor name, service type, role, and a "Select" button.
3.1.10 The system displays contractors who have previously received the Snapshot with a "Sent" status indicator and timestamp showing when it was last sent.
3.1.11 The agency user selects individual contractors by clicking the "Select" button next to each contractor's name, or clicks "Select All" to select all contractors at once.
3.1.12 The system changes the "Select" button to "Selected" with a highlighted state for each selected contractor.
3.1.13 The agency user reviews the selection and chooses one of the available actions: "Download PDFs" or "Send to Contractors".
3.1.14 If the agency user clicks "Send to Contractors", the system sends personalized Snapshot PDFs via email to each selected contractor.
3.1.15 The system displays a green success toast notification stating "SNAPSHOT was successfully sent" for a single contractor or "SNAPSHOT was successfully sent to X contractors" for multiple contractors.
3.1.16 The system updates the contractor cards in the modal to show "Sent" status with the current timestamp.
3.1.17 The system closes the modal and returns the agency user to the Event Details page.
3.1.18 The system changes the button label from "Send SNAPSHOT" to "Resend SNAPSHOT" indicating that at least one contractor has already received the Snapshot.
3.2 Agency Portal - Resend Snapshot Flow
3.2.1 The agency user clicks the "Resend SNAPSHOT" button on the Event Details page.
3.2.2 The system displays a confirmation dialog asking "Are you sure you want to resend the Snapshot? This will send updated information to the selected contractors."
3.2.3 The agency user confirms the resend action by clicking "Confirm" or cancels by clicking "Cancel".
3.2.4 If confirmed, the system displays the Send SNAPSHOT modal with the contractor list showing previous sent timestamps.
3.2.5 The agency user selects contractors and proceeds with sending as per the standard send flow.
3.2.6 The system fetches the latest project data including any changes to event details, contractor assignments, payment values, or notes before generating the Snapshot PDFs.
3.2.7 The system sends the updated Snapshots and displays the success notification.
3.3 Agency Portal - Download PDFs Flow
3.3.1 The agency user opens the Send SNAPSHOT modal and selects one or more contractors.
3.3.2 The agency user clicks the "Download PDFs" button.
3.3.3 The system generates individual PDF Snapshots for each selected contractor with personalized content.
3.3.4 If a single contractor is selected, the system downloads a single PDF file named using the format: Snapshot_[ContractorName]_[EventDate].pdf (e.g., Snapshot_John_Doe_Dec19-2024.pdf).
3.3.5 If multiple contractors are selected, the system downloads a zip file named using the format: Snapshots_[ProjectName]_[EventDate].zip (e.g., Snapshots_Jadon_Monika_Wedding_Dec19-2024.zip) containing individual PDFs for each contractor.
3.3.6 The system displays a green success toast notification stating "SNAPSHOT downloaded successfully".
3.3.7 The system closes the modal and returns the agency user to the Event Details page.
3.4 Contractor Portal - Download Snapshot Flow
3.4.1 The contractor logs into the Contractor Portal and navigates to the Events section from the left sidebar menu.
3.4.2 The system displays a list of events the contractor is assigned to.
3.4.3 The contractor clicks on a specific event to view the Event Details page.
3.4.4 The system displays the Event Details page with the event header showing brand logo, project name, event date, and location.
3.4.5 The contractor locates the "Download SNAPSHOT" button on the Event Details page.
3.4.6 If the current date is more than one week before the event date, the system displays the "Download SNAPSHOT" button in a disabled/greyed-out state.
3.4.7 The contractor hovers over the disabled button and the system displays a tooltip stating "Snapshot can be downloaded only 1 week before the Event date."
3.4.8 If the current date is within one week of the event date, the system displays the "Download SNAPSHOT" button in an enabled state.
3.4.9 The contractor clicks the enabled "Download SNAPSHOT" button.
3.4.10 The system generates a personalized PDF Snapshot containing the contractor's assigned services, event details, notes shared with contractors, other contractors' contact information (excluding the downloading contractor), and client contacts.
3.4.11 The system downloads the PDF to the contractor's device with the filename format: Snapshot_[ContractorName]_[EventDate].pdf.
3.4.12 The system displays a green success toast notification stating "SNAPSHOT downloaded successfully".
3.5 Auto-Send Snapshot Flow (Automated)
3.5.1 The agency owner or admin navigates to Settings > Notifications > Company Settings in the Agency Portal.
3.5.2 The system displays the Snapshot settings section with an "Send automatically one day before events" toggle.
3.5.3 The agency user toggles the setting to "On" to enable automatic Snapshot sending.
3.5.4 The system saves the setting and displays a success notification "Auto-send settings saved successfully".
3.5.5 The system runs a daily scheduled job to check for events occurring the next day.
3.5.6 For each event occurring the next day with auto-send enabled, the system generates personalized Snapshot PDFs for all assigned contractors.
3.5.7 The system sends emails with PDF attachments to each contractor's registered email address.
3.5.8 The system logs the auto-send action in the audit trail for tracking purposes.
3.5.9 For multi-day events, the system triggers the auto-send one day before the first event date only.
4. Functional Logic
4.1 Snapshot Content Structure
- The Snapshot PDF is organized into distinct sections displayed in a specific order: Header, Event Details, Services, Notes, Contacts, and Contractors.
- The Header section displays the brand logo in the top area, followed by the project cover image (if uploaded) or a default placeholder image.
- The Header section includes the full project name (e.g., "Jadon & Monika Wedding"), the event date formatted as a readable date (e.g., "Wed, Dec 19, 2025"), and the service area/city with timezone (e.g., "Boston, Massachusetts, USA • Timezone: GMT-4").
- The Event Details section displays the event type (e.g., "Rehearsal Dinner"), the specific event date, time (if added), the primary venue name and full address, and the brand name with the brand owner/contact name.
- If multiple venues exist for the event, the system displays a warning message stating "There may be additional locations, please check your timeline and notes to coordinate."
- The Services section displays ONLY the services that the specific contractor receiving the Snapshot is assigned to, not all services for the event.
- Each service in the Services section displays as a card containing the service name header (e.g., "Photography"), quick action buttons for Timeline (if uploaded for the event) and Shooting Guide (if configured in Brand Settings for the service type), and service metrics including role, coverage hours, minimum photo count (for Photography only), and payment amount.
- The service metrics grid displays the contractor's assigned role (e.g., "Lead Shooter"), the number of coverage hours (e.g., "8 hours"), the minimum amount of photos required (displayed only for Photography service), and the contractor's fee amount formatted as currency (e.g., "$400.00").
- Custom fields are displayed in the Services section only if they have been configured with visibility set to "visible to contractors" in the system settings.
- Custom field values are displayed based on their field type: Short Text and Long Text display as plain text, Date Picker displays in formatted date, Number displays as numeric value, Link displays as clickable hyperlink, Single Choice displays the selected option, and Multiple Choice displays selected options as a comma-separated list.
- If no custom fields are configured for the project, event, or services, or if no custom fields are set to be visible to contractors, the custom fields area remains empty and is not displayed.
- The Service Note is displayed below the service details only if a note has been added by the agency for that specific service.
- The Notes section displays only Public notes that have the "Contractors" checkbox selected in the visibility settings.
- Private notes (visible only to the agency user who created them) are excluded from the Snapshot entirely.
- Public notes that are shared only with Clients or Team Members (but not Contractors) are excluded from the Snapshot.
- Each note in the Notes section displays the note headline (if provided) and the full note content.
- Notes are displayed in chronological order with the newest notes appearing first.
- The Contacts section displays all client contacts associated with the event, including their profile photo (or initials avatar if no photo), full name, role/relationship (e.g., "Bride", "Mother of Bride", "Groom"), email address, and phone number.
- If a contact's information is marked as "Not Available", the system displays an appropriate indicator in place of the missing information.
- The Contractors section displays ALL contractors assigned to the event EXCEPT the contractor who is receiving the Snapshot.
- Each contractor entry in the Contractors section displays their profile photo (or initials avatar), full name, service type they are assigned to, their role, location, email address, and phone number.
- The Snapshot content adapts dynamically based on the recipient to avoid showing redundant information about themselves.
4.2 Send SNAPSHOT Modal Logic
- The Send SNAPSHOT modal opens as an overlay when the agency user clicks the "Send SNAPSHOT" or "Resend SNAPSHOT" button.
- The modal displays a header with the title "Send SNAPSHOT" and an X icon button in the top-right corner to close the modal.
- The modal displays a "Contractors" label as the section header with a "Select All" option aligned to the right.
- The contractor list displays all contractors currently assigned to the selected event, regardless of their service type.
- Each contractor row in the list displays the contractor's circular profile photo (or initials avatar if no photo is available), the contractor's full name as primary text, and the service type combined with role as secondary text (e.g., "Photography - Lead Shooter").
- A star icon indicator is displayed next to contractors who hold lead roles (e.g., Lead Shooter).
- Each contractor row displays a "Select" button that toggles to "Selected" when clicked.
- Contractors who have previously received the Snapshot display a "Sent" status indicator with the date and time of the last send (e.g., "Sent: Feb 13, 2026, 2:30 PM").
- Clicking the "Select All" option selects all contractors in the list and changes their individual buttons to "Selected" state.
- When all contractors are selected, the "Select All" text changes to "Deselect All" to allow bulk deselection.
- The modal footer displays three action buttons: "Cancel", "Download PDFs", and "Send to Contractors".
- The "Cancel" button closes the modal without performing any action.
- The "Download PDFs" and "Send to Contractors" buttons are disabled (greyed out) when no contractors are selected.
- The "Download PDFs" and "Send to Contractors" buttons become enabled when at least one contractor is selected.
- The "Send to Contractors" button is styled as the primary action button with a yellow/gold background color.
4.3 PDF Generation Logic
- The system generates Snapshot PDFs on-demand at the time of download or send, ensuring the content reflects the most current data.
- Each PDF is personalized for the specific contractor, showing only their assigned services and excluding themselves from the contractors list.
- The PDF filename for individual downloads follows the format: Snapshot_[FirstName][LastName][MonDD]-[YYYY].pdf where spaces in names are replaced with underscores and hyphens are preserved.
- If a contractor has a middle name, it is included between the first and last name with underscores (e.g., Snapshot_Mary_Jane_Watson-Parker_Dec19-2024.pdf).
- The zip file filename for bulk downloads follows the format: Snapshots_[ProjectName]_[MonDD]-[YYYY].zip where spaces in the project name are replaced with underscores.
- The system removes special characters from filenames except for underscores and hyphens to ensure file system compatibility.
- Each PDF generation pulls fresh data from the database including event details, service configurations, contractor assignments, notes, and contact information.
- The system does not cache previously generated Snapshots; every generation creates a new PDF with current data.
4.4 Email Sending Logic
- When the agency user clicks "Send to Contractors", the system generates individual PDF files for each selected contractor.
- The system sends separate emails to each contractor's registered email address (not as bulk CC/BCC).
- Each email includes the personalized Snapshot PDF as an attachment.
- The email subject and body content are configured through the system email templates (to be defined separately).
- If a contractor does not have a registered email address, the system skips that contractor and displays an error notification.
- The system tracks successful and failed email deliveries and displays appropriate notifications to the agency user.
4.5 Auto-Send Settings Logic
- The auto-send toggle is located in Settings > Notifications > Company Settings within the Agency Portal.
- The toggle label displays "Send automatically one day before events" with Off/On options.
- The default state of the toggle is "Off" for new agency accounts.
- When the toggle is turned "On", the system schedules automatic Snapshot sending for all future events.
- The system runs a scheduled job daily (recommended: early morning based on agency timezone) to identify events occurring the next day.
- For each qualifying event, the system generates personalized Snapshot PDFs for all assigned contractors and sends them via email.
- For multi-day events (e.g., Dec 19-21), the auto-send triggers one day before the first event date only (i.e., Dec 18).
- The auto-send process uses the same PDF generation logic as manual sends, ensuring data freshness.
- The system logs all auto-send activities in an audit trail for tracking and troubleshooting purposes.
- If the auto-send fails for any contractor, the system logs the failure and continues processing remaining contractors.
4.6 Contractor Portal Download Restriction Logic
- The "Download SNAPSHOT" button on the Contractor Portal is subject to a time-based access restriction.
- The system calculates the number of days between the current date and the event date to determine button availability.
- If the current date is more than 7 days before the event date, the button is displayed in a disabled/greyed-out state.
- When the contractor hovers over the disabled button, the system displays a tooltip message: "Snapshot can be downloaded only 1 week before the Event date."
- If the current date is within 7 days of the event date (including the event date itself), the button is displayed in an enabled state.
- For multi-day events, the restriction is calculated based on the first event date.
- The download restriction ensures that contractors receive the most up-to-date information closer to the event date.
- Once enabled, the download button remains available until the event is completed or archived.
4.7 Resend Functionality Logic
- After at least one contractor has received the Snapshot, the button label changes from "Send SNAPSHOT" to "Resend SNAPSHOT".
- The button label change is persistent and based on the send history stored in the system.
- When the agency user clicks "Resend SNAPSHOT", the system displays a confirmation dialog to prevent accidental resends.
- The confirmation dialog message asks: "Are you sure you want to resend the Snapshot? This will send updated information to the selected contractors."
- The dialog provides "Confirm" and "Cancel" buttons for the user to proceed or abort the action.
- Upon confirmation, the system opens the Send SNAPSHOT modal with updated contractor information.
- The modal displays the last sent timestamp for each contractor who has previously received the Snapshot.
- Resending always fetches the latest project data, including any changes to event details, contractor additions/removals, payment values, notes, or custom fields.
- The resend functionality supports sending to the same contractors again or to a different selection of contractors.
- After a successful resend, the system updates the sent timestamp for all recipients.
4.8 Sent Status Tracking Logic
- The system tracks the send status for each contractor at the event level.
- When a Snapshot is sent to a contractor, the system records the timestamp of the send action.
- The sent status is displayed on individual contractor cards within the Send SNAPSHOT modal.
- The sent status format displays as "Sent: [Date], [Time]" (e.g., "Sent: Feb 13, 2026, 2:30 PM").
- Contractors who have never received the Snapshot do not display any sent status indicator.
- The sent status is updated each time a Snapshot is resent to a contractor, showing only the most recent timestamp.
- The system does not display a count of how many contractors have received the Snapshot.
4.9 Tooltip Display Logic
- A tooltip is displayed when the user hovers over the "Send SNAPSHOT" or "Download SNAPSHOT" buttons.
- The tooltip content for the Agency Portal includes: "📌 Snapshot - A one-page project brief for contractors. Use Snapshot to: See all key info in one place — no clicking around between tabs. Have an offline backup in case of network issues or Pixally downtime."
- The tooltip content for the disabled download button on Contractor Portal states: "Snapshot can be downloaded only 1 week before the Event date."
- Tooltips appear after a brief hover delay (approximately 500ms) and disappear when the cursor moves away.
4.10 Empty State Handling Logic
- If no venue address is available for the event, the venue field displays a dash ("—") or is omitted from the Snapshot.
- If no client contacts are added to the event, the Contacts section displays the section header with no entries below it.
- If no other contractors are assigned to the event (the recipient is the only contractor), the Contractors section displays the section header with no entries.
- If no notes are shared with contractors (no Public notes with Contractors checkbox selected), the Notes section displays the section header with no entries.
- If no timeline document is uploaded for the service, the Timeline button is not displayed in the service card.
- If no shooting guide is configured in Brand Settings for the service type, the Shooting Guide button is not displayed.
- If no cover image is uploaded for the project, the system displays a default placeholder image or uses the brand logo as a fallback.
- If no service note is added for a specific service, the Service Note section is not displayed for that service.
- If no custom fields are configured or none are visible to contractors, the custom fields area is not displayed.
- If the minimum photo count is not set or the service is not Photography, the Min Photos field is not displayed.
4.11 Data Freshness and Version Control Logic
- Snapshot content is not static but reflects the current project state at the time of generation.
- Every send or download action triggers a fresh data fetch from the database.
- Changes made to event details, contractor assignments, payment values, notes, or custom fields after a Snapshot has been sent are reflected in subsequent downloads or resends.
- Previously sent Snapshots retain their original data at the time of sending; the system does not retroactively update sent PDFs.
- This approach supports ongoing project revisions and ensures contractor trust in the accuracy of received information.
- The system does not maintain version history of Snapshots; only the most recent send timestamp is tracked.
4.12 Clickable Links in PDF Logic
- The Timeline button in the PDF, when clicked, opens or downloads the timeline document uploaded by the agency.
- The Shooting Guide button in the PDF, when clicked, opens or downloads the shooting guide document configured in Brand Settings for the specific service type.
- Email addresses in the PDF are clickable and open the user's default email client with the address pre-filled in the "To" field.
- Phone numbers in the PDF are clickable on mobile devices and trigger the phone dialer; on desktop, they remain as selectable text.
5. Field Details & Validations
5.1 Send SNAPSHOT Modal Fields
Field Name
Field Type
Validation Rules
Contractor Selection
Checkbox/Toggle
At least one contractor must be selected to enable action buttons
Select All
Toggle Button
Toggles selection state for all contractors in the list
5.2 Snapshot PDF Content Fields
Field Name
Field Type
Validation Rules
Brand Logo
Image
Displays brand logo from Brand Settings; falls back to placeholder if not available
Cover Image
Image
Displays project cover image; falls back to brand logo or placeholder if not uploaded
Project Title
Text
Required; displays full project name; truncates with ellipsis if exceeds display width
Event Date
Date
Required; formatted as "Day, Mon DD, YYYY" for single day or "Day, Mon DD - Day, Mon DD, YYYY" for multi-day
Location
Text
Displays as "City, State, Country • Timezone: GMT±X"; shows dash if not available
Event Type
Text
Required; displays event type name (e.g., "Rehearsal Dinner", "Wedding")
Primary Venue
Text
Displays venue name and full address; shows dash if not available
Brand Name
Text
Required; displays brand name from Brand Settings
Brand Contact
Text
Displays brand owner/contact name; optional field
Service Name
Text
Required; displays service type name (e.g., "Photography", "Videography")
Contractor Role
Text
Required; displays assigned role (e.g., "Lead Shooter", "Second Shooter")
Coverage Hours
Number
Required; displays as "X hours" format
Min Photos
Number
Displayed only for Photography service; shows numeric value or dash if not set
Amount
Currency
Required; displays contractor fee formatted as "$X.XX"
Custom Fields - Short Text
Text
Displays only if visibility set to "contractors"; plain text format
Custom Fields - Long Text
Text
Displays only if visibility set to "contractors"; plain text format
Custom Fields - Date Picker
Date
Displays only if visibility set to "contractors"; formatted date
Custom Fields - Number
Number
Displays only if visibility set to "contractors"; numeric value
Custom Fields - Link
URL
Displays only if visibility set to "contractors"; clickable hyperlink
Custom Fields - Single Choice
Dropdown
Displays only if visibility set to "contractors"; selected option text
Custom Fields - Multiple Choice
Multi-select
Displays only if visibility set to "contractors"; comma-separated list of selected options
Service Note
Rich Text
Displayed only if note exists for the service
Note Headline
Text
Optional; displays note title if provided
Note Content
Rich Text
Displays full note body; supports formatting
Contact Name
Text
Required for each contact; displays full name
Contact Role
Text
Displays relationship type (e.g., "Bride", "Groom", "Mother of Bride")
Contact Email
Displays email address; clickable link
Contact Phone
Phone
Displays formatted phone number; clickable on mobile
Contractor Name
Text
Required; displays full name of other contractors
Contractor Service
Text
Displays service type the contractor is assigned to
Contractor Role
Text
Displays contractor's role for the service
Contractor Location
Text
Displays contractor's location/city
Contractor Email
Displays email address; clickable link
Contractor Phone
Phone
Displays formatted phone number
5.3 Settings Fields
Field Name
Field Type
Validation Rules
Auto-send Snapshot Toggle
Toggle (Off/On)
Default: Off; toggles automatic sending 1 day before events
5.4 PDF Filename Fields
Field Name
Field Type
Validation Rules
Contractor Name
Text
Spaces replaced with underscores; hyphens preserved; special characters removed
Project Name
Text
Spaces replaced with underscores; hyphens preserved; special characters removed
Event Date
Date
Formatted as MonDD-YYYY (e.g., Dec19-2024)
6. Success Message Handling
Action
Success Message
Trigger Condition
Post-Success Action
Send to single contractor
"SNAPSHOT was successfully sent"
Snapshot email successfully delivered to one contractor
Update sent status with timestamp; close modal
Send to multiple contractors
"SNAPSHOT was successfully sent to X contractors"
Snapshot emails successfully delivered to multiple contractors
Update sent status for all recipients; close modal
Download single PDF
"SNAPSHOT downloaded successfully"
PDF file successfully generated and downloaded
Close modal; file saved to user's device
Download multiple PDFs (zip)
"SNAPSHOT downloaded successfully"
Zip file successfully generated and downloaded
Close modal; file saved to user's device
Auto-send settings saved
"Auto-send settings saved successfully"
Toggle state successfully saved to database
Settings page remains open; toggle reflects new state
Contractor portal download
"SNAPSHOT downloaded successfully"
PDF file successfully generated and downloaded
File saved to contractor's device
7. Error Message Handling
Error Scenario
Error Message
Trigger Condition
Required Action
No contractors selected
"Please select at least one contractor"
User clicks action button without selecting any contractor
User must select at least one contractor
PDF generation failed
"Failed to generate Snapshot. Please try again."
System error during PDF creation
User should retry; contact support if persistent
Email send failed (single)
"Failed to send Snapshot to [Contractor Name]. Please try again."
Email delivery failure for one contractor
User should verify contractor email and retry
Email send failed (partial)
"Snapshot sent to X contractors. Failed to send to: [Names]"
Some emails delivered, some failed
User should verify failed contractor emails and retry
Network error during download
"Download failed due to network error. Please check your connection and try again."
Network connectivity issue during download
User should check internet connection and retry
No contractors assigned
"No contractors are assigned to this event"
User opens modal for event with no contractor assignments
User should assign contractors to the event first
Contractor email missing
"Cannot send Snapshot to [Name] - email address missing"
Contractor profile lacks email address
Agency should update contractor's email in their profile
File size exceeds limit
"Snapshot file size exceeds limit. Please contact support."
Generated PDF exceeds system file size limit
User should contact support for assistance
Auto-send configuration error
"Unable to save auto-send settings. Please try again."
Database error when saving toggle state
User should retry; contact support if persistent
Download restricted
"Snapshot can be downloaded only 1 week before the Event date."
Contractor attempts download more than 7 days before event
Contractor must wait until within 7 days of event
8. Edge Cases
Scenario
System Behavior
Fallback/Recovery
Contractor assigned to multiple services in same event
Single PDF generated showing all services the contractor is assigned to in separate sections
N/A - expected behavior
Event spans multiple days
PDF shows full date range; Auto-send triggers 1 day before first date; Download restriction calculated from first date
N/A - expected behavior
Contractor removed after Snapshot sent
No impact on previously sent Snapshot; New generation excludes removed contractor
Previously sent PDF remains unchanged
Service removed after Snapshot sent
No impact on previously sent Snapshot; New generation excludes removed service
Previously sent PDF remains unchanged
Contractor added after initial send
New contractor appears in modal on next access; Not automatically sent a Snapshot
Agency must manually send to new contractor
Large number of contractors (>20)
Modal displays scrollable list; All contractors remain selectable
Pagination may be added for very large lists
Very long project/event name
Text truncates with ellipsis in PDF header; Full name shown where space permits
Tooltip or wrapped text in detailed sections
Special characters in contractor names
Properly encoded in PDF; Filename uses sanitized version (special chars removed except hyphen/underscore)
Original name displayed in PDF, sanitized in filename
Contractor has no profile photo
Display initials avatar using first letter of first and last name
Consistent avatar style across all contacts
Multiple venues for event
Primary venue shown; Warning message displayed about additional locations
User directed to check timeline and notes
Timezone differences
Event times displayed in event's configured timezone
Timezone indicator included in location display
Agency updates event after sending Snapshot
Previously sent Snapshot retains old data; Resend required for updated information
Agency should resend to share updates
Contractor downloads while agency is editing
Snapshot reflects data at moment of download (latest saved state)
Real-time edits not included until saved
Browser blocks PDF download
Standard browser download blocked message displayed
User must allow downloads in browser settings
Email bounces
System logs bounce; No automatic retry; Sent status may show as sent despite bounce
Agency should verify email and resend
Auto-send scheduled but event cancelled
System should check event status before sending; Skip cancelled/archived events
No Snapshot sent for inactive events
Contractor unassigned same day as auto-send
System checks current assignments at send time; Only sends to currently assigned contractors
Unassigned contractors do not receive Snapshot
Event with no services configured
Services section displays header with message "No services configured for this event"
Agency should configure services before sending
All custom fields hidden from contractors
Custom fields section not displayed in Snapshot
N/A - expected privacy behavior
All notes are private
Notes section displays header with no entries
N/A - expected privacy behavior
Contractor is only person assigned to event
Contractors section displays header with no entries (self is excluded)
N/A - expected behavior
Same contractor assigned to multiple service types
All assigned services displayed in Services section with respective details
N/A - expected behavior
No timeline uploaded for service
Timeline button not displayed in service card
N/A - expected behavior
No shooting guide in Brand Settings for service type
Shooting Guide button not displayed in service card
N/A - expected behavior
Download button clicked rapidly multiple times
System prevents duplicate downloads; Shows loading state during generation
Only one download initiated
Session expires during modal interaction
User prompted to re-authenticate; Modal state may be lost
User must reopen modal after login
9. Acceptance Criteria
Functional Requirements
- Agency users must be able to access the "Send SNAPSHOT" button from the Event Details page within the Services tab area.
- The Send SNAPSHOT modal must display all contractors assigned to the current event with their profile photo, name, service type, role, and selection button.
- Contractors who have previously received the Snapshot must display a "Sent" status with the date and timestamp of the last send.
- Users must be able to select individual contractors or use the "Select All" functionality to select all contractors at once.
- The "Download PDFs" button must generate correctly named PDF files with personalized content for each selected contractor.
- The "Send to Contractors" button must successfully deliver emails with PDF attachments to all selected contractors with valid email addresses.
- The button label must change from "Send SNAPSHOT" to "Resend SNAPSHOT" after the first successful send to any contractor.
- A confirmation dialog must appear before resending Snapshots to prevent accidental resends.
- The Contractor Portal must display the "Download SNAPSHOT" button for contractors assigned to events.
- The download button on Contractor Portal must be disabled when the current date is more than 7 days before the event date.
- A tooltip must display the download restriction message when hovering over the disabled button.
- Contractors must be able to download their personalized Snapshot PDF when within the 7-day window before the event.
- The Snapshot PDF must contain all required sections: Header, Event Details, Services, Notes, Contacts, and Contractors.
- The PDF must display only the services that the specific contractor is assigned to, not all event services.
- The Contractors section must display all other contractors assigned to the event, excluding the recipient contractor.
- Only Public notes with the "Contractors" visibility checkbox selected must appear in the Snapshot.
- Only custom fields marked as "visible to contractors" must appear in the Snapshot.
- Clickable links for Timeline and Shooting Guide must work correctly within the PDF when documents are available.
- Empty states must be handled gracefully without breaking the PDF layout or displaying errors.
- The Settings page must include the auto-send toggle under Notifications > Company Settings with "Send automatically one day before events" label.
- The auto-send feature must trigger correctly one day before the event date when enabled.
- For multi-day events, auto-send must trigger one day before the first event date only.
- Success and error messages must display appropriately for all user actions as specified.
- File naming must follow the specified convention with spaces replaced by underscores and hyphens preserved.
- All PDF generation must fetch fresh data from the database to ensure accuracy.
Data Consistency Rules
- Resending a Snapshot must always fetch the latest project data including any contractor additions, removals, or data changes.
- The sent status timestamp must update each time a Snapshot is resent to a contractor.
- Auto-send must use the same data freshness logic as manual sends.
- Download restrictions must be calculated based on the first event date for multi-day events.
- Contractor assignments must be verified at the time of send/download to ensure accuracy.
10. Manual Test Cases
Test cases have been documented in a separate Excel file for direct upload to the test management system.
Test Cases Document: FRD_Snapshot_Test_Cases.xlsx
11. Dependencies
Dependency
Type
Impact if Unavailable
Event Management Module
Internal Module
Cannot retrieve event details, dates, or venue information for Snapshot generation
Project Management Module
Internal Module
Cannot retrieve project information, cover images, or project-level data
Contractor Management Module
Internal Module
Cannot retrieve contractor list, assignments, contact details, or profile information
Service Configuration Module
Internal Module
Cannot display service details, custom fields, roles, or pricing information
Contact Management Module
Internal Module
Cannot display client contacts or their relationship information
Notes Module
Internal Module
Cannot include notes in Snapshot; Notes section would be empty
Brand Management Module
Internal Module
Cannot display brand logo, brand name, or shooting guide documents
Custom Fields Configuration
Internal Module
Cannot determine field visibility settings or display custom field data
File Storage Service
External Service
Cannot retrieve cover images, timeline documents, or shooting guides
PDF Generation Service
External Service
Cannot create Snapshot PDF files; entire feature non-functional
Email Service
External Service
Cannot send Snapshots to contractors via email; download still functional
Settings Module
Internal Module
Cannot manage auto-send preferences or retrieve notification settings
Authentication Service
External Service
Cannot verify user permissions or contractor identity
Scheduler Service
External Service
Cannot trigger auto-send functionality; manual sends still functional
User Profile Service
Internal Module
Cannot retrieve profile photos or initials for avatar display
Timezone Service
External Service
Cannot display correct timezone information; may show UTC as fallback
12. References
- Design Files: Figma screenshots provided (5 screenshots covering Snapshot page, Event Details, Send SNAPSHOT modal, success state, and Contractor Portal view)
- Settings Screenshot: Auto-send toggle in Notifications > Company Settings
- Notes Visibility Screenshot: Create new note modal showing visibility options (Private/Public with Clients, Contractors, Team Members checkboxes)
- Meeting Transcript: Snapshot Functionality meeting dated February 13, 2026
- Related FRDs:
- Event Management FRD
- Contractor Portal FRD
- Project Management FRD
- Services Configuration FRD
- Notes Module FRD
- Settings Module FRD
- Brand Management FRD
- API Documentation: [To be added]
- User Stories/Tickets: [To be added]
Events - Contractors Tab
Contractors Tab
1. Module Overview
-
Module Name: Contractors Tab (Event Management)
-
Purpose: Enable agency admins to assign, view, manage, and track contractors for specific event roles across different service categories
-
Business Goal: Streamline contractor assignment workflow and provide comprehensive visibility into contractor status, compensation, and performance for event execution
2. User Roles & Permissions
Role
Description
Key Permissions
Agency Admin
Responsible for contractor assignments
Full access: view all contractor details, assign/remove contractors, access financial information, update event prices, manage contractor actions
3. User Flow
-
Navigate to the Contractors Tab in the event management interface
-
Filter by Service Category (Photography/Videography/Content Creation) tabs to view relevant roles according to the service
-
Check availability: The user may click the Check Availability button to open the availability module before the contractor assignment
-
Assign Contractors using the global "Assign Contractors" button, role-specific assignment buttons, or service-specific assignment buttons
-
Monitor Assignment Status - View contractor details, pricing, and other status indicators
-
Manage Contractor Actions via the kebab menu (view contractor profile, pay contractor, update event price, replace or remove contractor)
Critical Path: Contractors tab → Service Selection → Contractor Assignment → Status Monitoring
4. Field Details & Validations
4.1 Common (For Both Assigned and Unassigned states)
Field Name
Type
Required
Validation Rules
Check Availability
Button
N/A
On click, redirect the user to the check availability module
Assign Contractors (All services - Global)
Button
N/A
- "Assign Contractors" is the global button for assigning contractors for all services<br>- On click, opens the suggested contractor pop-up (for more details, refer to the suggested contractor's tab)
Service Type Tabs
Tabbed Filters
Yes
- Display tabs for services assigned to the event<br>- Tabs displayed in fixed priority order: Photography → Videography → Content Creation<br>- Tabs are visible only for services configured in the Services tab for the event<br>- Tabs dynamically filter the contractor role needed cards for that service
Assign Contractors (Service-specific)
Button
N/A
- "Assign Contractors" is the Service Specific assign contractor button<br>- On click, opens suggested contractor pop-up (for flow details, refer to the suggested contractor's tab)
4.2 Unassigned State (No Contractor Assigned)
Field Name
Type
Required
Validation Rules
Role
Text + Icon
Yes
- Fetched from the Services Tab (Roles needed for this event) configuration and displayed in the specific service tab<br>- By default, Lead shooter is displayed (until the user edits the service)<br>- Role Display Priority Order: Lead Shooter → Second Shooter → Assistant → Drone Operator
Contractor Avatar
Avatar
Yes
- Show placeholder icon (?) when no contractor is assigned
Contractor Name
Text
Yes
- Display text: Unassigned
Assign Contractor (Role Specific)
Button
Yes
- Display a button labeled "Assign [Role Name]" under each contractor role<br>- On click: Opens the "Suggested Contractor" pop-up to select and assign a contractor to the specified role (for flow details, refer to the suggested contractor's tab)
4.3 Assigned State (Contractor Assigned)
Field Name
Type
Required
Validation Rules
Role
Text + Icon
Yes
- Roles displayed are based on roles selected during service configuration in the Services Tab<br>- Only roles that are selected for that specific service type (Photography, Videography, Content Creation) will be displayed<br>- By default, Lead shooter is displayed (until the user edits the service)<br>- Role Display Priority Order: Lead Shooter → Second Shooter → Assistant → Drone Operator
Pending Status
Text + Icon
Conditional
Display only when the contractor is assigned to the role, but the invitation is not yet accepted by the contractor
Rating
Text + Star Icon
Yes
- Display the calculated average rating of contractors (fetched from the contractor's profile)<br>- Display "No ratings" for new contractors
Kebab Menu
Button
N/A
Options: Open profile, Update event price, Remove
Contractor Avatar
Avatar
Yes
- Displays the contractor's avatar once assigned; if no avatar is uploaded by the contractor, shows initials from the full name of the contractor (e.g., John Doe → JD)<br>- Default state shows placeholder icon (Question Mark) for unassigned state
Contractor Name
Text
Yes
- Displays the assigned contractor's full name<br>- The default state shows "Unassigned" if no contractor is assigned
Contractor Specialization
Text
Yes
- Display contractor's service specialization (Photographer / Videographer / Content Creator)
Contract Icon
Icon
Yes
Displays Active (filled icon) if the contract is signed by the contractor; otherwise, it shows the unfilled icon
Invoice Icon
Icon
Yes
Displays Active (filled icon) if the invoice is generated by the contractor; otherwise, it shows the unfilled icon
Documents/Deliverables Icon
Icon
Yes
Displays Active (filled icon) if any deliverables are uploaded by the contractor; otherwise, it shows the unfilled icon
Payment Icon
Icon
Yes
- Displays Active (filled icon) if full payment is received by the contractor<br>- Displays half-active (partially filled icon) if partial payment is received by the contractor<br>- Shows an unfilled icon if no payment has been made to the contractor by the agency
Event Price
Currency
Yes
- Display the price assigned to the contractor for the service role in the event (calculated during assignment)
Amount Paid
Currency
Yes
- Display the paid amount to the contractor or "$0.00" if unpaid
Location Distance
Text
Yes
- Show the calculated distance time (Google Maps API) between the contractor's address and the event venue location (e.g., "12m. to location")<br>- Display the contractor's service area. Format: "Boston, USA"
4.4 Update Event Price
(Refer to Update Event Price section)
5. Functional Logic
5.1 Service Tab Filtering:
-
Only display service tabs (Photography, Videography, or Content Creation) that have been assigned to the current event
-
When a service tab is selected, dynamically update the role cards based on the roles needed for the service (Lead Shooter, Second Shooter, Assistant, Drone Operator)
5.2 Assign Contractors Button:
-
Opens "Suggested Contractors" modal showing the list of contractors available.
-
Search contractors field available for manual search
-
Filter tags displayed: Date, Service, Role, Service Area
-
Contractor list columns: Actions (Select), Name, Rate, Fee, Service Area, Rating
-
Contractors already assigned to the event do not appear in the list
-
Right panel filters:
- Services (Photography, Videography)
- Role selection
- Toggle: Show Invited Contractors (Pending)
- Toggle: Show only Backup Shooters
- Toggle: Bypass Contractor Travel Limits
- Service Area dropdown
-
Cancel and Assign Contractors buttons at bottom
5.3 Assignment State Management:
-
Cards transition from unassigned placeholder to populated contractor details upon assignment
-
When multiple contractors are assigned to a role, cards stack vertically with "Add Another" option
5.4 Payment Status Calculation:
- Icons reflect completion status — filled (complete), half-filled (partial), empty (not started)
5.5 Distance Calculation:
- Automatically calculate and display the travel time from the contractor's home address to the event venue location
5.6 Rating Display Logic:
- Show the average rating of the contractor (fetched from the contractor profile) or display "No ratings" for new contractors
5.7 Invitation Status Tracking:
- Display a pending indicator when the contractor is assigned but hasn't accepted the invitation
5.8 View Contractor Travel Fees Button (Lead/Inquiry Stage):
-
The view contractor travel fee button is only visible when the event is on the lead stage.
-
Button remains disabled until a venue is added to the event
-
Hover tooltip on disabled state: "Please add the venue details in the event to see the contractor travel fees"
-
Opens alternate version of assign contractor popup that:
- Locks the date setting to event dates
- Defaults to service area filtering
- Shows available contractors for all roles and services
- Displays travel fees calculated for the event venue
- No action buttons on contractor cards (view-only)
5.9 Check Availability Button (Booked Stage):
-
Replaces "View Contractor Travel Fees" once event moves to booked stage
-
Redirects to the Check Availability module with filters pre-populated:
- Date, Brand, Events, Service Type, Service Area, Venue, Role
-
Available Contractors list shows:
- Contractor name with rating
- Distance to event location
- Select button to view details
-
Selected contractor panel displays:
- Profile info (name, role, pay rate, travel fee, service area, rating)
- View Profile link
- Calendar view with contractor's scheduled events and tasks
- Events table (Date, Project, Brand, Service Area)
- Tasks table (Due Date, Task, Status)
5.10 Remove Contractor:
-
Selecting "Remove" from the kebab menu opens a confirmation dialog before removing the contractor from the event.
-
The dialog message varies based on the contractor's payment status:
Payment Status
Dialog Title
Dialog Message
Buttons
Unpaid (Single or Multiple)
Remove Contractor?
Are you sure you want to remove this contractor from this event?
Cancel | Remove
Processing (Single)
Remove Contractor?
Payment of $[Amount] processing. Are you sure you want to remove this contractor from this event?
Cancel | Remove
Processing (Multiple - all processing)
Remove Contractor?
Payment of $[Total Amount] processing across [N] payments. Are you sure you want to remove this contractor from this event?
Cancel | Remove
Paid (Single)
Remove Contractor?
This contractor has already been paid $[Amount]. Are you sure you want to remove them from this event?
Cancel | Remove
Paid (Multiple - all paid)
Remove Contractor?
This contractor has already been paid $[Total Amount] across [N] payments. Are you sure you want to remove them from this event?
Cancel | Remove
Mixed (Paid + Processing)
Remove Contractor?
This contractor has already been paid $[Paid Total]. Are you sure you want to remove them from this event?
Cancel | Remove
Payment Status Priority Logic:
-
If ANY payment is Paid → Show only the combined paid amount (ignore processing & unpaid amounts)
-
If NO Paid payments but some are Processing → Show combined processing amount (ignore unpaid)
-
If ALL payments are Unpaid → Show standard unpaid message
-
Payment count ("across [N] payments") is shown only for Multiple Paid or Multiple Processing scenarios (not for Mixed)
-
Currency symbol is displayed based on the agency's currency settings (default: USD).
-
Clicking "Cancel" closes the dialog without any changes.
-
Clicking "Remove" removes the contractor from the event and returns the role card to the unassigned state.
-
Payments are handled via Stripe; removing a contractor does not automatically cancel or refund any payments. Any payment discrepancies must be handled internally between the parties.
6. Edge Cases
Scenario
Expected Behavior
Google Maps API is unavailable
Display "--" for the distance field without blocking other functionality
The contractor becomes unavailable after the assignment
- Contractor will be replaced/removed<br>- If removed, the role card returns to the unassigned state with the Assign button visible
The new contractor with no rating history
Display "No ratings" with a star icon
7. Test Cases
Link: Pixally Test cases - 01.04.25
8. Acceptance Criteria
-
Check Availability button: Redirects successfully to the availability module
-
Unassigned Role Display: Roles without assigned contractors show placeholder cards with "Role name", "?" avatar, and "Unassigned" label
-
Service Category: Only services tabs that are assigned to the event are visible
-
Assignment Functionality: Clicking any assignment button opens the appropriate suggested contractor pop-up
-
Contractor Card Population: Assigned contractor cards display all required information: role, name, avatar, location, rating, event price, amount paid
-
Status Indicators: Contract, invoice, deliverables, and payment status icons accurately reflect the current state
-
Pending Status Visibility: The Pending icon displays only when the contractor is assigned, but the invitation is not accepted
-
Action Menu Access: The Kebab menu provides access to all contractor management actions
-
Rating Interaction: Clicking the rating opens a detailed rating pop-up
-
Remove Contractor Dialog: Displays appropriate confirmation message based on payment status (Unpaid, Processing, Paid, or Mixed). For Mixed status (Paid + Processing), shows only the paid amount. Payment count is shown only for Multiple Paid or Multiple Processing scenarios.
9. Dependencies
Module/System
Dependency Type
Impact if Unavailable
Project/Events Management
Data dependency
Cannot fetch events and service details
Contractor Database
Data dependency
Cannot load contractor profiles and details
Google Maps API
External service
Cannot calculate how far the contractor's location is from the event venue
Payment Processing System
Data dependency
Payment status icons show the last known state
Event Configuration
Data dependency
Cannot determine which service tabs to display
Assignment Modal/Pop-up
UI dependency
Cannot complete contractor assignments
10. References
- Figma Design: Click Here
✅ Agency Owner Self-Event Assignment
Agency Owner Self-Event Assignment
Functional Requirement Document
BA & Ideation: Dakshraj Jhala
Reviewed By: KG (Project Manager)
Updated Date: 18 July 2025
Status: Approved
Version 1.0
Functional Requirements Document (FRD) - Agency Owner Self Event Assignment
1. Module Overview
Field
Details
Module Name
Owner Self-Assignment to Project Events
Purpose
Enable studio owners/agency owners to assign themselves to project events as contractors without requiring pay rate configuration or service agreements.
Business Goal
Streamline the process for studio owners/agency owners to participate directly in project events while maintaining proper contractor tracking and conflict management.
2. User Roles & Permissions
Role
Description
Key Permissions
Studio Owner / Agency Owner
Business owner / primary owner of the agency
Full access: assign/unassign self, view/manage all contractors, access all events
Other Roles (Admin, Managers, Contractors, etc.)
Regular users with various access levels
No access: cannot see "Assign Yourself" button or self-assignment functionality
3. User Flow
Critical Path: Successful Self-Assignment
- Navigation: Studio owner/agency owner navigates to Project → Event Management → Contractors tab
- Button Access: "Assign Yourself" button is visible and clickable (only for studio owner/agency owner role)
- Pop-up Display: Click opens assignment pop-up with Services and Role fields
- Service Selection: Select the required service from dynamically populated options
- Role Selection: Select the required role from the predefined options
- Conflict Check: The system validates that no date conflicts exist
- Assignment: Click the "Assign" button to complete the assignment
- Confirmation: The system displays a success message and updates the contractor card
- Activity Log: Assignment is logged in the project activity tab
Alternative Flows
- Conflict Detection: If a date conflict exists, show a warning pop-up with the project link
- Self-Removal: Owner removes themselves via the three-dot menu with confirmation
4. Functional Logic
4.1 Default State
- The Contractors tab always displays the configured role slots (e.g., Lead Shooter, Second Shooter) with an "Unassigned" status and individual "Assign [Role]" buttons beneath each slot.
- The service name (e.g., Photography) is shown as a section header above the role cards.
- At the top of the Contractors section, two action buttons are displayed side by side: "Assign Yourself" (visible only to the studio owner/agency owner) and "Assign Contractors".
- A "View Contractor Travel Fees" button is also available in the header area.
- At the bottom, a prominent "Assign Contractors" CTA button is displayed for bulk assignment.
4.2 Date Conflict Detection (Before Assigning)
- System checks all events across all projects where the owner is assigned.
- Validates against the same calendar date (not time-specific).
- Prevents assignment if a conflict exists and shows a redirect link to the conflicting project.
4.3 Service Assignment Logic
- Services are dynamically populated based on event configuration.
- Owner can only assign to one service per event.
- Assignment appears under the correct service tab (Photography, Videography, Content Creation).
4.4 Distance Calculation
- Uses Google Maps API to calculate the distance between the brand location and the event venue.
- Distance is displayed on the contractor card for studio owners/solo operators.
- Calculation is automatic upon assignment.
4.5 Price Display Logic
- Event price shows as "–" for self-assigned owners.
- No pay rate configuration required.
- No invoice submission is needed.
4.6 Raw Media Tab Access
- Post the event, the self-assigned owner gains access to upload delivery links in the raw media tab of the specific event.
- Owners can upload delivery links for the service they were assigned to.
4.7 Project Management Event Listing Impact
- If the agency owner/studio owner assigns themselves to an event, their name will be displayed with 'You' shown beside it, and the action icons will be disabled only for that entry.
4.8 Activity Logging
- All self-assignment actions are logged in the project activity tab.
- Includes: timestamp, user, action type (assign/unassign), service, and role.
5. Field Details & Validations
Field Name
Type
Required
Validation Rules
Services
Radio Button
Yes
Must select one option from a dynamically populated list based on event configuration
Role
Radio Button
Yes
Must select one option from: Lead Shooter, Second Shooter, Drone Operator, Assistant
Confirm
Button
Yes
On click, if validation passes, assign the owner to the selected role & service in the specific event. If validation fails, display a relevant error message.
Cancel
Button
N/A
On click, close the pop-up
Event Date
System Field
N/A
Used for conflict validation across all projects
Event Status
System Field
N/A
Must not be "Completed" or "Archived" for assignment
6. Success Message Handling
Validation Scenario
Success Message
Self-assignment completed
"You have been successfully assigned to this event."
Self-removal completed
"You have been successfully removed from this event."
7. Error Message Handling
Field
Validation Scenario
Error Message
Services
Not selected
"Please select a service."
Role
Not selected
"Please select a role."
Date Conflict
Already assigned to another event on the same date
"You cannot assign yourself for this event because you already have a [Project Name] on this date."
Event Status
The event is completed/archived
"Cannot assign to completed or archived events."
General
Network timeout
"Something went wrong."
8. Edge Cases
Scenario
Expected Behavior
Owner assigns to a past event
Allow assignment if the event status is not completed/archived
Owner assigns to an event at maximum contractor capacity
Allow assignment (no restrictions)
Event is canceled after self-assignment
Automatically remove owner assignment and free up the date
Multiple services exist for the same event
Owner can only assign to one service due to a shared date conflict
Owner tries to assign to a completed event
Block assignment and show an appropriate error message
Google Maps API is unavailable
Show distance as "Unable to calculate" but allow assignment
Owner removes themselves during an active event
Allow removal with a confirmation dialog
9. Acceptance Criteria
Core Requirements:
- Studio owners and agency owners can self-assign to project events.
- The "Assign Yourself" button is visible only to studio owner/agency owner roles (not to admins or other roles).
- Pop-up displays dynamically populated services and predefined roles.
- The system prevents date conflicts across all projects.
- Contractor card displays the owner with a "You" label and distance calculation.
- Self-removal requires a confirmation dialog.
- No pay rate or service agreement required.
- All actions are logged in the activity tab.
UI/UX Requirements:
- The assignment appears under the correct service tab.
- Price displays as "–" for self-assigned owners.
- Distance calculation uses the Google Maps API.
- Conflict pop-up includes a clickable project name link.
- The three-dot menu provides a removal option.
Business Logic Requirements:
- One role per event limitation.
- One service per event limitation (due to date sharing).
- Automatic removal when the event is cancelled.
- No assignment restrictions for capacity or past events (unless completed/archived).
10. Dependencies
Module/System
Dependency Type
Impact if Unavailable
Google Maps API
External Service
Distance calculation shows "Unable to calculate."
Email Module
Internal Module
No email notifications sent for assignments
Activity Logging
Internal Module
Assignment actions not logged
Project Management
Core Module
Cannot access event contractor functionality
User Role Management
Core Module
Cannot validate user permissions
Event Management
Core Module
Cannot access event data for assignments
11. References
- Figma Link: Click Here
- Test Cases Link: TBD
0 dollar assignment
Functional Requirements Document (FRD)
Zero-Dollar ($0) Contractor Assignment — Cross-Module Logic Update
1. Module Overview
• Module Name: Zero-Dollar ($0) Contractor Assignment Logic
• Purpose: Enable agencies to assign contractors to events at a $0 event price, supporting use cases such as voluntary work, pro bono engagements, training sessions, complimentary shoots, or internal assignments where no financial compensation is applicable.
• Business Goal: Allow $0 as a valid event price across the CRM — from assignment through invoicing, payment processing, financial reporting, and the contractor portal — while maintaining data integrity and preventing broken flows (e.g., Stripe $0 calls, division-by-zero in reports).
• Scope of Impact: This is a cross-module logic change affecting multiple areas of the CRM. Each impacted module is documented in Section 4 (Functional Logic).
2. User Roles & Permissions
Role
Assign $0 Event Price
Upload Invoice for $0 Event
Review / Authenticate Invoice
View $0 in Finance
View $0 in Reports
View $0 in Portal
Admin / Agency Owner
✅ Yes
N/A
✅ Yes
✅ Yes
✅ Yes
N/A
Agency Staff
✅ Yes (if has assign permission)
N/A
✅ Yes (if has payment permission)
✅ Yes (based on role)
✅ Yes (based on role)
N/A
Contractor
N/A
✅ Yes
N/A
N/A
N/A
✅ Yes
Client
N/A
N/A
N/A
N/A
N/A
N/A
Additional Notes:
- No new permissions are introduced. Existing role-based access controls apply.
- Contractors at $0 events have the same portal visibility as any other assigned contractor.
- Contractors are allowed to upload invoices for $0 events. The agency reviews, authenticates, and processes the invoice on their end.
3. User Flow
Flow 1: Assigning a Contractor at $0
- Agency user navigates to Project Details → Events Tab → Contractors Tab
- User clicks "Assign Contractor" and selects a contractor
- The Assign Event Price pop-up opens
- If the contractor does not have a pay rate set up, system displays a confirmation popup (see Section 4.1 for popup logic)
- User enters $0.00 in the Amount field (or it defaults to $0 based on the unassigned rate)
- System validates: Amount >= $0 → passes validation
- User clicks Save/Assign
- System creates the contractor assignment record with amount = $0
- The contractor card displays $0.00 (not blank, not "--")
- All downstream modules (invoices, finance, calendar, portal) reflect the $0 price
Flow 2: Contractor Uploads Invoice for $0 Event
- Contractor is assigned at $0 event price
- Contractor navigates to Contractor Portal → Payments
- Contractor sees the event listed with "Event Price: $0.00"
- Contractor can upload an invoice for any amount — $0, $50 for parking, $100 for additional services, etc. — no permission from the agency is required
- Agency reviews the invoice in Finance → Contractor Invoices
- Agency can Pay or void the invoice.
- The invoice is not archived until the agency completes the review process
Flow 3: Agency Reviews Contractor's Invoice with Amount > Event Price
- Contractor uploads an invoice for $50 on a $0 event (e.g., for parking fees or additional services)
- Agency receives the invoice in Finance → Contractor Invoices
- Agency reviews the invoice and verifies the charges
- If the agency approves, the agency updates the event price via Update Event Price to match the invoiced amount
- Standard payment flow proceeds for the approved amount
- All downstream modules reflect the updated price
Flow 4: Agency Reduces Event Price (>$0 → $0)
- Agency navigates to Update Event Price and attempts to reduce the price
- System enforces the price floor rule — price cannot go below the amount already paid
- If no payment has been made, the agency can reduce the price to $0
- System sends a notification to the contractor about the price change to $0
- If the contractor has already uploaded an invoice, system shows a warning to the agency before proceeding (see Section 4.4 for warning logic)
4. Functional Logic
4.1 Assign Event Price Pop-up — $0 Validation & Contractor Rate Popup
Navigation: Project Details → Events Tab → Contractors Tab → Assign Contractor
Empty State:
- When the system first loads the Assign Event Price pop-up, the Amount field is empty and awaiting input.
Validation Logic:
- Amount field accepts any value >= $0.00
- Negative values and non-numeric characters are rejected
- $0 is treated as a valid, intentional assignment — not a null or missing value
Contractor Rate Not Assigned — Confirmation Popup:
-
When the agency assigns a contractor who does not have a pay rate configured in the system, the following confirmation popup is displayed:
_"This contractor does not have a pay rate assigned. Proceeding will set the event price to $0. To assign a pay rate, go to Contractors → [Contractor Name] → Pay Rates."
_
-
If agency clicks "Proceed" → assignment continues with event price = $0
-
If agency clicks "Cancel" → assignment is cancelled; agency can navigate to set the rate first
-
This popup appears only when the contractor has no rate assigned — not when the agency intentionally enters $0 for a contractor who already has a rate
Display Logic:
- On save, the contractor card always displays $0.00 — never blank, never "--"
- The system always creates a contractor assignment record with amount = 0; the record is never skipped
Impact:
- Price history tab logs the $0 assignment the same as any other price entry
- All downstream modules (invoices, finance, calendar, portal) reflect the $0 price immediately
4.2 Contractors Management — Pay Rates (Setup & Edit)
Navigation: Contractors Management → Set Up User → Step 3/3 | Contractor Profile → Rates Tab → Edit Pay Rates
Logic:
- Pay rate fields already allow $0 as input — no validation change needed
- Display must render $0.00 (for Fixed rates) or $0.00/h (for Hourly rates)
- Display must never be blank or show "--" when the rate is zero
- Existing note "Pay rates will be reflected only for future projects" still applies — no change needed
Impact:
- When a contractor with $0.00/h rate is assigned to an event with 8 coverage hours, the calculated event price = $0.00/h × 8 = $0.00
- Travel fee still applies on top of the $0 event price separately
4.3 Contractor Invoice Lifecycle for $0 Events
Navigation: Finance → Contractor Invoices | Contractor Portal → Payments
Invoice Upload Logic:
- Contractors can upload invoices for $0 events for any amount — $0, $50, $100, etc.
- No permission from the agency is required to upload. The contractor has full autonomy to submit an invoice at any time, for any amount, regardless of the assigned event price
- Common scenarios: contractor incurs parking fees, provides additional services, or wants to charge for extras not originally agreed upon
- The uploaded invoice goes to the agency for review and authentication
- The agency has full control to approve or void it.
- The invoice is not archived until the agency completes the review process
Agency Review & Price Adjustment:
- If the contractor uploads an invoice with amount > $0 for a $0 event, the agency reviews the charges
- If the agency agrees with the charges, they update the event price via "Update Event Price" to match the approved amount, then process payment
- If the agency disagrees, they void the invoice — the contractor is notified of the invoice.
Price Floor Rule:
- The event price cannot be reduced below the total amount already paid to the contractor
- Example: If $25 of $50 has been paid, the minimum allowed price is $25
- If the agency attempts to reduce below the paid amount, system blocks with error (see Section 6, E6)
- Refunds are handled outside the portal manually by the agency and contractor
- If no payment has been made, reducing the price to $0 is allowed
Invoice Warning on Price Change:
-
When the agency changes the line item price and the contractor has already uploaded an invoice, the system shows a warning (not blocking):
_"The contractor has already uploaded an invoice for this event. Changing the price may create a discrepancy. Do you want to proceed?"
_
-
Agency confirms → price is updated, contractor is notified
-
Agency cancels → no change
Impact:
- Price changes are logged in the price history tab
- Contractor receives notification on any price transition ($0 → >$0 or >$0 → $0)
- All downstream modules update to reflect the new price
4.4 Payment Processing Logic for $0
Navigation: Finance → Contractor Invoices → Pay / Mark as Paid
Stripe $0 Guard:
- Stripe is NOT called for $0 payment amounts under any circumstance
- If amount = $0 reaches a Stripe call for any reason, the system bypasses Stripe entirely — this is a fallback safety check
- Stripe will reject a $0 PaymentIntent, so this guard is critical
$0 Invoice Approval:
- When the agency approves a $0 invoice, the system marks it as complete with the label "No Payment Required"
- This is a system-assigned label — it is not a selectable option in the payment method dropdown
- It appears only when the invoice/event amount = $0
- No payment record with a monetary amount is created
Standard Payment (>$0):
- When the event price transitions above $0, standard Stripe/manual payment flow applies — no change from existing behavior
Impact:
- No Stripe fee is generated for $0 events
- No payment transaction ID is created
- "No Payment Required" label renders in all payment-related views: invoice history, contractor invoices list, payment records
4.5 Expenses Module
Navigation: Finance → Expenses (COGS)
Logic:
- When a contractor is assigned at $0 and no payment is made, the system does not auto-create a $0 expense entry — a $0 entry adds noise with no financial value
- If the agency manually creates a $0 expense, it is allowed — the field already accepts $0
- QuickBooks Sync: Do NOT sync $0 contractor payments to QuickBooks — a $0 expense entry in QB creates reconciliation confusion
- Condition: If payment amount = $0 → skip QB sync entirely
Impact:
- $0 events do not appear in the Expenses module unless manually added by the agency
- QB remains clean with no $0 line items
4.6 Profit & Loss
Navigation: Finance → Profit & Loss
Logic:
- $0 contractor cost = $0 COGS → no impact on Gross Profit calculation
- $0 contractor costs do not surface as anomalies in the P&L breakdown
- If a project has one contractor at $0 and another at $500, COGS = $0 + $500 = $500 — no distortion
Impact:
- No logic change needed — only display verification to confirm $0 renders cleanly
4.7 Contractor Portal — Payments
Navigation: Contractor Portal → Payments
Display Logic:
- When event price = $0, show the assignment in Payments with event price as $0.00
- Contractor can upload an invoice for any amount directly — no restriction, no permission needed
- If the contractor incurs additional costs (parking, extra services, etc.), they simply upload an invoice with the total charges
- No payout is initiated for $0 events unless an invoice is uploaded and approved by the agency
$0 → >$0 Transition:
- When the agency updates the event price from $0 to >$0 (after reviewing the contractor's invoice), the contractor receives a notification and standard payment flow resumes
Multi-Agency Workspace:
- Each agency workspace shows its own event price independently — no cross-contamination
- Agency A shows $0.00, Agency B shows $500.00 for the same contractor
Impact:
- Contractor is always clearly informed about the $0 status — no confusion about missing payment
4.8 Reports — Contractors Report
Navigation: Reports → Contractors
Logic:
- $0 payment records are included in reports with $0.00 in the Amount Paid column — do not exclude
- COGS column in P&L Report shows $0 — no anomaly
- Tax Report (1099-NEC): Contractor row still appears with Total Paid = $0.00 — whether $0 income needs a 1099 is a tax question; the system reports accurately
Division-by-Zero Guard:
- If any percentage or average calculation involves total pay = $0 in the denominator, display "N/A" instead of throwing an error
- The formula "$0 / N = $0" is valid and does not need guarding — only "N / $0" needs the guard
Impact:
- Reports remain accurate and inclusive of all $0 records
4.9 Calendar & Check Availability — Payment Icon Logic
Navigation: Calendar → List View | Contractor Profile → Calendar
Payment Icon States for $0 Events:
Scenario
Icon
Tooltip
$0 event, no invoice uploaded
Special state (greyed-out / N/A variant)
"No payment required"
$0 event, contractor uploaded invoice, agency approved
Special state (greyed-out / N/A variant)
"No payment required — $0.00"
$0 event price updated to >$0, invoice paid
Filled (fully paid)
"Paid: [Amount]"
$0 event + $30 travel fee = $30, paid $15
Half-filled (partial)
Standard partial payment tooltip
True $0 (event price $0 + travel fee $0)
Special state (greyed-out / N/A variant)
"No payment required"
Impact:
- A distinct "No Payment Required" icon state distinguishes $0 events from genuinely unpaid events
4.10 Notifications
Notification 1: Assignment at $0
-
When a contractor is assigned to a $0 event, the existing assignment notification includes an additional line:
**"Event Price: $0.00 — No payment for this event."
**
-
Channel: Email and in-app notification (if applicable)
Notification 2: Event Price Updated ($0 → >$0)
-
When the agency updates the event price from $0 to an amount greater than $0 (e.g., after reviewing contractor's invoice for additional charges):
**"Your event price for [Event Name] has been updated to [New Amount]."
**
-
Trigger: Event price changes from $0 to any amount > $0
-
Recipient: Assigned contractor
Notification 3: Event Price Reduced to $0 (>$0 → $0)
-
When the agency reduces the event price from any amount back to $0:
**"Your event price for [Event Name] has been updated to $0.00. No payment is required for this event."
**
-
Trigger: Event price changes from any amount > $0 to $0
-
Recipient: Assigned contractor
Impact:
- Contractor is always kept informed of price changes, preventing confusion and support requests
4.11 Service Agreement
Navigation: Service Agreement templates with smart fields
Logic:
- If rate is $0, smart fields populate with $0.00 — never leave blank in the agreement
- If the agency edits the event price from $0 to another amount after the agreement is sent, the system does not auto-update the sent document — the agency must resend the agreement with the updated amount
Impact:
- Service agreements always display the correct amount at the time of sending
4.12 Event Cancellation
Navigation: Project Details → Events Tab → Cancel Event
Logic:
- When a $0 event is cancelled, the agency handles contractor communication manually
- No special cancellation handling is provided for $0 events
- If the event was $0 → updated to >$0 → contractor uploaded invoice → event is cancelled, the agency must handle the invoice manually — the system does not auto-void invoices on cancellation
- Standard cancellation notification is sent — no special $0 messaging needed
Impact:
- Same as any other event cancellation — no additional development required
4.13 Contractor Deactivation / Removal
Navigation: Contractors Management → Contractor Profile → Deactivate / Remove
Logic:
- When a contractor assigned to a $0 event is deactivated or removed, the system treats it the same as any other contractor deactivation
- $0 assignment records remain for historical purposes
- No financial cleanup is needed since no monetary transaction occurred (unless the event price was updated to >$0 and payment was made)
Impact:
- No additional development required — standard deactivation flow applies
4.14 Dashboard / Home Page Widgets
Navigation: Agency Dashboard / Home Page
Logic:
- Pending Payments: $0 events do not appear — no payment is pending
- Outstanding Invoices: If the contractor uploaded an invoice for a $0 event and it's pending agency review, it does appear here (since an invoice exists)
- Upcoming Payouts: $0 events do not appear — no payout is scheduled
- Overdue Invoices: $0 events do not appear unless the contractor uploaded an invoice that went overdue without agency action
- Total Revenue / COGS Summary: $0 assignments contribute $0 to COGS — included in calculation but do not inflate or distort totals
Impact:
- Dashboard remains clean without $0 noise in financial widgets
- If a $0 event transitions to >$0, it enters relevant widgets at the updated amount
4.15 Email Templates
Navigation: System Email Templates
Logic:
- All system email templates that reference financial amounts must handle $0.00 gracefully
- Assignment Confirmation Email: Display $0.00 as the event price with "No payment for this event." — must not show blank or broken formatting
- Event Reminder Email: If the template includes event price, display $0.00
- Invoice Submission Reminder: If contractor has not uploaded an invoice for a $0 event, the reminder should include context: "Event Price: $0.00"
- Payment Confirmation Email: Not applicable for $0 events — if event transitions to >$0 and gets paid, standard confirmation is sent
- Price Update Notification Email: Triggered on $0 → >$0 and >$0 → $0 transitions (see Section 4.10)
Impact:
- All email templates must be tested with $0.00 values to ensure no blank fields, broken formatting, or $NaN/undefined errors
4.16 Filters & Search for $0 Assignments
Navigation: Reports | Contractor Management | Calendar
Logic:
- Reports — Contractors Report: Add the ability to filter by amount range including $0 — allows agencies to track pro bono work, training sessions, etc.
- Contractor Profile → Events/Assignments: $0 assignments are visible in the contractor's assignment history with "No Payment Required" status
- Calendar Filters: $0 events should be filterable under a "No Payment Required" status option to distinguish from unpaid events
- Finance → Contractor Invoices: If contractor has uploaded an invoice for a $0 event, it appears in the list and is filterable like any other invoice
Impact:
- Agencies gain visibility into complimentary work for operational and reporting purposes
4.17 Update Event Price Modal — UI State at $0
Navigation: Project Details → Events Tab → Contractors Tab → Update Event Price
Logic:
- When the event price is $0 and the agency opens the modal:
- Base Price Display shows $0.00 as the current base event price
- Line Items Section is empty — no line items exist
- "Add Line Item" option is available and functional
- Adding a positive-value line item recalculates: $0 + $50 = $50
- Adding a negative line item on $0 base is blocked — error: "Final price cannot be negative"
- Price Floor Enforcement: Agency cannot set the price lower than the amount already paid
- Invoice Warning: If the contractor has already uploaded an invoice and the agency changes the price, system shows the warning dialog (see Section 4.3)
- On save: if new total > $0 → triggers $0 → >$0 transition logic (contractor notification sent); if total remains $0 → no change
- All additions and removals are logged in the price history tab
Impact:
- The modal behaves consistently whether the price is $0 or any other amount
5. Field Details & Validations
Assign Event Price Pop-up — Amount Field
Field Name
Type
Required
Validation Rules
Amount / Event Price
Numeric (currency)
Yes
Min: $0.00, Max: system limit, 2 decimal places, format: $X.XX, no negative values, no blank, no non-numeric characters
Pay Rates — Rate Field
Field Name
Type
Required
Validation Rules
Pay Rate (Fixed)
Numeric (currency)
Yes
Min: $0.00, display: $0.00 when zero — never blank
Pay Rate (Hourly)
Numeric (currency)
Yes
Min: $0.00, display: $0.00/h when zero — never blank
Invoice Upload for $0 Events
Field Name
Type
Required
Validation Rules
Invoice Upload
File upload
No
Allowed for $0 events — goes to agency for review
Agency Review Status
System-assigned
Auto
Not archived until agency completes review
Price Modification — Price Floor Rule
Field Name
Type
Required
Validation Rules
Event Price (on update)
Numeric (currency)
Yes
Cannot be lower than total amount already paid. Refunds handled outside the portal. Reduction to $0 allowed only if no payment has been made.
6. Error Message Handling
#
Field / Trigger
Validation Scenario
Error Message
Display Location
E1
Amount Field
Negative value entered
"Please enter a valid amount."
Assign Event Price pop-up — inline below field
E2
Amount Field
Non-numeric characters entered
"Please enter a valid amount."
Assign Event Price pop-up — inline below field
E3
Amount Field
Field left empty on save
"Amount is required."
Assign Event Price pop-up — inline below field
E4
Update Event Price
Final price goes negative after adding negative item
"Final price cannot be negative."
Update Event Price modal — inline error
E5
Assign Contractor
Contractor has no pay rate configured
"This contractor does not have a pay rate assigned. Proceeding will set the event price to $0. To assign a pay rate, go to Contractors → [Contractor Name] → Pay Rates."
Confirmation popup during assignment
E6
Update Event Price
Agency tries to reduce price below amount already paid
"Event price cannot be lower than the amount already paid ($[Amount]). Refunds must be handled outside the portal."
Update Event Price modal — inline error
E7
Update Event Price
Agency changes price when contractor has uploaded invoice
"The contractor has already uploaded an invoice for this event. Changing the price may create a discrepancy. Do you want to proceed?"
Confirmation dialog (warning, not blocking)
E8
Pay (ACH)
Stripe called with $0 amount (guard failure — fallback)
"Payment processing is not required for $0 invoices."
System-level log / toast notification
E9
Reports
Division-by-zero in calculations
"N/A" in affected metric field
Reports — calculated column
7. Edge Cases
Group 1 — Assignment & Pricing
#
Scenario
Expected Behavior
1
Agency assigns contractor at $0 but contractor's setup pay rate is also $0
No conflict. Both align. Show $0.00 in contractor card, not blank.
2
Agency assigns contractor who has no pay rate configured
Confirmation popup appears. Agency can proceed at $0 or cancel to set rate first.
3
Agency assigns at $0, adds +$50 line item via Update Event Price
Final Price = $50. Logged in price history. Contractor notified.
4
Agency assigns at $0, adds -$50 negative item
Blocked. Error: "Final price cannot be negative."
5
Agency assigns at $0, adds +$50, then removes it
Price reverts to $0. Both addition and removal logged. Contractor notified.
6
Contractor rate $0.00/h, coverage 8 hours
Event Price = $0.00. Travel fee applies on top separately.
7
$0 event price + $30 travel fee
Final Price = $30. NOT a "$0 event" for payment purposes. Normal flow triggers.
8
$0 event price + $0 travel fee
True $0 assignment. All $0 logic applies.
9
Agency edits $0 to $100 after service agreement sent
Agreement had $0.00. Agency must resend with updated amount. System does not auto-update.
10
Agency edits $100 to $0 after $50 already paid
Blocked. Price floor = $50. Refunds handled outside portal.
Group 2 — Invoice Upload & Review
#
Scenario
Expected Behavior
11
Contractor uploads $0 invoice for $0 event
Allowed. Goes to agency for review. Agency can approve or void.
12
Contractor uploads $50 invoice for $0 event (e.g., parking, extra service)
Allowed. No permission needed. Invoice goes to agency for review. Agency verifies charges, adjusts event price if approved, or void.
13
Contractor uploads multiple invoices for $0 event
Follows existing multiple invoice rules. Each goes to agency .
14
$0 event, no invoice uploaded, agency tries to click "Pay"
No invoice exists. Cannot pay without uploaded invoice. Same as any event.
15
Agency changes price while contractor has pending invoice
Warning dialog shown. Agency confirms or cancels.
16
Agency approves $0 invoice, marks as complete
Stripe not called. Marked with "No Payment Required" label.
17
Contractor uploads $50 invoice for $0 event, agency approves and updates event price to $50, pays via ACH
Standard Stripe flow for $50. Agency adjusts event price to match approved invoice, then processes payment normally.
Group 3 — Price Floor & Payment
#
Scenario
Expected Behavior
18
$50 event, $25 paid, agency tries to reduce to $10
Blocked. Floor = $25. Can reduce to $25 minimum.
19
$50 event, $50 fully paid, agency tries to reduce
Blocked. Floor = $50. No refund in portal.
20
$50 event, nothing paid, agency reduces to $0
Allowed. Contractor notified. $0 logic applies.
21
$0 event, contractor uploads $100 invoice for extra services, agency wants to approve
Agency updates event price to $100 via "Update Event Price," then approves the invoice and processes payment.
Group 4 — Finance Module
#
Scenario
Expected Behavior
22
P&L: One contractor at $0, another at $500
COGS = $500. $0 contractor does not distort P&L.
23
$0 contractor — QuickBooks expense entry?
No. Skip QB sync for $0 events.
24
$0 expense auto-created?
No. Only entries with monetary value. Manual $0 expense allowed.
25
$0 event price + $30 travel fee — Total Expenses?
$30. Travel fee makes it > $0; standard flow applies.
26
$0 event, no invoice, no payment — "Amount Paid"?
$0.00. Not blank.
27
Invoices expandable row: expected $0, uploaded $0
Appears in row. Discrepancy = $0. No visual alert.
Group 5 — Payment Icon & Status
#
Scenario
Expected Behavior
28
$0 event, no invoice — icon?
Special state (greyed-out / N/A). Tooltip: "No payment required."
29
$0 updated to $50, paid — icon?
Filled. Tooltip: "Paid: $50.00." Standard.
30
$0 + $30 travel = $30, paid $15 — icon?
Half-filled. Standard partial payment.
31
$0 event, $30 travel fee, travel later waived to $0
Price floor applies. If paid, can't go below paid amount. If unpaid, reverts to $0.
Group 6 — Service Agreement & Snapshot
#
Scenario
Expected Behavior
32
Snapshot sent with $0
PDF shows $0.00 under Services. Not blank.
Group 7 — Reports & Tax
#
Scenario
Expected Behavior
33
Contractor report: $0 paid across multiple events
Included. Total Paid = $0.00. Not excluded.
34
1099-NEC: 5 events all at $0
Total = $0.00. Row still appears. System reports accurately.
35
Division-by-zero in average pay rate
If $0 in denominator → "N/A." "$0 / N = $0" is valid.
Group 8 — Contractor Portal
#
Scenario
Expected Behavior
36
Contractor sees $0.00 event in portal
"Event Price: $0.00" shown clearly. Contractor can still upload an invoice for any amount.
37
Multi-agency: $0 from Agency A, $500 from Agency B
Each workspace independent. No cross-contamination.
Group 9 — Automation, Notification & System
#
Scenario
Expected Behavior
38
Automation "When invoice is paid" — fires for $0?
If agency marks $0 as complete, trigger fires. Configuration question for agency.
39
Stripe called with $0 (guard failure)
Stripe rejects. Guard: skip Stripe if $0.
40
Notification when >$0 changes to $0
Contractor notified: "Event price updated to $0.00. No payment required."
41
Dashboard "Pending Payments" — $0 event?
No — unless uploaded invoice is pending review (appears in Outstanding Invoices).
42
Email template renders $0.00?
Must render correctly. No blank, no $NaN, no undefined.
43
Filter for $0 in Reports
Filterable by amount range including $0.
44
Update Event Price modal on $0 event
Shows $0.00 base, empty line items, "Add Line Item" available. Price floor enforced.
45
Contractor deactivated with $0 assignment
Standard deactivation. Record retained. No financial cleanup.
8. Acceptance Criteria
• System accepts $0 as a valid event price without errors; contractor card displays $0.00.
• Confirmation popup appears when assigning a contractor with no pay rate configured, warning about $0 event price.
• Contractors can upload invoices for $0 events for any amount without needing agency permission; agency reviews and authenticates before archiving.
• Price floor rule prevents reducing event price below the amount already paid; refunds handled outside portal.
• Warning dialog appears when agency changes price and contractor has already uploaded an invoice.
• Contractor receives notification on $0 → >$0 transition, >$0 → $0 transition, and initial $0 assignment.
• Stripe is never called for $0 amounts; "No Payment Required" label renders for $0 events.
• $0 events do not auto-create expense entries and are not synced to QuickBooks.
• Payment icons show "No Payment Required" special state for $0 events; standard icons for >$0.
• All reports include $0 records with $0.00 values; no division-by-zero errors.
• Dashboard widgets exclude $0 from Pending Payments / Upcoming Payouts; uploaded invoices appear in Outstanding.
• All email templates render $0.00 correctly with no blank or broken values.
• Service agreements and snapshots populate $0.00 in smart fields — never blank.
• Agencies can filter reports by $0 amount for tracking complimentary / pro bono work.
9. Dependencies
Dependency
Module / System
Impact
Assign Event Price Pop-up
Project Details → Contractors Tab
Validation update, contractor rate popup
Update Event Price Modal
Project Details → Contractors Tab
UI at $0, line item logic, price floor, invoice warning
Contractor Invoices
Finance Module
Invoice upload at $0, agency review, Stripe bypass
Stripe Payment Gateway
External Integration
$0 guard before API calls
QuickBooks Sync
External Integration
Skip sync for $0 events
Expenses Module
Finance Module
Suppress $0 auto-expense
Payment Icon Component
Calendar, Contractor Profile
"No Payment Required" state, tooltips
Service Agreement Templates
Contracts Module
Smart field $0.00 verification
Snapshot PDF Generator
Project Finance Tab
$0.00 rendering verification
Reports Engine
Reports Module
Division-by-zero guard, $0 filter
Notification Service
System-wide
$0 assignment, $0 → >$0, >$0 → $0 notifications
Contractor Portal
External Portal
Invoice upload, "No Payment Required" display
Automation Engine
System-wide
$0 invoice completion triggers
Dashboard Widgets
Agency Dashboard
Exclude $0 from financial widgets
Email Templates
System-wide
$0.00 rendering validation
10. References
• Existing FRD — Contractors Management: Pay Rates section — allows $0 input
• Existing FRD — Finance Module: Contractor Invoices, Expenses, P&L logic
• Existing FRD — Contractor Portal: Payments section, invoice upload flow
• Existing FRD — Service Agreement: Smart fields and template logic
• Existing FRD — Reports Module: Contractor reports and tax reports
• Existing FRD — Email Templates: System email templates and smart field rendering
• Existing FRD — Dashboard: Widget logic for financial summaries
• Stripe API Documentation: PaymentIntent minimum amount restrictions
• QuickBooks API Documentation: Expense sync conditions
Suggested contractors and Event Pricing
Suggested Contractor Assignment & Event Pricing
1. Module Overview
- Module Name: Suggested Contractor Pop-Up & Event Pricing
- Purpose: Provide agency administrators with a unified interface to select and assign contractors to event roles, using dynamic filters and availability logic, and then finalize event pricing per role
- Business Goal: Streamline and standardize the contractor assignment and pricing workflow to ensure optimal match‐making, availability checks, and transparent pricing for each service role in an event
2. User Roles & Permissions
Role
Description
Key Permissions
Agency Admin
Event management staff are responsible for contractor assignments and pricing
- Open the Suggested Contractors pop-up from four entry points
- Use all filters & toggles
- Select and assign contractors
- Open the Assign Event Price pop-up
- Adjust and confirm final pricing
- Bypass all restrictions and travel limits
3. User Flow
3.1 Entry Points (Four Available)
- Service-Specific (Services Tab): Event → Services → Assign Contractors button
- Service-Specific (Contractors Tab): Event → Contractors → Service Tab → Assign Contractors button
- Global (All Services): Event → Contractors → Assign Contractors button (Global)
- Role-Specific: Event → Contractors → Service Tab → Role Card → Assign {Role} button
3.2 Complete User Flow
- Entry Point Selection: The user selects one of four entry points based on the assignment scope
- Pre-Validation Check: Before displaying the "Assign Contractor" pop-up, the system performs a pre-validation check to ensure the event date requirements are met. If the requirements are not met, the system displays a relevant error pop-up.
- If Date TBD → pop-up: "Please set event date before assigning contractors."
- If the Venue is TBD, the system will still allow contractors to be assigned to the event. In this case, no travel fee will be applied to the contractor, as no distance can be calculated from the event venue to the contractor's address
- Suggested Contractors Pop-up: Opens with default filters per entry point
- Apply Filters & Toggles: The user can modify filters and apply toggles as needed
- Browse & Select: Browse the contractor list (sorted nearest → farthest) and select the contractor
- Assign Contractor: Click Select → opens Assign Event Price pop-up
- Set Final Price: Review auto-calculated price + apply optional adjustment → Assign Now → Confirmation
Critical Path: Entry Point → Pre-validation → Filter Application → Contractor Selection → Price Confirmation → Assignment Completion
4. Field Details & Validations
4.1 Suggested Contractors Pop-up - Common Filters & Actions
Field Name
Type
Required
Validation Rules
Search Contractors
Text input (search)
No
- Free-text search across name
- Real-time filtering as the user types
Date
Read-only chip
Yes
- Displays the Event Date
- Format MM/DD/YYYY
Service
Radio button group / Read-only chip
Yes
- Global Entry Point:
- If single service configured: Radio button with one option (auto-selected) + read-only chip display
- If multiple services are configured: Radio button group with all available services + chip display for the selected option
- Default selection priority: 1. Photography → 2. Videography → 3. Content Creation
- All Other Entry Points: Read-only chip displaying the pre-selected service from entry point context (services radio button will not be displayed)
Role
Radio button group / Read-only chip
Yes/No
- Role-Specific Entry Point: Read-only chip displaying the pre-selected role from the clicked role card (radio button filter not displayed)
- All Other Entry Points:
- If single role configured: Radio button with one option (auto-selected) + read-only chip display
- If multiple roles are configured: Radio button group with options limited to roles configured for the selected service + chip display for the selected option
- Available roles: Lead Shooter, Second Shooter, Assistant, Drone Operator
- Default selection priority: Lead Shooter > Second Shooter > Drone Operator > Assistant
Service Area
Single-select dropdown + Removable chip
Yes
- Default: Auto-populated from the event's service area
- Dropdown Options: Contains all service areas configured for the agency
- User Action: Can select different service areas from the dropdown to filter contractors
- Chip Removal: Click the cancel (×) icon on the service area chip triggers a warning message with the proceed and cancel buttons
- Warning: "Removing this filter will show all contractors available for this date and role, even if the event is outside their service area or travel preferences. Only assign a contractor if you've confirmed they're okay with this event. Proceed anyway?"
- If Proceed: Shows global contractor pool matching the event date, listing criteria (except the service area), if the user clicks "Proceed", click Cancel closes the warning
Show Invited Contractors (Pending)
Toggle
No
- OFF (default): show only fully onboarded contractors
- ON: include pending invite contractors
Pending contractors are assignable, and Travel Fee displays as "$0" (as they have not completed onboarding and provided travel fee rates)
Show Only Backup Shooters
Toggle
No
- OFF (default): show only non-backup contractors
- ON: show only contractors flagged as backup shooters by the agency
Bypass Contractor Travel Limits
Toggle
No
- OFF (default): enforce each contractor's travel distance limits (both travel without fees and travel with fees limits)
- ON: show contractors that even if the event location exceeds their maximum travel distance limits
- Travel fee is still calculated based on the contractor's travel fee structure and actual distance
Reset Filters
Button (icon)
No
- On click, reset the filters back to the default selected state
Cancel
Button
No
- Closes the Suggested Contractors pop-up without a contractor assignment
Assign Contractor
Button
No
- By default, disabled until a contractor is selected
- On click, it proceeds to the "Assign Event Price" pop-up
4.2 Contractor Listing Display Columns
Column
Type
Required
Details
Name
Text + Avatar
Yes
- Display the contractor's full name with avatar and role icon
- Clickable to view the contractor profile
- Displays contractor's service specialization (i.e, Photographer)
- When no profile exists, use the initials of the full name (e.g., John Doe → JD)
- Allows Name Sorting: ASC (A to Z) or DSC (Z to A)
Rate
Currency
Yes
- Display the contractor's hourly rate or "Fixed Price" based on the rate setup by the agency for the role of the service for the event, per contractor role pricing
- Format: $XXX/hour or $XXX (Fixed)
- Allows Rate Sorting: ASC (Low to High) or DSC (High to Low)
Fee
Currency + Tooltip
Conditional
- The fee will be displayed for all contractors
- Distance = (distance between the contractor's address and the event venue location)
- Fully onboarded contractors: Fee calculated based on the contractor's travel fee structure:
- If distance ≤ Travel Without Fees limit: Shows Fee = "$0"
- If distance > Travel Without Fees but ≤ Travel With Fees limit: Fee calculated for full distance (Distance × Rate per mile)
- If distance > Travel With Fees limit: Contractor not displayed in the list (unless Bypass toggle enabled)
- If the Bypass Travel Limit toggle is enabled, the fee is calculated for the full distance (Distance × Rate per mile)
- Pending contractors: Shows "$0" (as they have not completed onboarding and configured the travel fee structure)
- If Venue is TBD: No travel fee will be applied to the contractor; it will display “$0”, as no distance can be calculated from the event venue to the contractor's address
- On hover, the tooltip icon displays the tooltip message
Service Area
Text
Yes
- Display the contractor's service area
- Shows distance calculated via Google Maps API (Distance = Distance between contractor address and event venue location)
- Note: Distance calculation will not be displayed if the venue is TBD and contractor onboarding is not completed
- Format: "X.X Miles to Location"
- Allows Distance Sorting: ASC (Nearest to Farthest) or DSC (Farthest to Nearest)
Rating
Text + Star Icon
Optional
- Display the contractor's calculated average rating (1-5 stars) or "No ratings" for a new contractor
- Based on completed event reviews (fetch rating from contractor profile)
Select
Button
Yes
- A select button is displayed for each listed contractor
- Only one contractor can be selected at a time
- On click, the button will change to "Selected," and the "Assign Contractor" button will be enabled
- On click select button shows an info note: “Please Note: Only assign a contractor if you’ve confirmed they’re okay with this event.”
4.3 Assign Event Price/Update Price Pop-up Fields
Field
Type
Required
Details/Validations
Contractor
Text + Avatar + Icon
Yes
Display the selected contractor’s avatar, full name, role icon, and service
Contractor Rate
Display Section
Yes
- Display the selected contractor's hourly rate or "Fixed Price" based on the contractor’s rate set up by the agency
- Format: Hourly: $XXX/h Hourly Rate
Fixed: $XXX Fixed Price
Formula Note
Text
Yes
- If Hourly: "The price is calculated by the following formula: (Hourly Rate * Hours) + (Distance Rate * Distance)"
- If Fixed: "The price is calculated by the following formula: Fixed Price + (Distance Rate * Distance)"
Event Price
Currency Display + Tooltip
Yes
- If Hourly: Display the amount calculated using the hourly rate of the contractor (set up by the agency) × Coverage Hours (service coverage hours)
- If Fixed: Display the Fixed Price amount of the contractor (set up by the agency)
- Hourly/Fixed is based on the price set up by the agency for the contractor's role in the service for the event
- On hover, display a tooltip showing how the event price is calculated (Hourly Rate × Hours = Calculated Amount)
Travel Fee
Currency Display + Tooltip
Conditional
- Shown for all contractors
- Fully onboarded contractors: Fee calculated based on the contractor's travel fee structure:
- If distance ≤ Travel Without Fees limit: Displays "$0"
- If distance > Travel Without Fees but ≤ Travel With Fees limit: Fee calculated for full distance (Distance × Rate per mile)
- If distance > Travel With Fees limit: Contractor not selectable (unless bypass travel limit toggle was enabled)
- If the Bypass Travel Limit toggle is enabled, the fee is calculated for the full distance (Distance × Rate per mile)
Pending contractors: Display travel fee as "$0" (as they have not completed onboarding and configured the travel fee structure)
If Venue TBD: Display travel fee as “$0” (as no distance can be calculated from the event venue to the contractor's address)
- On hover, display a tooltip showing how the travel fee is calculated (Distance Rate × Distance = Calculated Amount)
Add Item
Button
No
On click, it will open an input field to add an item
Add Name
Text
Yes
- Min 2, Max 50 char
Adjust Price
Toggle button
No
- Optional adjustment field
- "+/-" Toggle Button: Default shows "+" (positive adjustment)
- Clicking the "+/-" button switches between positive and negative adjustment
- When toggled to negative, the price will display with a minus sign (e.g., -$50.00). Clicking the toggle again will remove the minus sign, reverting to positive
- The entered amount applies as positive or negative based on the toggle state
Amount
Number
Yes
- Maximum 6 digits (0-9)
- Numeric input only
- The system prevents typing after 6 digits
- Prevents zero entry as the first digit
Cancel (X)
Button
No
On click, it will close the Add Item input section
Yes
Tick Button
No
On click, it will validate that the final price is not negative. If it is negative, a validation error will be displayed. If not, the item will be added, and the final price will be calculated based on the sum of all items
Description
Text area
No
- Character limit: 250 characters
Final Price
Currency Display
Yes
- Sum of (Event Price + Travel Fee + Add Item(s), if any) will be calculated
- “Final Price” must be ≥ $0 (Display validation error if negative due to adding an item)
Payment Note
Text
Conditional
Display the payment note for the contractor if it has been added by the agency (during the setup contractor)
Added Item
Text + Tooltip
Conditional
If an item is added, it will be displayed below the Travel Fee. If the item has a description, an icon will appear next to the item name, and hovering over the icon will display the description message. If no description is provided in the add item, no tooltip icon will be shown. The item will also have a delete and edit button option
Edit (Added Item)
Button
No
Opens the item in edit mode, allowing the user to modify the name, amount, or description of the added item, and updates the final price based on the adjustments
Delete (Added Item)
Button
No
Removes the item from the list and updates the final price accordingly
Cancel
Button
No
- Closes pop-up without assignment
- Returns to the Suggested Contractors pop-up
Assign Now
Button
Yes
- The button remains enabled; if validation fails on click, a relevant error message will be displayed.
- If validation passes, the contractor will be assigned to the specific role of the service in the event, with the final price
Update Event Price - Update Event Price – On click, the Update Event Price button will display the same pop-up as Assign Event Price, with all the same functionalities, along with an additional Price History tab to view changes in the price history. The pop-up heading will be 'Update Event Price', and it will open with prefilled data from the last update or, if assigned for the first time, the initially assigned data.
Price History Tab
Tab + Scrollable List
Yes
- Displays all price-related logs: Event Price, Travel Fee, and Add Items
- If a new item is added, Logs "[Item Name] is added by [User Name]" along with its description and timestamp
- If an item is updated: Logs "[Item Name] amount is changed from $X to $Y by [User Name]" with description and timestamp
- If an item is removed: Logs “[Item Name] is removed by [User Name]”
- Shows initial assigned Event Price and Travel Fee logs
- Scrollable if multiple history entries exist
Cancel
Button
No
Closes the pop-up without saving changes
Update Event Price
Button
Yes
Validates all fields and updates the final price for the contractor. All changes (add/edit/remove items) are logged in Price History
5. Error Message Handling
Field
Validation Scenario
Error Message
Service Area Filter
Removing service area confirmation
pop-up: "Removing this filter will show all contractors available for this date and role, even if the event is outside their service area or travel preferences. Only assign a contractor if you've confirmed they're okay with this event. Proceed anyway?"
No Results
No contractors match filters
"No contractors found based on your current filters. Try adjusting the filters to see more results."
Add item
Empty
"Please enter an item name."
Add Item
Add item > 50 character
"Item name cannot exceed 50 characters."
Add Item
Add item < 2 character
"Item name must contain at least 2 characters."
Amount
Empty
“Please enter an amount.”
Description
Description > 250 char
"Description cannot exceed 250 characters."
Price Adjustment
Negative final price
"Final price cannot be negative. Please adjust the add item pricing."
Exceeding more than 7 numbers
General
System error
"Something went wrong."
6. Success Message Handling
Validation Scenario
Success Message
Contractor assigned successfully
"Contractor has been successfully assigned to the [Event Name]"
Contractor event price updated successfully
"Contractor's event price has been updated successfully."
7. Functional Logic
7.1 Entry-Point Default Filter Logic
Service-Specific (Services Tab & Contractors Tab):
- Service chip = The context service (Photography/Videography/Content Creation)
- Role chip and Filter (radio button) = If more than one role is selected by default, the selected radio button will be based on the Highest-priority configured role (Lead Shooter > Second Shooter > Drone Operator > Assistant)
- Date = Event Date (auto-populated)
- Service Area = Event’s service area
Global (All Services):
- Service chip and Filter (radio button) = If more than one service is available, the default selected radio button will be based on the following priority order: Photography > Videography > Content Creation. If only one service is available, the radio button for that service will be selected
- Role = highest-priority configured role of selected/default service
- Date = Event Date (auto-populated)
- Service Area = Event’s service area
- Filter Panel: Service and Role selection enabled
Role-Specific:
- Service chip = Current service tab context (fixed, non-editable)
- Role chip = Clicked role card (fixed, non-editable)
- Date = Event Date (auto-populated)
- Service Area = Event’s service area
- Filter Panel: No service or role selection is available; only the toggle filter and service area dropdown are available
7.2 Contractor Listing Criteria & Logic
Contractors must meet all of the following criteria to be listed in the suggested contractor pop-up.
- Availability Check: Contractor must be available on the event date (based on the do not book days, the contractor’s calendar, and future bookings)
- Contractor Setup: The contractor must be set up by the agency
- Service Area Match: The contractor's service area must include the event’s service area (unless the Service Area filter is removed or the Bypass Travel Limit toggle is enabled)
- Service Specialization Match: The contractor's services must include the event service type (Photography, Videography, or Content Creation)
- Role Match: The contractor must be configured for the role (by the agency) being assigned (Lead Shooter, Second Shooter, Assistant, Drone Operator)
- Event Type Match: The contractor must be configured for the specific event type being assigned (e.g., Anniversary, Wedding, Rehearsal Dinner)
- Assignment Check: The contractor must not already be assigned to another role in the same event
- Backup Filter: Contractor must meet backup shooter criteria when the toggle is enabled (only the contractors marked as backup shooters by the agency for the selected brand's particular events, services, and roles)
- Travel Distance Check: The event venue must fall within the contractor's travel-with-fees or without-fees limit unless the Bypass Travel Limit toggle is enabled or the venue is TBD
Sorting Logic (Suggested contractor pop-up):
- By default, sorting: The contractors in the table are automatically listed based on how close they are to the event venue. The nearest contractor to the event shows up first, and the farther contractors are listed afterward. The distance between the contractor's address and the event location is used to sort them
- If the event venue is TBD, all contractors matching the filters and toggles will be listed, no travel fees will be applied to those contractors, and they will be displayed in alphabetical order
7.3 Filter Interactions & Behavior
All toggles and filters can function simultaneously with these rules:
Service Area Removal:
- Triggers a warning before removal
- On Cancel: retain the current filter
- On Proceed: expands to global contractor pool, maintains distance sorting
Backup Shooter Toggle:
- Default OFF: show only non-backup contractors
- If toggled on, show only backup shooters (for the selected role, service, event, and brand), contractors (those flagged as backup by the agency); all should remain assignable
Pending Contractor Toggle:
- Default OFF: show only fully onboarded contractors
- If toggled On: only contractors with pending invitations (invites not accepted and onboarding not completed) will be shown
- Travel Fee displays as "$0" for pending contractors (as they have not completed onboarding and configured travel with/without a fee structure)
Bypass Travel Limit Toggle:
- Default OFF: enforce each contractor's travel distance limits (both travel without fees and travel with fees limits)
- If toggled On: show contractors that even if the event location exceeds their maximum travel distance limits
- Travel fees are still calculated based on the travel pay rate (per mile) * distance (between the contractor’s address and event location) (in miles)
Logic for the Combination of Toggles:
Note: If the backup shooters toggle is on, it will display only the backup shooters marked as backup shooters by the agency for the selected brand's particular events, services, and roles
-
**Backup Shooter Toggle OFF + Pending Contractor Toggle OFF:
**- Only non-backup and fully onboarded contractors are shown, matching the listing criteria
- Travel limits are enforced, and the travel fee calculation is based on the distance
-
**Backup Shooter Toggle ON + Pending Contractor Toggle OFF:
**- Only backup shooters (flagged by the agency) who are fully onboarded are shown, matching the listing criteria
- Travel limits are enforced, and the travel fee calculation is based on the distance
-
**Backup Shooter Toggle OFF + Pending Contractor Toggle ON:
**- Only non-backup contractors with pending invitations and incomplete onboarding are shown, matching the listing criteria
- Travel limits are enforced, but the travel fee is shown as "$0" for pending contractors
-
**Backup Shooter Toggle ON + Pending Contractor Toggle ON:
**- Only backup shooter contractors with pending invitations and incomplete onboarding are shown, matching the listing criteria
- Travel limits are enforced, and the travel fee is shown as "$0" for pending contractors
-
**Backup Shooter Toggle OFF + Pending Contractor Toggle OFF + Bypass Travel Limit Toggle OFF:
**- Only non-backup, fully onboarded contractors who are within the travel distance limits are shown, matching the listing criteria
- The travel fee is calculated as per the distance
-
**Backup Shooter Toggle ON + Pending Contractor Toggle OFF + Bypass Travel Limit Toggle OFF:
**- Only backup shooters who are fully onboarded and within travel distance limits are shown, matching the listing criteria
- The travel fee is calculated as per the distance
-
**Backup Shooter Toggle OFF + Pending Contractor Toggle ON + Bypass Travel Limit Toggle OFF:
**- Only non-backup contractors with pending invitations and incomplete onboarding, who are within travel distance limits, are shown, matching the listing criteria
- The travel fee is "$0" for pending contractors
-
**Backup Shooter Toggle ON + Pending Contractor Toggle ON + Bypass Travel Limit Toggle OFF:
**- Only backup shooter contractors with pending invitations and incomplete onboarding are shown, matching the listing criteria
- The travel fee is "$0" for pending contractors
-
**Backup Shooter Toggle OFF + Pending Contractor Toggle OFF + Bypass Travel Limit Toggle ON:
**- Non-backup, fully onboarded contractors, even if the event location exceeds their travel limits, are shown, matching the listing criteria
- The travel fee is calculated as per the distance
-
**Backup Shooter Toggle ON + Pending Contractor Toggle OFF + Bypass Travel Limit Toggle ON:
**- Only backup shooter contractors who are fully onboarded, even if the event location exceeds their travel limits, are shown, matching the listing criteria
- The travel fee is calculated as per the distance
-
**Backup Shooter Toggle OFF + Pending Contractor Toggle ON + Bypass Travel Limit Toggle ON:
**- Only non-backup contractors with pending invitations and incomplete onboarding, even if the event location exceeds their travel limits, are shown, matching the listing criteria
- The travel fee is "$0" for pending contractors
-
**Backup Shooter Toggle ON + Pending Contractor Toggle ON + Bypass Travel Limit Toggle ON:
**- Only backup shooter contractors with pending invitations, incomplete onboarding, or those whose event location exceeds their travel limits are shown, matching the listing criteria
- The travel fee is "$0" for pending contractors
7.4 Pricing Calculation & Source Logic
No Travel Fee (If Venue is TBD or Pending Contractor Invitation)
- If the event venue is TBD or the contractor is pending onboarding, no travel fee will be applied, as no distance can be calculated from the event venue to the contractor's address, and pending contractors have not set up any travel fees. In both cases, the travel fee will be displayed as ‘$0’
Coverage Hours Source:
- Pulled from Services Tab configuration → Coverage Hours field for the service (Photography/Videography/Content Creation)
Distance Calculation:
- Calculate the distance via Google Maps API between the contractor’s address and the event venue
Per-Mile Rate:
- Per mile rate set up by the agency fetched from agency account settings (if not changed by the agency - default $1/mile)
Pricing Formulas:
Hourly Pricing Model:
- Event Price = Contractor's Hourly Rate × Coverage Hours
- Travel Fee = Distance between event venue and the contractor’s address (miles) × Rate per Mile (set by the agency)
- Final Price = Sum of (Event Price + Travel Fee + Add Item(s), if any)
Fixed Pricing Model:
- Event Price = Contractor's Fixed Price for Role
- Travel Fee = Distance (miles) × Rate per Mile
- Final Price = Sum of (Event Price + Travel Fee + Add Item(s), if any)
Special Pricing Cases:
- For pending contractors and events with the venue marked as TBD, the Travel Fee is set to $0 (displayed as '$0') because the contractors have not completed onboarding to provide travel fee rates, and without a confirmed venue, no distance can be calculated between the contractor's address and the event venue
- Service Area Removed: Travel Fee still calculated based on actual distance (Contractor’s address and event venue)
- Role-Specific Pricing: Price fetched based on Event Type → Service → Role combination from contractor setup (price set by the agency)
7.5 Assignment Flow Logic
- Contractor selection: The user clicks "Select" on the chosen contractor
- Price pop-up opens: System fetches pricing based on the contractor's role configuration for the service in the event (hourly or fixed price)
- Price Display: Auto-calculates Event Price, Travel Fee, Final Price
- Optional adjustment:
- Users can add an item with a mandatory item name and price input
- +/- toggle button controls whether the entered amount for the add item is positive (default) or negative
- Click the +/- button to switch between addition and subtraction
- Final Validation: Ensures Final Price ≥ $0 and required fields are completed
- Assignment Commit: "Assign Now" creates an assignment of the contractor to the event with the final price
- Confirmation: A success message is displayed, the pop-up is closed, and the contractor is shown in the contractor's card and the user list of the event and project
7.6 Contractor’s Update Event Price Flow Logic
-
Update Action: The user clicks the "Update Event Price" option on the contractor's card from the kebab menu
-
**Pop-up Opens:
**
- It has the same fields and structure as the Assign Event Price pop-up, but with the following differences:
-
Heading: Displays "Update Event Price".
-
Event Price and Travel Fee are displayed as read-only
-
- **Price Display and History Messages:
**
-
Final Price = Event Price + Travel Fee + Add Item adjustments.
-
**Price History Messages:
**-
New Item: “[Item Name] is added by [User Name]” along with description and timestamp.
-
Edit Item: “[Item Name] amount is changed from $X to $Y by [User Name]” along with description and timestamp
-
Remove Item: “[Item Name] is removed by [User Name]” and timestamp
-
-
Important Rule: While the user is currently adding, editing, or removing items, the Price History tab does not update in real-time. It only displays the latest log entries after the price is updated (via the Update Price button) or initially assigned event price
- **Add/Edit/Remove Items:
**
-
Users can add new items, edit existing ones, or remove them.
-
All adjustments affect the Final Price in real time, but only appear in the Price History tab after update confirmation
- **Price History Tab:
**
-
Displays the most recent confirmed price history log (last update).
-
Logs include Event Price, Travel Fee (from initial assignment), and Add Item actions with user name, description, and timestamp
-
The tab is scrollable if there are multiple historical updates
- **Final Validation:
**
- Ensures Final Price ≥ $0 and all required fields (Add Name, Amount) are valid.
- **Update Commit:
**
- Clicking "Update Price":
-
Validates all inputs
-
Updates the contractor’s event price
-
Creates a new log entry in Price History based on all recent changes (added/edited/removed items)
-
- **Confirmation:
**
- Displays a success message, closes the pop-up, and updates the contractor card with the new price and adjustments
8. Edge Cases
Scenario
Expected Behavior
Venue or Date Missing
Pre-validation pop-up blocks entry into the Suggested Contractors flow
No contractors match filters
Show "No contractors found based on your current filters. Try adjusting the filters to see more results."
Remove Service Area
Warning pop-up: On Cancel: Retain the filter. On Proceed: Show the global pool of contractors available for the selected date and role, by default sorted by distance from nearest to farthest
The backup shooter toggle is enabled
Warning pop-up; on Cancel: revert to non-backup list; on Proceed: show backup shooters only
Bypass travel limit enabled
Show all available contractors regardless of their travel distance limits; travel fee still calculated based on actual distance; still by default sorted by distance from nearest to farthest
The contractor deleted it during the selection
Show warning: "This contractor is no longer available. Please select another contractor."
9. Test Cases
- Link:
10. Acceptance Criteria
- Entry Point Access: All four Assign Contractors buttons open the Suggested Contractors pop-up with the correct default filters per entry point logic
- Listing Logic: Display contractors who match the availability criteria (or toggled rules), sorted by default based on distance from the event venue to the contractor’s address, from nearest to farthest. If the event venue is TBD, all contractors matching the filters and toggles will be listed, and no travel fees will be applied to those contractors
- Toggle Behavior: Pending, Backup, and Bypass toggles function with appropriate warning pop-up and list updates as specified
- Dynamic Role Loading: Roles are displayed in the filter dynamically based on selected services in the Global assignment flow
- Select Action: Selecting a contractor and clicking the 'Assign Contractor' button opens the 'Assign Event Price' pop-up with the correct pricing model and calculations
- Price Calculation: Event Price, Travel Fee, Subtotal, and Final Price computed per locked formulas for both hourly and fixed pricing
- Adjustment & Comment: Price adjustment optional; comment required if adjustment ≠ 0
- Assignment Commit: The "Assign Now" button assigns the contractor to a selected role for the service in the event, with the final price and updates the user list, displaying the contractor
- Error Handling: Missing venue/date, negative pricing, API errors, and edge cases are handled gracefully with appropriate messaging
- Confirmation pop-up: Service Area removal displays a proper warning message with Cancel/Proceed options
- Travel Fee Logic: Travel fee displays "$0" for pending contractors, or in case if event venue is TBD, the Travel fee will be calculated for the onboarded contractors and the event venue is not TBD
- Filter Reset: The Reset button restores the default filters
- Simultaneous Filters: All toggles can be enabled simultaneously without conflicts
11. Dependencies
Module/System
Dependency Type
Impact if Unavailable
Event Management
Data dependency
Cannot fetch event date, venue, or service configuration; pre-validation fails
Contractor Database
Data dependency
Cannot list contractors, fetch profiles, pricing, or availability status
Services Configuration
Data dependency
Cannot determine coverage hours, service-role mappings, or pricing models
Calendar Integration/Check Availability
Functional service
Cannot validate contractor date availability; may show unavailable contractors
User Authentication
System dependency
Cannot determine user permissions for contractor assignment
Payment Processing
Data dependency (optional)
Payment calculations and post-assignment billing may be incomplete
Notification Service
External service
Contractor assignment notifications may fail; the assignment still completes
UI pop-up Components
UI dependency
Cannot open Suggested Contractors or Assign Price pop-up; blocks the entire flow
12. References
- Figma Designs: Click here
✅ Events - Raw Media
Raw Media Tab
1. Module Overview
- Module Name: Raw Media Tab
- Purpose: To display project deliverables submitted by contractors or the agency owner (for self-assigned events) after the event, organized by the agency owner first, followed by contractor roles. The agency owner can upload deliverables from the Raw Media tab, while each contractor’s delivery content is displayed based on the delivery method they selected and uploaded through the contractor portal
- Business Goal: Provide agency administrators with centralized visibility into all project deliverables—whether submitted by contractors or the agency owner (for self-assigned events)—after event completion, organized by role hierarchy and delivery source
2. User Roles & Permissions
3. User Flow
- User navigates to the Raw Media tab
- Before event completion: The Raw Media tab displays the message:
- “No Raw Media Available Yet” — “Contractors will upload raw deliverables here once the event concludes. Please check back later.”
- After the event completion:
- Contractors are displayed by role hierarchy (Lead Shooter > Second Shooter > Drone Operator > Assistant).
- If the contractor hasn’t submitted deliverables:
- When a contractor has not yet submitted any RAW Media, display the following information in a clear and informative manner:
- Role (with icon) assigned for the event (Lead Shooter, Second Shooter, Drone Operator, assistant) and follows the role hierarchy
- Contractor’s Avatar and Full Name
- Service specialization for the event (Photographer/Videographer/Content Creator)
- Text: “Nothing Here” Subtext: “This contractor is yet to provide RAW Media”
- When a contractor has not yet submitted any RAW Media, display the following information in a clear and informative manner:
- If the contractor has submitted deliverables, show delivery by its methods submitted by the contractor (Digital Delivery, Hard Drive, Other)
- Admin can copy digital delivery URLs, view tracking info, and read custom text
Critical Path: Project details > Events > Raw Media Tab > View contractor deliverables by role > View delivery based on method type
4. Functional Logic
- Empty State (Pre-Event Display): Before event completion, the raw media tab shows an empty state based on 2 cases
- Display Message: No Raw Media Available Yet
Subtext:- Case 1 - If the agency owner is assigned to the event: Deliverables will be uploaded here by the agency owner or contractors once the event concludes. Please check back later.
- Case 2 - If the agency owner is not assigned in the event: Contractors will upload raw deliverables here once the event concludes. Please check back later.
- Display Message: No Raw Media Available Yet
(Post Event) – Agency Owner Upload Deliverables Section: If the agency owner is assigned to an event (self-assigned), the system displays the “Upload Deliverables” section above the contractors’ section once the event date has passed.
This section includes:
An input field to paste delivery links (e.g., Dropbox, Google Drive, etc.)
A “+ Add Additional Link” button to add up to 5 links maximum
Each added link appears with an editable input field and a delete (✕) icon
-
- Functional Behavior:
- The agency owner can edit a link directly by typing in the input box
- When any change is made, the Save button becomes active
- Clicking Save updates the link
- Clicking the delete (✕) icon opens a confirmation modal: “Are you sure you want to delete this link?” with options Cancel and Delete
- On clicking Delete, the uploaded link will be removed. On clicking Cancel, the confirmation dialog will close without making any changes
- Each link must be a valid URL format before saving
- Functional Behavior:
- (Post Event) – No Submission by Contractor: If the contractor has not submitted any deliverables after the event, the system will display the contractor’s role, avatar, name, and service, along with the message:
“Nothing Here – This contractor is yet to provide RAW Media.” - Post Event Contractor Display: After event completion, show contractor cards with role, name, specialization, and chosen delivery method
- Role Hierarchy Display: Contractors grouped and displayed in priority order: Lead Shooter > Second Shooter > Drone Operator > Assistant
- Delivery Method Categorization: All submitted delivery methods (Digital, Hard Drive, Other) are displayed together
- Digital Delivery Display: URLs are shown vertically (if more than one) with clickable links and copy icons
- Hard Drive Display: Show tracking number, shipping service (entered by contractor), and shipping address (system populated)
- Other Delivery Display: Show contractor-submitted text exactly as entered, multi-line supported
- Profile Integration: Contractor name is clickable to open full profile view of the contractor (agency contractor management module > View profile)
5. Field Details & Validations
5.1 Empty (Pre-Event)
Field Name
Type
Required
Validation Rules
Empty State Message
Static Text
Yes
Display the message: “No Raw Media Available Yet”
Subtext: “Contractors will upload raw deliverables here once the event concludes. Please check back later.”
5.2 Empty (Post Event)
Field Name
Type
Required
Validation Rules
Contractor Role Label
Text + Icon
Yes
- Displays the role (with icon) of the assigned contractor who will submit the deliverables for the event
- View only
- Roles: Lead Shooter, Second Shooter, Drone Operator, Assistant
Contractor Avatar/Name and specialization
Text
Yes
- Displays the full name and avatar of the contractor for each submitted deliverable
- Display the contractor’s specialization for the event (i.e., Photographer/Videographer/Content Creator)
- Clickable to open contractor profile
Static Text
Text
Yes
- Display static text until event completion and no deliverables are uploaded by the contractor
- Text: “Nothing Here”
- Sub text: “This contractor is yet to provide RAW Media”
5.3 Deliverables Uploaded (Post Event)
Field Name
Type
Required
Validation Rules
Contractor Role Label
Text + Icon
Yes
- Displays the role (with icon) of the contractor who submitted the deliverables for the event
- View only
- Roles: Lead Shooter, Second Shooter, Drone Operator, Assistant
Contractor Avatar/Name and specialization
Text
Yes
- Displays the full name and avatar of the contractor for each submitted deliverable
- Display the contractor’s specialization for the event (i.e., Photographer/Videographer/Content Creator)
- Clickable to open the contractor profile
Deliverable method - Digital Delivery Links
URL List
Conditional
- Display the URLs submitted by the contractor
- Each URL is displayed with a copyable icon to copy the link
- Displayed only if deliverables have been submitted using the digital delivery method
Deliverable method - Hard Drive (Tracking Number)
Text
Conditional
- Displays the tracking number entered by the contractor
- Displayed only if deliverables have been submitted using the hard drive method
Deliverable method - Hard Drive (Shipping service)
Text
Conditional
- Displays the shipping service entered by the contractor
- Displayed only if deliverables have been submitted using the hard drive method
Deliverable method - Hard Drive (Shipping Address)
Text
Conditional
- Displays the shipping address of the agency receiving the hard drive
- This field is system-populated based on agency address data
Deliverable method - Other
Text
Conditional
- Displays the custom text entered by the contractor, preserved exactly as provided
- Display only if deliverables have been submitted using the “Other” method
Latest/Oldest Filter
Dropdown
Optional
Filter selection for sorting deliverables
6. Edge Cases
Scenario
Expected Behavior
The contractor submits all three delivery methods
Display all methods (Digital Delivery, Hard Drive, Other) under a single contractor card
Multiple URLs in digital delivery
Display as a vertical stack with individual copy icons for each URL
Long text in the "Other" section
Display full text as multi-line, preserving original formatting
7. Test Cases:
Link: Pixally Test cases - 01.04.25
8. Acceptance Criteria
- Pre-Event Display: Before event completion, the system displays the "No Raw Media Available Yet" Text and its subtext
- Post Event Contractor Display: After event completion, contractors are displayed by role, name, avatar, and specialization
- Post Event No Submission Display: Contractors with no submitted deliverables display: "Nothing Here - This contractor has yet to provide RAW Media”
- Delivery Method Display: All three delivery methods (Digital, Hard Drive, Other) are displayed when submitted by the contractor
- Digital Delivery Functionality: URLs must be clickable and have individual copy icons
- Hard Drive Information: Tracking number, shipping service, and shipping address displayed correctly
- Custom Text Preservation: "Other" deliverable method text displayed exactly as entered by the contractor
- Read-only Interface: All data displayed as view-only with no edit capabilities
- Profile Integration: Contractor name/avatar is clickable to open profile view
9. Dependencies
Module/System
Dependency Type
Impact if Unavailable
Contractor Portal
API Integration
No raw media data available, shows "No media found"
Contractor Management
Data Dependency
Cannot display contractor profiles and role information
Authentication System
Access Control
Cannot verify agency admin permissions
10. References
- Figma Design: Click Here
✅ Events - Info tab
Functional Requirements Document (FRD) — Project Details > Events > Info Tab
Module: Project Details > Events > Info Tab
Prepared By: BA Team
Reviewed By: KG (Project Manager)
Updated Date: May 27, 2026
Status: Draft
Version: 1.3
1. Module Overview
Module Name: Project Details > Events > Info Tab
Purpose: The Info Tab serves as the centralized information display and editing interface for an individual event within a project. It presents core event details (timezone, date/time, primary venue) and order information (package, items included, a la carte items), and provides inline editing capabilities that trigger contractor availability checks, payment schedule impact notifications, and audit logging when changes are made.
Business Goals:
-
Provide agency owners and admins with a single, comprehensive view of all event-level details including scheduling, venue, and order information.
-
Enable inline editing of event details with built-in safeguards that automatically detect and surface contractor scheduling conflicts when dates are changed.
-
Ensure operational transparency through audit logging of all changes, contractor notifications, and financial visibility during reassignment workflows.
-
Streamline the contractor reassignment process by surfacing availability status, enabling in-context replacement, and flagging financial obligations when contractors are removed.
2. User Roles & Permissions
Role
View Info Tab
Edit Event Info
Edit Order Info (A La Carte)
Remove/Replace Contractors
Agency Owner
Yes
Yes
Yes
Yes
Agency Admin
Yes
Yes
Yes
Yes
Project Manager
Yes
Yes
Yes
Yes
Notes:
- Contractors and Clients have their own portal-specific views documented in separate FRDs.
3. User Flow
3.1 The user navigates to the Projects module from the left sidebar menu.
3.2 The system loads the project listing page with all projects displayed.
3.3 The user clicks on a specific project card to open the Project Details page.
3.4 The system loads the Project Details page with the project header (cover image, project name, date range, location, timezone, status) and the event cards row beneath it.
3.5 The user clicks on a specific event card (e.g., "Rehearsal Dinner," "Wedding," "Engagement Photoshoot") from the horizontal event cards row.
3.6 The system highlights the selected event card and loads the event's sub-tabs: Services, Contractors, Raw Media, Files/Documents, Notes, and Info.
3.7 The user clicks on the "Info" tab from the event sub-tab navigation bar.
3.8 The system loads the Info Tab content area displaying two main sections: "Event Info" (with an Edit button) and "Order Info" (with an Edit button for a la carte items).
3.9 The system displays the Event Info section in read-only mode showing: Event Name with color dot indicator, Time Zone, Start Date & Time / End Date & Time (for multi-day events) or Event Date & Time (for single-day events), and Primary Venue.
3.10 The system displays the Order Info section in read-only mode showing: Package Name (read-only), Items Included for This Event (read-only), A La Carte Items Included for This Event (with the ability to add/remove additional items), and services grouped by service type (e.g., Photography, Videography).
3.11 If the event date is TBD, the system displays "TBD" in the date field, "TBD" in the timezone field, and the venue field displays "Venue not decided" if no venue is set.
3.12 If no order information exists for the event, the system displays the empty state message: "No order information available for this event. Package and service details will appear here once an order is placed through a proposal or added manually."
3.13 The user clicks the "Edit" button on the Event Info section to initiate inline editing.
3.14 The system converts the Event Info fields to editable inline fields (text inputs, date pickers, dropdowns) and displays "Save" and "Cancel" action buttons.
3.15 The user modifies the desired fields (Time Zone, Event Date/Time, Primary Venue) and clicks "Save."
3.16 If the user changed the event date and contractors are assigned to this event, the system performs a contractor availability check and displays the "Update Event" modal showing each contractor's availability status grouped by service type.
3.17 The user reviews contractor availability in the Update Event modal and takes action on unavailable contractors by clicking "Remove Contractor" or "Replace" for each unavailable contractor.
3.18 If the user clicks "Replace," the system opens the "Suggested Contractors" modal with a list of available contractors filtered by the new event date, role, and service area.
3.19 The user selects a replacement contractor from the Suggested Contractors modal and proceeds through the event price assignment step.
3.20 After resolving all unavailable contractors, the user clicks "Save and Notify Contractors" in the Update Event modal.
3.21 The system saves the updated event details, sends email and in-app notifications to all affected contractors, logs the changes in the activity log, and displays a success toast message.
3.22 The Update Event modal closes and the system returns the user to the Info Tab with the updated event information displayed in read-only mode.
3.23 If the user clicks "Discard Changes" in the Update Event modal, the system displays a confirmation popup. If the user confirms by clicking "Yes, Discard," the system reverts the date change back to the original date, discards all contractor changes, closes the modal, and returns to the Info Tab with the original event information.
3.24 If the user only changed the venue (without changing the date), the system saves the venue change, updates the distance calculation for existing assigned contractors, sends venue change notifications (email + in-app) to all assigned contractors, and returns to read-only mode with a success toast message.
3.25 The user can edit the Order Info section to add additional a la carte items or remove only the additionally added a la carte items (not the original package a la carte items selected by the client).
3.26 The system logs all changes (event info edits, contractor removals, replacements, a la carte modifications) in the Project Details > Overview > Activity tab.
4. Functional Logic
4.1 Event Info Display Logic
-
The Event Info section is displayed in read-only mode by default when the user navigates to the Info Tab.
-
The section header displays the event name preceded by a color dot indicator, where the color is fetched from the Agency Settings.
-
The Time Zone field displays the timezone that was selected during the event creation process, and the default timezone is inherited from the Agency Settings.
-
The available Time Zone options in the dropdown are: EDT / EST, CDT / CST, MDT / MST, PDT / PST, MST, HST, and AKDT / AKST.
-
For multi-day events, the system displays two separate date fields: "Start Date & Time" and "End Date & Time," each showing the date and time formatted according to the user's Date & Time Preferences configured in Settings > My Profile.
-
For single-day events, the system displays a single date field labeled "Event Date & Time" showing the date and time formatted according to the user's Date & Time Preferences. The time captured represents the time contractors need to arrive at the venue; no separate end time is tracked for single-day events.
-
The Primary Venue field displays the full venue address as entered during event creation, which is powered by Google Maps API autocomplete.
-
When the event date is TBD (To Be Determined), the date field displays the text "TBD" instead of a date value, and the Time Zone field also displays "TBD."
-
When the venue has not been decided, the Primary Venue field displays the system-generated placeholder text "Venue not decided," regardless of whether the event date is set or TBD.
-
The venue and date fields are independent of each other, meaning the venue can be "not decided" even when a date is set, and vice versa.
-
An "Edit" button with a pencil icon is displayed in the top-right corner of the Event Info section, allowing the user to switch to inline editing mode.
-
All date and time values displayed on the Info Tab are formatted according to the user's Date & Time Preferences configured in Settings > My Profile. The available preferences are:
- Date Format: User-selected format from a dropdown (e.g., DD/MM/YYYY, MM/DD/YYYY, YYYY-MM-DD, etc.).
- Include Day of the Week: Optional checkbox to include the day name (e.g., Sat, Sun) alongside the date.
- Time Format: User-selected radio option — 12-hour (AM/PM) or 24-hour format.
-
These preferences are applied globally across all date/time displays in the system, including the Info Tab.
4.2 Edit Event Info — Inline Editing
-
When the user clicks the "Edit" button on the Event Info section, all editable fields within the section convert to their respective inline editable input controls (date pickers for date/time, dropdown for timezone, autocomplete text input for venue).
-
The system displays "Save" and "Cancel" buttons at the bottom of the Event Info section when inline editing is active.
-
The Time Zone field becomes an editable dropdown populated with the standard timezone options listed in Section 4.1.
-
The date/time fields become editable date picker inputs that allow the user to select a new date and time.
-
The Primary Venue field becomes an autocomplete text input powered by Google Maps API (Google Places API), displaying venue suggestions as the user types, with text-only display (no map preview).
-
If the user clicks "Cancel" during inline editing, all fields revert to their original read-only values and the section returns to read-only display mode without saving any changes.
-
If the user clicks "Save" after making changes, the system evaluates the type of change made (date change, venue change, or other field changes) and triggers the appropriate downstream logic as described in Sections 4.3 and 4.6.
4.3 Date Change — Contractor Availability Check
4.3.1 Date Change — Evaluation & Trigger Logic
-
When the user changes the event date and clicks "Save," the system evaluates the change and determines which modals/pop-ups to display.
-
Primary Event Definition: The primary event is the first event created for a project (either from lead forms or manually). When events are created through proposals based on client selection, the proposal-selected event becomes the primary event. The agency can change the primary event designation at any time. The primary event is used to determine invoice payment schedule relationships.
-
Contractor Availability Check: If contractors are assigned to the event AND the new date is a future date OR a past date, the system performs an availability check against the new date for all assigned contractors. If any contractor is unavailable, the "Update Event" modal is displayed.
-
Contractor Availability Check NOT Required: When changing from a future date to TBD, contractor availability check is NOT performed.
-
If the event date is being changed from TBD to an actual date for the first time, no contractors can be assigned to the event (since contractor assignment is blocked when the date is TBD), so the system saves the new date directly, displays a success toast message, and returns to read-only mode without showing the Update Event modal.
-
Payment Schedule Impact Pop-up: After the contractor availability check (if applicable), if this is the primary event AND there are unpaid payments on any linked invoice(s), the Payment Schedule Impact pop-up is displayed (see Section 4.11).
-
**Flow Order for Date Changes:
**- User changes date and clicks Save
- System validates the date change
- If contractors assigned and date is future/past → Contractor Availability Modal (if any unavailable)
- If primary event and unpaid payments exist → Payment Schedule Impact Pop-up
- Date change is saved
-
Users can change an event date back to TBD. When changing from an actual date to TBD AND this is the primary event AND there are unpaid payments on the invoice, the system displays the Payment Schedule Impact pop-up (see Section 4.11.5). Contractor availability check is NOT performed for TBD changes.
-
If no contractors are assigned to the event AND no payment schedule impact, the system saves the date change directly, displays a success toast message, and returns to read-only mode.
-
The availability check verifies whether each assigned contractor has any scheduling conflicts on the new date, including conflicts with other assigned projects/events, or Do Not Book (DNB) dates set by the contractor.
4.3.2 Update Event Modal — Layout & Display
-
The Update Event modal displays a warning banner at the top (see Sections 4.3.3 and 4.3.4 for banner text logic based on availability results).
-
Contractors in the Update Event modal are grouped by service type (e.g., Photography, Videography) to match the organizational structure of the event's service assignments.
-
Each contractor card in the modal displays: Role badge (e.g., Lead Shooter, Second Shooter), profile photo, contractor name, profession/specialty, star rating, availability status ("Available" in green or "Not Available" in red), and two action buttons ("Remove Contractor" and "Replace").
-
The modal also displays payment information for each contractor: Event Price, Amount Paid, and Distance to Location, ensuring the agency owner has full financial visibility before making removal or replacement decisions.
-
The three-dot menu is NOT displayed on contractor cards in the Update Event modal (confirmed: not required).
-
The modal footer contains two buttons: "Discard Changes" and "Save and Notify Contractors."
4.3.3 All Contractors Available on New Date
-
If all assigned contractors are available on the new date, the banner reads: "All contractors are available on the new event date. Click 'Save and Notify' to update and inform all contractors."
-
For all contractors marked as "Available," the "Remove Contractor" and "Replace" buttons are displayed in a disabled/greyed-out state, as available contractors do not need to be removed or replaced.
-
The user clicks "Save and Notify Contractors" to save the date change, notify all contractors, log the change, and return to the Info Tab with updated data.
4.3.4 One or More Contractors Unavailable on New Date
-
If one or more contractors are unavailable, the banner reads: "Some contractors are unavailable on the new event date. Please update their assignments before saving. You can remove or replace them with an available contractor."
-
For contractors marked as "Available," the "Remove Contractor" and "Replace" buttons are displayed in a disabled/greyed-out state.
-
For contractors marked as "Not Available," the "Remove Contractor" and "Replace" buttons are active and enabled for user interaction.
-
The user must resolve each unavailable contractor (remove or replace) before saving, or use the "Remove & Notify" option in the secondary warning popup (documented in Section 4.4.3).
4.4 Update Event Modal — Contractor Actions
4.4.1 Remove Contractor & Unassigned Card State
- When the user clicks "Remove Contractor" for an unavailable contractor, the system displays a confirmation dialog before marking the contractor for removal. The dialog title is "Remove Contractor?" and the message varies based on the contractor's payment status:
Payment Status
Dialog Title
Dialog Message
Buttons
Unpaid (Single or Multiple)
Remove Contractor?
Are you sure you want to remove this contractor from this event?
Cancel | Remove
Processing (Single)
Remove Contractor?
Payment of $[Amount] processing. Are you sure you want to remove this contractor from this event?
Cancel | Remove
Processing (Multiple - all processing)
Remove Contractor?
Payment of $[Total Amount] processing across [N] payments. Are you sure you want to remove this contractor from this event?
Cancel | Remove
Paid (Single)
Remove Contractor?
This contractor has already been paid $[Amount]. Are you sure you want to remove them from this event?
Cancel | Remove
Paid (Multiple - all paid)
Remove Contractor?
This contractor has already been paid $[Total Amount] across [N] payments. Are you sure you want to remove them from this event?
Cancel | Remove
Mixed (Paid + Processing)
Remove Contractor?
This contractor has already been paid $[Paid Total]. Are you sure you want to remove them from this event?
Cancel | Remove
Payment Status Priority Logic:
-
If ANY payment is Paid → Show only the combined paid amount (ignore processing & unpaid amounts)
-
If NO Paid payments but some are Processing → Show combined processing amount (ignore unpaid)
-
If ALL payments are Unpaid → Show standard unpaid message
-
Payment count ("across [N] payments") is shown only for Multiple Paid or Multiple Processing scenarios (not for Mixed)
-
Currency symbol is displayed based on the agency's currency settings (default: USD).
-
If the user clicks "Cancel," the dialog closes without any changes.
-
If the user clicks "Remove," the system marks that contractor for removal from the event assignment upon final save.
-
Payments are handled via Stripe; removing a contractor does not automatically cancel or refund any payments. Any payment discrepancies must be handled internally between the parties.
-
Upon confirmation, the contractor card in the Update Event modal is immediately replaced with an "Unassigned" state card displaying: the role badge at the top-left (e.g., "Lead Shooter" with the role icon), a placeholder avatar (purple circle with a "?" icon) in place of the contractor's profile photo, the text "Unassigned" below the avatar, and an "Assign [Role]" button (e.g., "Assign Lead Shooter") that allows the user to assign a new contractor for that role. Clicking the "Assign [Role]" button opens the Suggested Contractors modal (documented in Section 4.5) pre-filtered for that specific role.
-
When the user clicks "Replace" for an unavailable contractor, the system opens the "Suggested Contractors" modal (documented in Section 4.5) to allow the user to select a replacement.
-
If multiple contractors are unavailable, the user must handle each one individually (remove or replace), as there is no bulk action to remove/replace all at once, except for the "Remove & Notify" button in the secondary warning popup (Section 4.4.3) which removes all remaining unavailable contractors at once.
4.4.2 Discard Changes — Confirmation & Revert Logic
-
When the user clicks "Discard Changes," the system displays a confirmation popup with the message: "The event date change will be reverted to the original date, and all contractor changes will be discarded. Are you sure you want to discard?" The popup provides two options: "Yes, Discard" and "Go Back."
-
If the user confirms by clicking "Yes, Discard," the system reverts the event date back to the original date, discards all contractor removal/replacement actions, closes the Update Event modal, and returns the user to the Info Tab with the original event information in read-only mode.
-
If the user clicks "Go Back," the popup closes and the user remains on the Update Event modal with all current selections (removals, replacements) intact.
4.4.3 Save with Unresolved Unavailable Contractors — Secondary Warning Popup
-
If the user clicks "Save and Notify Contractors" while there are still unavailable contractors that have not been removed or replaced, the system displays a secondary warning popup informing the user that unavailable contractors must be handled.
-
The secondary warning popup provides two options: the user can go back to the modal to remove/replace the remaining unavailable contractors, or the user can click "Remove & Notify" to automatically remove all remaining unavailable contractors and proceed with saving.
4.4.4 Save and Notify — Final Actions & Post-Save Impact
- Upon clicking "Save and Notify Contractors" (with all unavailable contractors resolved), the system performs the following actions: saves the new event date, removes the marked contractors from the event assignment, assigns any replacement contractors selected by the user, sends email and in-app notifications to all removed contractors informing them of their removal from the event, sends email and in-app notifications to all remaining and newly assigned contractors about the event date change, logs all changes (date change, removals, replacements) in the Project Details > Overview > Activity tab, and displays a success toast message.
Removed Contractors — Post-Save Impact:
-
Removed contractors are immediately unassigned from the event, and the event that now has missing contractor positions appears on the Dashboard > Unassigned Contractor List.
-
After removal, the removed contractors' availability is updated on their Contractor Portal, and the specific event is no longer visible to them in their portal.
-
If the removed contractor had a signed service agreement for this event, the system automatically changes the service agreement status from "Signed" to "Voided" in the Project Details > Events > Files/Documents tab. The voided agreement remains as a historical record and is not deleted.
-
The removed contractor's financial data (Event Price, Amount Paid) remains as-is in the Project Details > Finance Tab and the Finance module. There is no automatic status change on the payment record; existing payment records simply persist with no modification.
-
If any contractor roles remain unfilled after save (i.e., the user removed a contractor but did not assign a replacement), the Unassigned contractor card (same design: purple "?" avatar, role badge, "Assign [Role]" button) appears on the Events > Contractors Tab for the unfilled role.
Replacement Contractors — Post-Save Impact:
-
For each newly assigned replacement contractor, the system additionally performs the following: sends a new event assignment email to the replacement contractor informing them of their assignment, and makes the event visible on the replacement contractor's Contractor Portal so they can view the event details.
-
The system checks whether the "Automatically Send to Contractors" toggle is enabled for the relevant service agreement (configured in Contract > Service Agreement settings).
-
If the toggle is ON, the system automatically sends the relevant service agreement (based on the service the contractor is assigned to, e.g., Photography, Videography) to the replacement contractor for signing.
-
If the toggle is OFF, no service agreement is sent automatically, and the agency owner must manually send it later from the Files/Documents tab.
4.5 Suggested Contractors Modal — Replacement Flow
-
When the user clicks "Replace" for an unavailable contractor, the system opens the "Suggested Contractors" modal, pre-filtered by the new event date, the role of the contractor being replaced (e.g., Assistant, Lead Shooter), and the event's service area.
-
The Suggested Contractors modal displays a header showing the total count of suggested contractors (e.g., "Suggested Contractors (8)") and a subtitle: "Browse best fit contractors suggested by Pixally or search on your own."
-
The modal includes a search bar ("Search Contractors") allowing the user to search for contractors by name.
-
Applied filters are displayed as filter chips below the search bar showing: Date, Role, and Service Area, with a delete icon to clear all filters.
-
The contractor list is displayed in a tabular format with the following columns: Name (with profile photo and profession), Rate (pay rate per hour), Fee (travel fee, calculated based on the venue and contractor's home address), Service Area (with distance in miles to the event location), star Rating, and Actions ("Select" button).
-
Additional filters and sorting options are available (detailed logic to be documented in the Events > Contractors Tab > Assign Contractor FRD).
-
The user selects a replacement contractor by clicking the "Select" button next to the desired contractor.
-
After selecting a contractor, the system navigates the user to an event price assignment step where the user sets the event price for the replacement contractor (detailed logic to be documented in the Events > Contractors Tab > Assign Contractor FRD).
-
The modal footer contains "Back" and "Assign Contractors" buttons, where "Back" returns the user to the Update Event modal without making a selection.
-
Once the replacement contractor is assigned, the system returns to the Update Event modal with the newly assigned contractor now displayed in place of the previously unavailable contractor.
4.6 Venue Change Impact Logic
-
When the user changes only the venue (without changing the event date) and clicks "Save," the system does not trigger the contractor availability check modal, as venue changes do not affect contractor scheduling availability.
-
The system updates the Primary Venue field with the new venue address selected via Google Maps API autocomplete.
-
Upon saving a venue change, the system automatically recalculates the distance from the new venue to each assigned contractor's home address and updates the "Distance to Location" value for all existing assigned contractors.
-
The travel fee for existing assigned contractors is NOT automatically recalculated when the venue changes; the agency owner must manually adjust the travel fee for existing contractors if needed.
-
However, when the agency assigns any new contractor after the venue has been updated, the new contractor's distance and travel fee will be calculated based on the new venue location.
-
The system sends email and in-app notifications to all currently assigned contractors informing them of the venue change, as the venue location is critical information for contractors who need to travel to the event.
-
All venue changes are logged in the Project Details > Overview > Activity tab.
-
A success toast message is displayed after the venue change is saved.
-
Venue and Date Change in Separate Sessions: If the user changes the venue in one edit session (Session 1) and saves, and then changes the event date in a separate edit session (Session 2) — triggering the Update Event modal and replacing a contractor — the replacement contractor's travel fee is calculated based on the already-updated new venue (from Session 1). Conversely, if the user changes the event date first (Session 1), replaces a contractor, saves, and then changes the venue later (Session 2), the replacement contractor (now an existing contractor) follows the same venue change rules: distance is recalculated but travel fee is NOT recalculated.
4.7 Order Info Display Logic
-
The Order Info section is displayed below the Event Info section on the Info Tab.
-
The section displays an "Edit" button (pencil icon) in the top-right corner, which is used for adding/removing additional a la carte items only.
-
The Order Info section displays the following subsections when a package is associated with the event:
- Package Name: Displays the name of the package selected by the client during the proposal/booking stage (e.g., "Photo/Video Silver"). This field is always read-only.
- Items Included for This Event: Displays a list of all deliverable items included in the package for this specific event (e.g., "10 hours of photoshooting," "Basic Retouch," "1 Photographer"). Each item is displayed as a separate row entry. These fields are always read-only.
- A La Carte Items Included for This Event: Displays all a la carte items associated with this event as chips/tags (e.g., "Instagram Video," "Drone Footage," "Portrait Session," "Promo Video," "Assistant"). A la carte items from the original package selection by the client are read-only and cannot be removed. Additionally added a la carte items (added by the agency) can be removed.
- Services: Displays the services associated with this event grouped by service type (e.g., Photography, Videography), showing what the agency needs to deliver for this event.
-
When no order information exists for the event (no package, no items, no a la carte items), the system displays the empty state message: "No order information available for this event. Package and service details will appear here once an order is placed through a proposal or added manually."
4.8 Edit Order Info — A La Carte Items
-
The Package Name and Items Included sections are always read-only and cannot be edited from the Info Tab, as these are determined during the proposal/booking stage by the client.
-
The "Edit" button on the Order Info section enables the user to add additional a la carte items to the event or remove only the a la carte items that were additionally added by the agency.
-
When the user clicks "Edit," the a la carte section becomes editable, displaying an input field or dropdown to search and add new a la carte items, and showing a remove icon (X) next to each additionally added a la carte item.
-
The a la carte items that were part of the original client-selected package do NOT display a remove icon and remain read-only even in edit mode.
-
When the user adds or removes a la carte items and clicks "Save," the system updates the Order Info display, logs the change in the Project Details > Overview > Activity tab, and displays a success toast message.
-
If the user clicks "Cancel," the a la carte items revert to their previous state without any changes being saved.
4.9 Order Activity Display Logic
-
The Order Activity section is displayed below the Order Info section on the Info Tab.
-
Order Activity is a dedicated log that is separate from the general Project Activity tab. It captures order-related changes only (package, service, and deliverable changes), whereas the general Project Activity tab captures broader project events.
-
The Order Activity section logs entries from the following sources and change types:
- Package added via proposal
- Package added manually
- Package group changed
- Hours of coverage changed (via Edit Service)
- Number of shooters changed (via Edit Service)
- Minimum number of photos changed (via Edit Service)
- New deliverables added
-
Entry Structure: Each Order Activity entry displays:
- User avatar (profile photo)
- User name
- Action description
- Event name (or project name, where applicable)
- Timestamp (e.g., "17 Dec 2024 · 1:10 PM")
-
Scope of Entries: The scope of each entry depends on the type of change:
Change Type
Description Format
Scope
Hours of coverage changed
"[User] updated hours of coverage (X → Y) for [Service] in '[Event Name]'"
Service + Event
Number of shooters changed
"[User] updated photographer count (X → Y) for [Service] in '[Event Name]'"
Service + Event
Minimum number of photos changed
"[User] updated minimum photos (X → Y) for [Service] in '[Event Name]'"
Service + Event
New deliverable added
"[User] added deliverable '[Name]' to '[Event Name]'"
Service + Event
Package group changed
"[User] changed package to '[Package Name]' for '[Project Name]'"
Project-wide
-
Service + Event Scope: For hours of coverage, number of shooters, minimum number of photos, and deliverable additions, a single entry is created that references both the service name and the event name in the description.
-
Project-wide Scope: For package group changes, a single entry is created that references the project name (since a package group change can impact multiple events and services across the project).
-
Order Total: Order total changes are not logged as separate Order Activity entries.
-
**Display Behavior:
**- By default, the Order Activity section displays the 5 most recent entries.
- If there are more than 5 entries, a "View More (+X Activity)" button is displayed, where X is the count of remaining entries beyond the 5 shown.
- The section is scrollable to view additional entries.
- Order Activity is view-only; entries cannot be clicked or interacted with.
-
Empty State: When no order activity exists for the event, the section can display an appropriate empty state (no entries logged yet).
4.10 Notification & Logging Logic
-
All changes made on the Info Tab are logged in the Project Details > Overview > Activity tab, including: event date changes, timezone changes, venue changes, contractor removals, contractor replacements, service agreement voiding, and a la carte item additions or removals.
-
Order-specific changes (package, service edits, deliverable additions) are additionally logged in the Order Activity section (see Section 4.9).
-
When a contractor is removed from an event (either manually or through the "Remove & Notify" action), the system sends both an email notification and an in-app notification to the removed contractor. The removal email content is adjusted to also inform the contractor that their signed service agreement (if any) has been voided for this event.
-
When a contractor is replaced, the system sends removal notifications to the outgoing contractor (including service agreement voiding information if applicable) and assignment notifications to the incoming contractor.
-
When the event venue is changed, the system sends email and in-app notifications to all currently assigned contractors informing them of the new venue.
-
When the event date is changed and saved, the system sends email and in-app notifications to all remaining assigned contractors informing them of the date change.
-
After a contractor is removed, the event is no longer visible on the removed contractor's Contractor Portal, and the contractor's availability is updated, making them available for other agencies on that date.
4.10 Impact on Other Modules
-
Dashboard > Unassigned Contractor List: When contractors are removed from an event (due to date change or manual removal), the event appears on the Dashboard > Unassigned Contractor List, indicating that the event has unfilled contractor positions that need to be assigned.
-
Events > Contractors Tab: Contractor removals, replacements, and availability status changes made from the Info Tab's Update Event modal are immediately reflected in the Events > Contractors Tab. Unavailable contractors are flagged in the Contractors Tab as well. If a contractor is removed and no replacement is assigned, the Unassigned contractor card appears on the Contractors Tab for the unfilled role.
-
Contractor Portal: Removed contractors no longer see the event on their Contractor Portal. Their availability is updated to reflect that they are no longer booked for that date, making them available for other agency assignments. Replacement contractors gain visibility of the event on their Contractor Portal immediately upon assignment.
-
Contract > Service Agreement: When a replacement contractor is assigned and saved, the system checks the "Automatically Send to Contractors" toggle for the relevant service agreement template. If enabled, the service agreement matching the contractor's assigned service type is automatically sent to the contractor for signing. Each event assignment requires its own service agreement; previously signed agreements from other events do not carry over.
-
Files/Documents Tab: When a contractor is removed from an event and has a signed service agreement for that event, the system automatically changes the agreement status from "Signed" to "Voided" in the Files/Documents tab. The voided agreement remains as a historical record and is not deleted.
-
Project Details > Overview > Activity Tab: All changes (date, venue, timezone, contractor assignments, service agreement voiding, a la carte modifications) are logged as activity entries, visible to all users who have access to the project.
-
Finance Module: Venue changes affect the distance calculation for contractor travel, which may require manual adjustment of travel fees by the agency owner. When a contractor is removed and has received advance payments, the financial data (Event Price, Amount Paid) remains as-is in the Finance Tab and Finance module with no automatic status change on the payment record. The advance payment must be settled offline or a refund must be requested.
-
Contractor Travel Fee Calculation: When the venue is changed, distance is automatically recalculated for existing contractors, but travel fee is NOT recalculated. New contractors assigned after the venue change will have their distance and travel fee calculated based on the new venue.
-
Events > Contractors Tab > Assign Contractor: The replacement flow initiated from the Info Tab's Update Event modal follows the same contractor assignment workflow documented in the Contractors Tab FRD, including the Suggested Contractors modal and event price assignment step.
-
Notification System: Date changes, venue changes, contractor removals/replacements, and service agreement voiding all trigger email and in-app notifications to affected contractors, impacting the notification queue and delivery system.
-
Raw Media Tab: In the unlikely event that a removed contractor had already uploaded deliverables (typically deliverables are uploaded after the event is completed), the uploaded files remain in the Raw Media tab attributed to the original (removed) contractor and are not reassigned to the replacement.
4.11 Payment Schedule Impact on Date Changes
4.11.1 Trigger Conditions
The Payment Schedule Impact pop-up is displayed only when ALL of the following conditions are met:
Condition
Description
Primary Event
The event being modified is the primary event of the project
Unpaid Payments
There are unpaid payment(s) on any invoice(s) linked to the project
Date Change Type
The date change falls into one of the three scenarios below
Note:
- If the event is NOT the primary event, OR if all payments across all invoices are already paid, the pop-up is NOT displayed and the date change saves normally.
- Invoices are linked to the project, not individual events. If multiple invoices exist with unpaid payments, all will be displayed in the pop-up.
4.11.2 Multiple Invoices Display
When invoices are linked to the project with unpaid payments, the pop-up displays each invoice separately.
Invoice Card Structure:
Element
Description
Invoice Number
Invoice reference (e.g., Invoice #INV-2024-0092)
Package Name
Name of the package (e.g., Videography Package)
Total Amount
Total invoice amount (e.g., $3,600.00)
Invoice Status
Partially Paid / Unpaid / etc.
Payment Table
Payment schedule table for this invoice
Display Behavior:
- Each invoice is displayed as a separate card with its own payment schedule table
- The pop-up is scrollable if there are multiple invoices or many payments
- All invoices with unpaid payments are shown regardless of count
4.11.3 Payment Schedule Table Display
Each invoice displays a payment schedule table showing all payments (paid and unpaid).
Table Columns:
Column
Description
Amount
Payment amount (e.g., $500.00)
Due Date
The due date for the payment (e.g., Jun 15, 2025)
Payment Date
Date when payment was made. Shows "—" for unpaid payments
Payment ID
Payment reference ID (e.g., #PAY-1147). Shows "—" for unpaid payments
Status
Paid / Unpaid / Overdue
Status Logic:
- Paid: Payment has been completed
- Unpaid: Payment due date is in the future (not yet due)
- Overdue: Payment due date has passed and payment is not made
Table Behavior:
- The table displays ALL payments (paid + unpaid) for full visibility
- Paid payments show the Payment Date, Payment ID, and "Paid" status
- Unpaid payments show "—" in Payment Date and Payment ID columns
4.11.4 Scenario 1: Future Date → Past Date
When the primary event date is changed from a future date to a past date and there are unpaid payments:
Behavior: Payment due dates remain as originally set (no recalculation). The future payment dates are retained until user updates the invoices.
Element
Content
Title
Payment Schedule Notice
Message
The event date has been changed to a past date. [X] invoice(s) are linked to this event with unpaid payments. The previously set future payment dates shown below will be retained until you update the invoices. Please go to the Finance Tab and edit an invoice to update its payment schedule.
Invoice Cards
Each invoice displayed with its payment schedule table
Primary Button
No Changes
Secondary Button
Update Invoice (single) / Update Invoices (multiple)
Example (Multiple Invoices):
Invoice #INV-2024-0091 | Photography Package | $6,000.00 | Partially Paid
Amount
Due Date
Payment Date
Payment ID
Status
$1,500.00
Aug 15, 2026
—
—
Unpaid
$1,500.00
Sep 12, 2026
—
—
Unpaid
$1,500.00
Oct 10, 2026
—
—
Unpaid
Invoice #INV-2024-0092 | Videography Package | $3,600.00 | Partially Paid
Amount
Due Date
Payment Date
Payment ID
Status
$1,200.00
Mar 10, 2026
Mar 9, 2026
#PAY-1150
Paid
4.11.5 Scenario 2: TBD → Past Date
When the primary event date is changed from TBD to a past date and there are unpaid payments:
Behavior: Payment due dates are calculated from the smart date configuration (e.g., "30 days before event") and the new past date.
Element
Content
Title
Payment Schedule Notice
Message
The event date has been changed from TBD to a past date. [X] invoice(s) are linked to this event with unpaid payments. The payment schedule dates will be updated based on the new event date as shown below. Please go to the Finance Tab and edit an invoice if you wish to modify its payment schedule.
Invoice Cards
Each invoice displayed with its calculated payment schedule table
Primary Button
No Changes
Secondary Button
Update Invoice (single) / Update Invoices (multiple)
Example (Single Invoice):
Invoice #INV-2024-0091 | Photography Package | $6,000.00 | Partially Paid
Amount
Due Date
Payment Date
Payment ID
Status
$500.00
Feb 10, 2026
Feb 9, 2026
#PAY-1147
Paid
$500.00
Mar 20, 2026
—
—
Overdue
$500.00
Apr 17, 2026
—
—
Overdue
$500.00
May 15, 2026
—
—
Unpaid
Smart Date Calculation:
- The system calculates actual dates based on the smart date configuration and the new event date
- Calculated dates are displayed in the Due Date column
- Dates that fall before today are marked as "Overdue"
4.11.6 Scenario 3: Future Date → TBD
When the primary event date is changed from a future date to TBD and there are unpaid payments:
Behavior: Original future payment dates are retained and displayed. User can choose to keep original dates or update to TBD.
Element
Content
Title
Payment Schedule Notice
Message
The event date has been changed to TBD. [X] invoice(s) are linked to this event with unpaid payments. The previously set future payment dates shown below will be retained until you keep them as TBD or update to a new date.
Invoice Cards
Each invoice displayed with its payment schedule table
Primary Button
No Changes
Secondary Button
Update to TBD
Note: This scenario does NOT include instructional text about going to Finance Tab.
Example (Single Invoice):
Invoice #INV-2024-0091 | Photography Package | $6,000.00 | Partially Paid
Amount
Due Date
Payment Date
Payment ID
Status
$500.00
Jun 15, 2025
Jun 14, 2025
#PAY-1147
Paid
$500.00
Jul 8, 2025
Jul 7, 2025
#PAY-1148
Paid
$500.00
Aug 1, 2025
—
—
Unpaid
4.11.7 Button Actions
Scenario
Button
Action
Future → Past
No Changes
Closes pop-up. Saves date change. Payment dates remain as original future dates.
Future → Past
Update Invoice / Update Invoices
Closes pop-up. Saves date change. Redirects to Finance Tab.
TBD → Past
No Changes
Closes pop-up. Saves date change. Calculated payment dates are applied.
TBD → Past
Update Invoice / Update Invoices
Closes pop-up. Saves date change. Redirects to Finance Tab.
Future → TBD
No Changes
Closes pop-up. Saves date change. Original payment dates are retained.
Future → TBD
Update to TBD
Closes pop-up. Saves date change. Payment dates are updated to TBD.
Button Label Logic:
- Single invoice: "Update Invoice"
- Multiple invoices: "Update Invoices"
4.11.8 Pop-up Display Timing & Flow
Flow Order:
- User changes date and clicks Save
- System validates the date change
- If contractors assigned AND date is future/past (not TBD) → Contractor Availability Modal displayed first (if any unavailable)
- User completes contractor availability actions (keep/remove/replace)
- If primary event AND unpaid payments exist → Payment Schedule Impact Pop-up displayed
- User clicks "No Changes" or "Update Invoice(s)" / "Update to TBD"
- Date change is saved
Notes:
- The Payment Schedule Impact pop-up is displayed AFTER the contractor availability modal (if applicable).
- If user cancels/discards on the contractor availability modal, the Payment Schedule Impact pop-up still appears as the next step.
- Contractor availability check is NOT performed when changing to TBD (only Payment Schedule pop-up appears if applicable).
- The pop-up is informational; clicking either button proceeds with saving the date change.
4.11.9 Activity Logging
- If the user clicks "Update Invoice" or "Update to TBD" and subsequently changes the payment schedule dates, the payment date changes are logged in the Activity Tab.
- The date change itself is logged regardless of whether the user updates the invoice or not.
5. Field Details & Validations
5.1 Event Info Fields
Field Name
Field Type
Required
Editable
Validation Rules
Event Name
Text (Display)
Yes
No (Read-only on Info Tab)
Displayed with color dot indicator fetched from Agency Settings.
Time Zone
Dropdown
Yes
Yes (Inline Edit)
Must be one of: EDT/EST, CDT/CST, MDT/MST, PDT/PST, MST, HST, AKDT/AKST. Default inherited from Agency Settings during event creation. Displays "TBD" when event date is TBD.
Start Date & Time (Multi-Day)
Date Picker + Time Picker
Yes (for multi-day events)
Yes (Inline Edit)
Date and time displayed per user's Date & Time Preferences (Settings > My Profile). Can be set to TBD. TBD option available in date picker. Cannot be empty if End Date is set.
End Date & Time (Multi-Day)
Date Picker + Time Picker
Yes (for multi-day events)
Yes (Inline Edit)
Date and time displayed per user's Date & Time Preferences (Settings > My Profile). Must be after the Start Date & Time. Cannot be the same as or earlier than the Start Date.
Event Date & Time (Single-Day)
Date Picker + Time Picker
Yes (for single-day events)
Yes (Inline Edit)
Date and time displayed per user's Date & Time Preferences (Settings > My Profile). Can be set to TBD. TBD option available in date picker. Time represents contractor arrival time; no end time is captured.
Primary Venue
Autocomplete Text Input (Google Maps API)
No
Yes (Inline Edit)
Google Places API autocomplete. Text-only display (no map preview). Displays "Venue not decided" when not set.
5.2 Order Info Fields
Field Name
Field Type
Required
Editable
Validation Rules
Package Name
Text (Display)
No
No (Read-only)
Populated from the client's package selection during proposal/booking.
Items Included for This Event
List (Display)
No
No (Read-only)
Displays individual deliverable items from the selected package.
A La Carte Items (Original)
Chips/Tags (Display)
No
No (Read-only)
Original a la carte items selected by the client. Cannot be removed.
A La Carte Items (Additional)
Chips/Tags (Editable)
No
Yes (Add/Remove)
Additional a la carte items added by the agency. Can be added or removed by the agency owner/admin.
Services
Grouped List (Display)
No
No (Read-only)
Services are displayed grouped by service type (e.g., Photography, Videography).
5.3 Order Activity Fields
Field Name
Field Type
Required
Editable
Validation Rules
User Avatar
Image (Display)
N/A
No
Profile photo of the user who made the change.
User Name
Text (Display)
N/A
No
Name of the user who made the change.
Action Description
Text (Display)
N/A
No
Description of the change, referencing service and event (or project) as applicable.
Event/Project Name
Text (Display)
N/A
No
Event name for service/event scope; project name for project-wide scope.
Timestamp
Text (Display)
N/A
No
Date and time of the change (e.g., "17 Dec 2024 · 1:10 PM").
View More Button
Button
N/A
Yes
"View More (+X Activity)" — shown only when more than 5 entries exist.
5.4 Update Event Modal Fields
Field Name
Field Type
Required
Editable
Validation Rules
Contractor Name
Text (Display)
N/A
No
Displays the name of the assigned contractor.
Role Badge
Badge (Display)
N/A
No
Displays the contractor's role (e.g., Lead Shooter, Second Shooter).
Profession
Text (Display)
N/A
No
Displays the contractor's profession/specialty.
Star Rating
Rating (Display)
N/A
No
Displays the contractor's rating (e.g., 5.0).
Availability Status
Status Badge (Display)
N/A
No
"Available" (green) or "Not Available" (red).
Event Price
Currency (Display)
N/A
No
Displays the contractor's event price (e.g., $1,200.00).
Amount Paid
Currency (Display)
N/A
No
Displays the amount already paid to the contractor (e.g., $800.00).
Distance to Location
Text (Display)
N/A
No
Displays distance in miles and location (e.g., "12m. to location — Boston, USA").
5.5 Suggested Contractors Modal Fields
Field Name
Field Type
Required
Editable
Validation Rules
Search Contractors
Text Input (Search)
No
Yes
Free-text search by contractor name.
Date Filter
Filter Chip
Auto-applied
No
Pre-filtered to the new event date.
Role Filter
Filter Chip
Auto-applied
No
Pre-filtered to the role of the contractor being replaced.
Service Area Filter
Filter Chip
Auto-applied
No
Pre-filtered to the event's service area.
Contractor Name
Text (Display)
N/A
No
Displays name with profile photo and profession.
Rate
Currency (Display)
N/A
No
Displays the contractor's hourly pay rate (e.g., $100/h).
Fee
Currency (Display)
N/A
No
Travel fee calculated based on venue and contractor's home address.
Service Area
Text (Display)
N/A
No
Displays contractor's service area with distance in miles to event location.
Rating
Star Rating (Display)
N/A
No
Displays the contractor's rating (e.g., 4.5).
Actions
Button ("Select")
N/A
Yes
Clicking "Select" initiates the replacement and moves to event price assignment.
5.6 Unassigned Contractor Card (Post-Removal State in Update Event Modal & Contractors Tab)
Field Name
Field Type
Required
Editable
Validation Rules
Role Badge
Badge (Display)
N/A
No
Displays the role of the removed contractor (e.g., "Lead Shooter") with the role icon at the top-left of the card.
Placeholder Avatar
Icon (Display)
N/A
No
A purple circle with a "?" icon, replacing the removed contractor's profile photo.
Unassigned Label
Text (Display)
N/A
No
Displays the text "Unassigned" below the placeholder avatar.
Assign [Role] Button
Button
N/A
Yes
Displays "Assign [Role]" (e.g., "Assign Lead Shooter"). Clicking this button opens the Suggested Contractors modal pre-filtered for the specific role.
5.7 Discard Changes Confirmation Popup
Field Name
Field Type
Required
Editable
Validation Rules
Confirmation Message
Text (Display)
N/A
No
"The event date change will be reverted to the original date, and all contractor changes will be discarded. Are you sure you want to discard?"
Yes, Discard Button
Button (Primary)
N/A
Yes
Confirms the discard action. Reverts all changes and closes the modal.
Go Back Button
Button (Secondary)
N/A
Yes
Cancels the discard action. Returns the user to the Update Event modal.
5.8 Payment Schedule Impact Pop-up Fields
Field Name
Field Type
Required
Editable
Validation Rules
Title
Text (Display)
N/A
No
"Payment Schedule Notice" - consistent across all three scenarios.
Message
Text (Display)
N/A
No
Dynamic message based on date change scenario. Includes "[X] invoice(s)" count (highlighted).
Invoice Cards
Card Container
N/A
No
Each invoice displayed as a separate card with its payment schedule table. Scrollable.
No Changes Button
Button (Primary)
N/A
Yes
Closes the pop-up. Saves the date change. Payment schedule behavior varies by scenario.
Update Invoice Button
Button (Secondary)
N/A
Yes
For single invoice: "Update Invoice". Redirects to Finance Tab.
Update Invoices Button
Button (Secondary)
N/A
Yes
For multiple invoices: "Update Invoices". Redirects to Finance Tab.
Update to TBD Button
Button (Secondary)
N/A
Yes
For Future → TBD only: Updates payment dates to TBD.
5.9 Invoice Card Fields
Field Name
Field Type
Required
Editable
Validation Rules
Invoice Number
Text (Display)
N/A
No
Invoice reference (e.g., "Invoice #INV-2024-0092").
Package Name
Text (Display)
N/A
No
Name of the package associated with the invoice (e.g., "Videography Package").
Total Amount
Currency (Display)
N/A
No
Total invoice amount (e.g., "$3,600.00").
Invoice Status
Status Badge
N/A
No
Invoice payment status (e.g., "Partially Paid", "Unpaid").
Payment Schedule Table
Table (Display)
N/A
No
Payment schedule table for this specific invoice.
5.10 Payment Schedule Table Fields
Field Name
Field Type
Required
Editable
Validation Rules
Amount
Currency (Display)
N/A
No
Payment amount formatted with currency symbol (e.g., $500.00).
Due Date
Date (Display)
N/A
No
Payment due date formatted per user's Date & Time Preferences. Shows calculated date for TBD → Past scenario.
Payment Date
Date (Display)
N/A
No
Date when payment was made. Shows "—" for unpaid payments.
Payment ID
Text (Display)
N/A
No
Payment reference ID (e.g., #PAY-1147). Shows "—" for unpaid payments.
Status
Status Badge
N/A
No
"Paid" for completed payments. "Unpaid" for payments with future due dates. "Overdue" for payments with past due dates that are not paid.
6. Success Message Handling
Action
Success Message
Trigger Condition
Post-Success Action
Save Event Info (No Date Change, No Venue Change)
"Event information updated successfully."
User saves event info changes that do not involve a date or venue change (e.g., timezone only).
Info Tab returns to read-only mode with updated values.
Save Event Date (TBD to Actual Date)
"Event date assigned successfully."
User changes event date from TBD to an actual date for the first time. No contractors are assigned (since TBD blocks assignment).
Info Tab returns to read-only mode with the new date and timezone displayed. Activity log updated.
Save and Notify (All Contractors Available)
"Event date updated successfully. Contractors have been notified."
User changes the event date, all assigned contractors are available on the new date, and user clicks "Save and Notify Contractors."
Update Event modal closes. Info Tab shows updated data. All contractors receive email and in-app notifications. Activity log updated.
Save Venue Change (Contractors Assigned)
"Event venue updated successfully. Contractors have been notified."
User changes only the venue and saves. Contractors are assigned to the event.
Info Tab returns to read-only mode. Distance recalculated for existing contractors. Email and in-app notifications sent to assigned contractors.
Save Venue Change (No Contractors)
"Event venue updated successfully."
User changes only the venue and saves. No contractors are assigned to the event.
Info Tab returns to read-only mode with updated venue.
Save and Notify Contractors (Date Change)
"Event date updated successfully. Contractors have been notified."
User resolves all unavailable contractors and clicks "Save and Notify Contractors."
Update Event modal closes. Info Tab shows updated data. Notifications sent. Activity log updated.
Remove & Notify (Warning Popup)
"Event date updated. Unavailable contractors have been removed and notified."
User clicks "Remove & Notify" in the secondary warning popup to auto-remove remaining unavailable contractors.
Modal closes. Contractors removed. Event appears on Dashboard > Unassigned Contractor List. Notifications sent.
Add A La Carte Item
"A la carte item added successfully."
User adds an additional a la carte item via the Order Info edit and saves.
Order Info section updates with the new item displayed as a chip/tag. Activity log updated.
Remove A La Carte Item (Additional)
"A la carte item removed successfully."
User removes an agency-added a la carte item via the Order Info edit and saves.
Order Info section updates without the removed item. Activity log updated.
Replace Contractor
"Contractor replaced successfully."
User selects a replacement contractor from the Suggested Contractors modal and completes the event price assignment.
Update Event modal updates with the new contractor displayed in place of the removed one.
Discard Changes Confirmed
No toast message (silent action).
User clicks "Yes, Discard" on the Discard Changes confirmation popup.
Update Event modal closes. Event date reverts to original. All contractor changes discarded. Info Tab returns to read-only mode with original data.
Save Date Change (Past Date - No Changes)
"Event date updated successfully."
User changes primary event date to past date, Payment Schedule Impact pop-up appears, user clicks "No Changes."
Pop-up closes. Info Tab returns to read-only mode with updated date. Payment schedule remains unchanged. Activity log updated.
Save Date Change (Past Date - Update Invoice)
"Event date updated successfully."
User changes primary event date to past date, Payment Schedule Impact pop-up appears, user clicks "Update Invoice."
Pop-up closes. User is redirected to Finance Tab → Invoice. Activity log updated.
Save Date Change (TBD to Past - No Changes)
"Event date updated successfully."
User changes primary event date from TBD to past date, Payment Schedule Impact pop-up appears, user clicks "No Changes."
Pop-up closes. Info Tab returns to read-only mode with updated date. Calculated payment dates are applied. Activity log updated.
Save Date Change (TBD to Past - Update Invoice)
"Event date updated successfully."
User changes primary event date from TBD to past date, Payment Schedule Impact pop-up appears, user clicks "Update Invoice."
Pop-up closes. User is redirected to Finance Tab → Invoice. Activity log updated.
Save Date Change (Future to TBD - No Changes)
"Event date updated successfully."
User changes primary event date to TBD, Payment Schedule Impact pop-up appears, user clicks "No Changes."
Pop-up closes. Info Tab returns to read-only mode with TBD. Original payment dates retained. Activity log updated.
Save Date Change (Future to TBD - Update to TBD)
"Event date updated successfully."
User changes primary event date to TBD, Payment Schedule Impact pop-up appears, user clicks "Update to TBD."
Pop-up closes. Info Tab returns to read-only mode with TBD. Payment dates updated to TBD. Activity log updated.
7. Error Message Handling
Error Scenario
Error Message
Trigger Condition
Required User Action / System Response
End Date Before Start Date
"End date and time cannot be earlier than or the same as the start date and time."
User sets the end date/time to a date/time that is before or equal to the start date/time for a multi-day event.
User must correct the end date/time to be after the start date/time.
Empty Date Field (Multi-Day)
"Both start date and end date are required for multi-day events."
User clears one date field while the other remains set for a multi-day event.
User must provide both start and end dates, or set both to TBD.
Invalid Venue Input
"Please select a valid venue from the suggestions."
User types a venue address that does not match any Google Maps API suggestion and attempts to save.
User must select a valid venue from the autocomplete suggestions.
Google Maps API Failure
"Unable to load venue suggestions. Please check your internet connection and try again."
Google Maps API fails to return results due to network or API issues.
System displays the error. User can retry or enter the venue later.
No Contractors Available for Replacement
"No contractors available for the selected date, role, and service area. Please adjust your filters or try a different date."
User clicks "Replace" but no contractors match the filter criteria in the Suggested Contractors modal.
User can adjust filters, search manually, or go back and remove the contractor instead.
Save Without Resolving Unavailable Contractors
"Some contractors are still unavailable. Please remove or replace them, or click 'Remove & Notify' to proceed."
User clicks "Save and Notify Contractors" while unavailable contractors remain unresolved in the Update Event modal.
Secondary warning popup is displayed with "Remove & Notify" and "Go Back" options.
Advance Payment Warning on Removal
Message varies based on payment status: Unpaid shows standard removal message; Processing shows processing amount; Paid shows paid amount; Mixed (Paid + Processing) shows only paid amount. Payment count shown only for Multiple Paid or Multiple Processing scenarios.
User attempts to remove a contractor who has payments in any status.
User can proceed with removal (acknowledging offline settlement) or cancel the removal.
Data Load Failure
"Unable to load event information. Please refresh the page and try again."
System fails to fetch event info data from the server.
User refreshes the page. System retries data fetch.
Session Timeout During Edit
"Your session has expired. Please log in again to continue editing."
User's session expires while in inline edit mode.
User is redirected to the login page. Unsaved changes are lost.
Duplicate A La Carte Item
"This a la carte item has already been added to this event."
User attempts to add an a la carte item that already exists for this event (either original or additional).
System prevents the duplicate addition and displays the error message.
Network Failure During Save
"Unable to save changes. Please check your internet connection and try again."
Network connectivity is lost while saving event info, order info, or contractor changes.
No changes are committed. The current edit state is preserved for retry.
8. Edge Cases
#
Scenario
Expected Behavior
1
User changes event date and no contractors are assigned to the event.
The system saves the date change directly without showing the Update Event modal and displays a success toast message.
2
User changes event date and ALL assigned contractors are available on the new date.
The Update Event modal is displayed showing all contractors with "Available" status. The banner text reads: "All contractors are available on the new event date. Click 'Save and Notify' to update and inform all contractors." All Remove/Replace buttons are disabled. User clicks "Save and Notify Contractors" to proceed, and all contractors are notified of the date change.
3
User changes event date and ALL assigned contractors are unavailable on the new date.
The Update Event modal is displayed showing all contractors with "Not Available" status. All Remove/Replace buttons are active. User must remove or replace all contractors, or use "Remove & Notify."
4
User changes venue and date simultaneously in a single inline edit session.
The system prioritizes the date change flow: the Update Event contractor availability modal is triggered based on the date change. The venue change is saved simultaneously. Distance is recalculated based on the new venue. Contractors receive notifications about both changes.
5
User clicks "Discard Changes" in the Update Event modal after replacing some contractors.
The system displays a confirmation popup. If the user confirms ("Yes, Discard"), the system reverts the entire date change back to the original date, discards all contractor replacements made during this session, and returns to the Info Tab with original data. If the user clicks "Go Back," they remain on the Update Event modal.
6
User removes a contractor with payments (Paid, Processing, or Mixed).
The system displays the Remove Contractor confirmation dialog with message based on payment status: Paid shows paid amount, Processing shows processing amount, Mixed (Paid + Processing) shows only paid amount. Payment count shown only for Multiple Paid or Multiple Processing. Removal is not blocked. If the user confirms, the contractor is removed and the event appears on the Unassigned Contractor List. The payment record remains as-is in the Finance module with no status change. Any payment discrepancies must be handled internally between the parties.
7
Event date is TBD and user tries to assign contractors (from Contractors Tab).
Contractor assignment is blocked when the event date is TBD. This is enforced in the Contractors Tab, not the Info Tab. The Info Tab simply displays "TBD."
8
User changes venue but Google Maps API is unavailable or returns an error.
The system displays the error message: "Unable to load venue suggestions. Please check your internet connection and try again." The venue field retains the original value.
9
User changes event from multi-day to single-day by setting start and end date to the same day.
The system prevents this by enforcing the validation that end date cannot be the same as start date. If the event needs to be converted to single-day, it should be done during the event edit flow outside of the Info Tab.
10
Multiple users edit the same event's Info Tab simultaneously.
The last save wins. The second user to save may overwrite the first user's changes. The system does not currently support real-time conflict detection. Both changes are logged in the activity log.
11
User changes primary event date from future to past with unpaid payments.
The Payment Schedule Impact pop-up is displayed with payment schedule table showing all payments. Original payment dates remain unchanged. User can click "No Changes" to proceed or "Update Invoice" to go to Finance Tab.
12
User changes primary event date from TBD to past with unpaid payments.
The Payment Schedule Impact pop-up is displayed with calculated payment dates based on smart date configuration. Past due payments show "Overdue" status. User can click "No Changes" to apply calculated dates or "Update Invoice" to edit manually.
13
User changes primary event date from future to TBD with unpaid payments.
The Payment Schedule Impact pop-up is displayed with original payment dates shown in table. User can click "No Changes" to keep original dates or "Update to TBD" to set payment dates to TBD.
14
User changes non-primary event date to past with unpaid payments.
No Payment Schedule Impact pop-up is displayed. Date change saves normally. Payment schedule is not affected by non-primary event date changes.
15
User changes primary event date with all payments already paid.
No Payment Schedule Impact pop-up is displayed. Date change saves normally. Paid payments are not affected by event date changes.
16
User clicks "Update Invoice" on Payment Schedule Impact pop-up.
The pop-up closes, date change is saved, and user is redirected to Finance Tab → Invoice for editing payment schedule.
17
User clicks "No Changes" on Payment Schedule Impact pop-up.
The pop-up closes, date change is saved, and payment schedule behavior varies by scenario (retained for Future→Past, calculated for TBD→Past, retained for Future→TBD).
18
User clicks "Update to TBD" on Payment Schedule Impact pop-up (Future → TBD).
The pop-up closes, date change is saved, and payment dates are updated to TBD state.
19
User changes primary event date from actual date back to TBD.
TBD option is now available in date picker. If unpaid payments exist, Payment Schedule Impact pop-up is displayed with "No Changes" and "Update to TBD" buttons. Contractor availability check is NOT performed for TBD dates.
20
User changes event date to past date with assigned contractors.
Contractor availability check is NOT performed for past dates. Date change saves directly. If primary event and unpaid payments, Payment Schedule Impact pop-up is displayed.
21
Invoice has many payments (6+ installments).
The payment schedule table in the pop-up is scrollable. All payments are displayed regardless of count.
22
TBD → Past: All calculated payment dates are in the past.
All unpaid payments show "Overdue" status in the table. User is informed they need to update payment dates manually if they proceed with "No Changes".
(Additional edge cases continue in the full document)
9. Acceptance Criteria
-
The Info Tab displays Event Info and Order Info sections in read-only mode by default upon navigation.
-
The Event Name is displayed with the correct color dot indicator fetched from Agency Settings.
-
Multi-day events display separate "Start Date & Time" and "End Date & Time" fields, and single-day events display a single "Event Date & Time" field.
-
TBD events display "TBD" in the date and timezone fields, and "Venue not decided" is shown when no venue is set.
-
The Time Zone dropdown is populated with the correct timezone options (EDT/EST, CDT/CST, MDT/MST, PDT/PST, MST, HST, AKDT/AKST).
-
Clicking "Edit" on Event Info converts fields to inline editable inputs with "Save" and "Cancel" buttons.
-
The Primary Venue field provides Google Maps API autocomplete suggestions during inline editing.
-
Changing the event date with assigned contractors triggers the Update Event modal with accurate contractor availability status.
-
Available contractors in the Update Event modal have disabled "Remove Contractor" and "Replace" buttons.
-
Unavailable contractors in the Update Event modal have active "Remove Contractor" and "Replace" buttons.
-
The Update Event modal displays payment information (Event Price, Amount Paid, Distance) for each contractor.
-
Clicking "Replace" opens the Suggested Contractors modal pre-filtered by the new date, role, and service area.
-
The Suggested Contractors modal displays contractor name, rate, travel fee, service area, rating, and "Select" action.
-
Clicking "Discard Changes" displays a confirmation popup asking the user to confirm the discard action before reverting.
-
Confirming "Yes, Discard" on the popup reverts the date back to the original, discards all contractor changes, and closes the modal.
-
Clicking "Go Back" on the discard confirmation popup returns the user to the Update Event modal without discarding anything.
-
"Save and Notify Contractors" sends email and in-app notifications to all affected contractors.
-
Clicking "Save and Notify" with unresolved unavailable contractors shows the secondary warning popup with "Remove & Notify" option.
-
Removed contractors are unassigned from the event, and the contractor card in the Update Event modal is replaced with the Unassigned state card.
-
Clicking the "Assign [Role]" button on the Unassigned card opens the Suggested Contractors modal pre-filtered for that specific role.
-
The event appears on the Dashboard > Unassigned Contractor List when contractors are removed.
-
Remove Contractor dialog displays appropriate confirmation message based on payment status (Unpaid, Processing, Paid, or Mixed). For Mixed status (Paid + Processing), shows only the paid amount. Payment count is shown only for Multiple Paid or Multiple Processing scenarios.
-
Venue changes recalculate distance for existing contractors but do NOT recalculate travel fees.
-
Venue changes trigger email and in-app notifications to all assigned contractors.
-
New contractors assigned after a venue change have distance and travel fee calculated based on the new venue.
-
Users can change an event date back to TBD. The TBD option is available in the date picker for events that already have an actual date assigned.
-
Changing the primary event date from future to past with unpaid payments displays the Payment Schedule Impact pop-up with payment schedule table.
-
Changing the primary event date from TBD to past with unpaid payments displays the Payment Schedule Impact pop-up with calculated payment dates and Overdue status for past due payments.
-
Changing the primary event date from future to TBD with unpaid payments displays the Payment Schedule Impact pop-up with original payment dates.
-
The Payment Schedule Impact pop-up displays a table with columns: Amount, Due Date, Status.
-
The Payment Schedule Impact pop-up message includes "X out of Y payments are unpaid" count.
-
The payment schedule table shows ALL payments (paid and unpaid) for full visibility.
-
The payment schedule table is scrollable if there are many payments.
-
For Future → Past scenario, payment dates remain as original future dates when "No Changes" is clicked.
-
For TBD → Past scenario, payment dates are calculated from smart date configuration and displayed with Overdue status for past due dates.
-
For Future → TBD scenario, buttons are "No Changes" and "Update to TBD" (not "Update Invoice").
-
Clicking "No Changes" closes the pop-up and saves the date change with payment schedule behavior varying by scenario.
-
Clicking "Update Invoice" closes the pop-up, saves the date change, and redirects to Finance Tab → Invoice.
-
Clicking "Update to TBD" closes the pop-up, saves the date change, and updates payment dates to TBD.
-
The Payment Schedule Impact pop-up is NOT displayed for non-primary events.
-
The Payment Schedule Impact pop-up is NOT displayed when all invoice payments are already paid.
-
Changing the event date to a past date does NOT trigger the contractor availability check modal.
-
Changing the event date to TBD does NOT trigger the contractor availability check modal.
-
Payment date changes made via "Update Invoice" or "Update to TBD" are logged in the Activity Tab.
(Additional acceptance criteria continue in the full document)
10. Manual Test Cases
Test Cases File: Click Here
11. Dependencies
#
Dependency Type
Dependency
Description
Behavior if Unavailable
1
Internal Module
Project Details > Overview > Activity Tab
All changes on the Info Tab are logged as activity entries in the Activity Tab.
Changes are saved but activity log entries may not appear until the Activity Tab service is restored.
2
Internal Module
Events > Contractors Tab
Contractor assignments, removals, and replacements initiated from the Info Tab are reflected in the Contractors Tab. Unassigned cards appear for unfilled roles.
Contractor changes may not be reflected in the Contractors Tab until the module is synced.
3
Internal Module
Dashboard > Unassigned Contractor List
Events with removed contractors appear on the Unassigned Contractor List.
The event may not appear on the Unassigned list until the Dashboard syncs.
4
Internal Module
Contractor Portal
Removed contractors' portal is updated to remove the event and update availability. Replacement contractors' portal is updated to show the event.
Portal update may be delayed; contractor may temporarily still see the event.
5
Internal Module
Agency Settings
Event color dot indicator and default timezone are fetched from Agency Settings.
Default values may not load; system should use fallback defaults.
6
Internal Module
Finance Module
Advance payment data (Event Price, Amount Paid) is fetched from the Finance Module for display in the Update Event modal. When contractors are removed, financial records persist as-is with no automatic status change.
Payment data may not display; the system should show "N/A" and still allow the removal flow.
6a
Internal Module
Finance Tab > Invoice
The "Update Invoice" button on the Payment Schedule Impact pop-up redirects the user to the Finance Tab → Invoice for editing payment schedule dates. Invoice payment status (unpaid/paid) is checked to determine if pop-up should display.
If Finance Tab is unavailable, the "Update Invoice" button may fail to redirect. User can manually navigate to Finance Tab later.
7
Internal Module
Packages / Proposals Module
Order Info (Package Name, Items Included, A La Carte Items) is sourced from the client's proposal/booking selections.
Order Info section shows the empty state message if data is unavailable.
8
Internal Module
Events > Contractors Tab > Assign Contractor
The replacement flow uses the same Assign Contractor workflow, including Suggested Contractors modal and event price assignment step.
Replacement flow may fail; user can remove the contractor instead and assign a new one later from the Contractors Tab.
9
External Service
Google Maps API (Google Places API)
Used for venue autocomplete search during inline editing of the Primary Venue field.
Error message is displayed. User cannot update the venue until the API is available.
10
External Service
Notification Service (Email)
Sends email notifications to contractors when events are changed, and contractors are removed or replaced. Removal email content includes service agreement voiding information.
Notifications are queued and retried. Changes are saved regardless of notification delivery status.
11
External Service
Notification Service (In-App)
Sends in-app notifications to contractors for event changes, removals, and replacements.
In-app notifications may be delayed; changes are saved regardless.
12
Configuration
Contractor Availability Data
Contractor scheduling data (other project assignments, DNB dates) is required for the availability check during date changes.
Availability check may return inaccurate results; system should err on the side of showing contractors as potentially unavailable.
13
Configuration
A La Carte Items Master List
The list of available a la carte items for adding to an event is sourced from the system's master catalog.
User cannot add new a la carte items if the catalog is unavailable.
14
Internal Module
Settings > My Profile > Date & Time Preferences
All date and time values on the Info Tab are displayed according to the user's selected date format, time format, and optional day-of-week inclusion.
If preferences are unavailable, the system should fall back to a default format (e.g., MM/DD/YYYY, 12-hour AM/PM).
15
Internal Module
Contract > Service Agreement
When a replacement contractor is assigned and saved, the system checks the "Automatically Send to Contractors" toggle for the relevant service agreement template. If enabled, the service agreement is automatically sent to the contractor for signing. Each event requires a new agreement.
If the service agreement template is unavailable or not configured, the auto-send is skipped silently. The agency owner can manually send it later from the Files/Documents tab.
16
Internal Module
Files/Documents Tab
When a contractor is removed, any signed service agreement for that event is automatically changed to "Voided" status. The voided agreement remains as a historical record.
If the Files/Documents module is unavailable, the voiding may be delayed. The removal proceeds regardless.
12. References
Figma Link - [Click Here]
✅ Notes
Functional Requirements Document (FRD) - Agency Notes Module
1. Module Overview
- Module Name: Notes Management
- Purpose: Enable users to create public and private notes with the CRUD operations- view, edit, and delete notes associated with a project and its events
- Business Goal: Improve project communication and documentation by providing a centralized note-taking system with role-based visibility controls
2. User Roles & Permissions
Role
Key Permissions
Contractor
Limited access:
- Visibility to the Public notes shared by the agency users
- Create public notes: accessible to agency and team members only
- Edit and delete self-created public notes
- Create, edit, and delete private notes
Client
Limited access:
- Visibility to the Public notes shared by the agency users
- Create public notes only for the agency and the team members
- Edit and delete self-created public notes
- Can not create a private note
3. User Flow
Agency Portal
3.1 Empty State
3.2 Create Notes From Overview
3.3 Create Notes From Event
3.4 Contractor Portal User Flow
3.5 Client Portal User Flow
4. Field Details & Validations
4.1 Create New Note
Field Name
Required
Validation Rules
Choose Event
Yes
Events created within the project will be shown
Choose Visibility
Yes
Private Note or Public Note
User Access Checkboxes
Conditional
When a public note radio button is selected, three checkboxes (Clients, Contractors, and Team Members) are displayed, and at least one must be selected
Headline
Yes
No character limit
Note Content
No
Standard rich text formatting feature - Undo, Redo, Heading, Bold, Italic, Underline, Emoji, Link, Bullet, and Number list
Image Upload
No
On click, upload images - Opens a pop-up with two options:
Library: Select from the existing CRM library images
Upload: Upload from local system with supported formats: valid image format (i.e., .jpg, .jpeg, .png, .webp, .svg) with a max 15 MB per file. System uploads automatically save to the CRM library and are inserted into the note
Cancel
No
Closes pop-up without saving changes
Create Note
No
- If validation fails, display the relevant error message
- If no validation errors occur, save the new note and close the pop-up
4.2 Note Pop-Up View
Field Name
Display Rules
Note Title
Shows note headline as the main title
Public/Private
Display "Public Note" if the note is public, and "Private Note" if the note is private
Cancel (X)
On click, close the pop-up and return to the notes section
Project
Display the project name (e.g., "Jadon & Monika Wedding")
Event
Display the event name with its color badge
Visible To
Private Notes: Shows creator avatar ("You")
Public Notes: Shows first 3 user avatars, then "+X" for additional users. On hover displays categorized user list: Clients, Contractors, Team Members (based on selected checkboxes)
Created On
- Shows "CREATED ON" label with date and time
- Format: "Month DD, YYYY HH:MM" (e.g., "July 19, 2024 12:33")
Created By
Shows "CREATED BY" label with the user avatar and name of the user who created the note
Edited On
- Shows "EDITED ON" label with last modification date and time (only displays if note is edited at least once)
- Format: "Month DD, YYYY HH:MM" (e.g., "July 19, 2024 12:33")
Note Content
Full note content with rich text formatting and any embedded media
Delete
- Note: Delete and Edit buttons are visible only to the user who created the note
On click Delete: Shows "Delete Note" confirmation dialog before permanent removal
Edit Button
On click Edit: Opens the edit note pop-up with pre-populated data
5. Success Message Handling
Validation Scenario
Success Message
Note created successfully
"Note has been created successfully."
Note updated successfully
"Note has been updated successfully."
Note deleted successfully
"Note has been deleted successfully."
6. Error Message Handling
Field
Validation Scenario
Error Message
Choose Event
Not selected
"Please select an event."
Choose Visibility
Not selected
"Please select the visibility option."
User Access Checkboxes
At least one user type must be selected for a public note
"Please select an option."
Headline
Empty submission
"Please enter a headline."
Note
Empty submission
"Please enter note content."
General
Save/Update/Delete error
"Something went wrong."
7. Functional Logic
General Display
- Placement: Notes appear in Private or Public sections under both Event and Overview tabs (based on visibility).
- Card Structure: Each note card shows: Event title, Kebab menu (if applicable), Headline (truncated), Content preview (truncated; only images → “Click here to preview”), User avatars, Creation timestamp
- Ordering: Newest first; recently edited notes move to the top.
- Pagination: 4 initially, then “Show More (+X notes)” in groups of 10.
- Search: Works across all notes (both Private and Public) by title and note content. Matching notes are filtered and displayed
- Sort: Can be applied as Newest or Oldest; the note list is rearranged accordingly based on the newest or oldest created notes
Visibility & Avatars
-
Private Notes: Only the creator sees them. Show creator’s avatar.
-
Public Notes: Seen by selected audience. Show up to 3 avatars + “+X” indicator. Hover → categorized audience list.
Cross-Portal Display (Public Notes only)
-
Contractor checkbox → Contractor Portal
-
Client checkbox → Client Portal
-
Team Members checkbox → Team Member Portal
Create Note
-
Agency user and client can create the note from the Overview and the Events Tab, and the contractor can create it from the Events Tab
-
Event Context:
-
Agency Users & Clients creating a note from the Overview tab: Event selectable.
-
Contractors Creating Note From Event Tab: Event always fixed (pre-selected, read-only).
-
Agency Users & Clients Creating Note From Event tab: Event will be fixed (read-only)
-
-
Empty State: If no notes exist, show the “Create Note” button.
-
After Notes Exist: Show two CTAs:
-
Public +: On click, Public pre-selected, Private disabled
-
Private +: On click, Private pre-selected, Public disabled
-
Role Rules
-
Agency Users can create Private or Public notes, and Public notes require selecting at least one audience (Clients, Contractors, Team Members)
-
Contractors can create Private or Public notes, where Public notes are automatically visible to the Agency (no audience selection), Private notes are visible only to the creator, and the event is always fixed.
-
Clients can create Public notes only, and Public notes are visible to Agency + Client
Edit Note
- Agency Users, Clients, and Contractors can edit the note from the Kebab Menu > edit option and View Note > Edit Button
- Access: Only the note creator can edit, and the field will be pre-filled in the pop-up
Editable Fields
-
Agency Users: Events, Headline, Content, Visibility (Private/Public), Audience checkboxes (for Public only)
-
Contractors: Event (always fixed, not editable), Headline, Content, Visibility (Private/Public), No audience checkboxes (Public notes always go to Agency)
-
Clients: Event assignment (except fixed in the event tab), Headline, Content, (Visibility always Public, no checkboxes)
Visibility Changes
- For Agency users, when a note is changed from Private to Public, they must select one or more audiences, and when a note is changed from Public to Private, it is hidden from all users and moved into the creator’s Private Notes.
- For Contractors, when a note is changed from Private to Public, it automatically becomes visible to the Agency without requiring any audience selection, and when a note is changed from Public to Private, it is hidden from the Agency and moved back into the contractor’s Private Notes.
- For Clients, visibility never changes because their notes are always Public.
- On Save: Note updates, moves if needed, and success toast shown
Delete Note
-
Access: Only the note creator can delete a note from the kebab menu > Delete option and View Note > Delete Button
-
**Results:
**-
Public Note → removed everywhere (all tabs + portals).
-
Private Note → removed only for the creator.
-
-
On Delete: Success toast shown
8. Edge Cases
Scenario
Expected Behavior
The search returns no results
Display a "No notes found" message
The agency is deleting the note when another user is viewing it
On the API call, it will not be displayed
Agency viewing note, while the note created by the contractor and team member gets deleted
On the API call, it will not be displayed
Note opened in multiple tabs in the same browser, but gets deleted
It will display, but after a refresh or API call, it will not be displayed
9. Test Cases
- Link: Pixally Test cases
10. Acceptance Criteria
- Users can create notes from all entry points (event tabs, overview tabs, side menu).
- The event field is pre-selected in the event-specific context and editable in the overview context
- Public notes require audience selection (Clients, Contractors, Team Members)
- Private notes are visible only to the creator
- Notes appear immediately in the correct section (Private/Public)
- Clicking a note opens a detailed pop-up view
- Public notes appear in Contractor, Client, and Team Member portals based on checkbox selections.
- Only creators can edit or delete notes through the kebab menu
- Edit pop-up pre-populates existing data and supports event reassignment.
- The delete action requires confirmation before removal, and on confirmation, the notes will be deleted from the respective section, Private or public, from all the portals
- Success toasts display after create, update, or delete actions
11. Dependencies
Module/System
Dependency Type
Impact if Unavailable
Events Management
Data dependency
Cannot create event-specific notes
User Management
Authentication dependency
Cannot determine user permissions
Rich Text Editor Component
UI dependency
Cannot format note content
Notification System
Integration dependency
Users won't receive note-creation alerts
CRM Library Module
Integration dependency
Cannot select from existing images or save uploaded images to the library
12. References
- Figma Design Link:
- Preview: Click Here
- Create Note: Click Here
- Notes section: Click Here
✅ Meetings tab
Functional Requirements Document (FRD) - Meetings Tab
1. Module Overview
- Module Name: Project Details > Meetings Tab
- Purpose: Enable integration between the Pixally CRM and Calendly to allow agency users to connect their Calendly accounts and facilitate meeting scheduling with clients through Calendly functionality
- Business Goal: Streamline the meeting scheduling process by leveraging Calendly's scheduling capabilities while maintaining project-based visibility and role-based access controls within the Pixally CRM ecosystem
2. User Roles & Permissions
Role
Description
Key Permissions
Agency Owner
System owner with full access
Connect/disconnect Calendly, schedule meetings if Calendly is integrated, and view all meetings across all projects of the agency
Agency Admin
System administrator
Connect/disconnect Calendly, schedule meetings if Calendly is integrated, and view all meetings across all projects of the agency
Project Manager
Team leader for specific projects
Users can connect or disconnect Calendly, schedule meetings only if Calendly is integrated, and view meetings only in projects they are members of — where they are the host, a participant, or when a client has scheduled a meeting with the Project Manager
3. User Flow
From Project Details:
Agency Portal Meeting Scheduling Flow
4. Functional Logic
4.1 Project Details Meeting Tab Visibility Rules
- If Calendly is Not Integrated by anyone in the agency, the meeting tab will display the Connect Calendly button.
Agency members cannot schedule meetings with clients through Pixally CRM
- After successful Calendly integration, the agency user can schedule meetings. Refer - Click Here
- All (Past and upcoming) meetings scheduled by any project participant or the client are displayed in the meeting section (Agency/Client portal)
- The user who is scheduling the meeting will be displayed as the organiser
- Once the meeting is scheduled, the table will display the field details: Refer- Click Here
4.2 Meeting Mode Display Logic
- Action buttons vary based on the meeting mode configured by the organizer during scheduling
- Video Call: CTA - "Join Meeting" (video icon) →On click, opens meeting link (Google / Zoom) in new tab
- Phone Call: CTA - "View Call Details" (phone icon) →On click, opens phone details pop-up. Refer - Click Here
- In-Person: CTA - "In Person" (location icon) → On click, opens location details pop-up. Refer - Click Here
- No Info: CTA - "Meeting Info" → On click, opens general info pop-up. Refer - Click Here
4.3 Disconnect Functionality Impact in Project Details
- After Calendly is disconnected successfully, on click, the "+ New Meeting" button shows a pop-up: "To schedule a meeting, please integrate Calendly first," with the "Connect Calendly" button
- All existing scheduled meetings remain visible in Pixally CRM, but any updates made outside in Calendly will not be synced in Pixally
5. Field Details & Validations
5.1 Calendly Not Integrated - Meetings Tab (Project details/Client Profile)
Field Name
Type
Validation Rules
Heading
Text
"To schedule a meeting, Integrate Calendly first."
Connect Calendly
Button
On click, it opens the Calendly integration pop-up
5.2 Meeting List Table Fields (Project details)
Field Name
Type
Validation Rules
Sort
Dropdown
- Default: "Latest", Options: "Latest", "Oldest"
- "Latest" shows the nearest upcoming meetings first, while "Oldest" shows the farthest meetings first
Date & Time
DateTime
Display in viewer's local timezone, format: "Aug 2, 2024 08:30 AM - 9:30 AM"
Meeting Title
Text
From the Calendly event type
Meeting Description
Text
Below title, truncated with ellipses if it exceeds the width
Participants
Avatar
Display the profile of the organizer and meeting participants
Action
Button
Refer - Click Here
5.3 Phone Call Details pop-up, Refer - Click Here
5.4 In-Person Meeting Details pop-up, Refer - Click Here
5.5 General Meeting Info Pop-Up, Refer - Click Here
6. Success Message Handling
Validation Scenario
Success Message
Calendly connected successfully
"Calendly account has been connected successfully."
Meeting scheduled successfully
"Meeting has been scheduled successfully."
7. Error Message Handling
Field
Validation Scenario
Error Message
General
Calendly service unavailable
"Something went wrong."
8. Edge Cases
- Refer - Click Here
9. Test Cases
- Link:
10. Acceptance Criteria
- Visibility & Access: If Calendly isn’t integrated, show “Connect Calendly” and disable scheduling; after integration, “+ New Meeting” allows scheduling; all past/upcoming meetings by any participant or the client appear in Agency/Client portals; scheduler appears as Organizer; table shows defined meeting fields.
- Mode CTAs:
- Video Call → “Join Meeting” opens Google/Zoom link in a new tab.
- Phone Call → “View Call Details” opens phone info pop-up.
- In-Person → “In Person” opens the location details pop-up.
- No Info → “Meeting Info” opens general info pop-up.
- After Disconnect: “+ New Meeting” shows a prompt to integrate Calendly (with a button); existing meetings remain visible in Pixally, but changes made in Calendly no longer sync back.
11. Dependencies
- Refer - Click Here
12. References
- Figma Design Link: Click Here
Post-Production Tab
Functional Requirements Document (FRD) - Post-Production Tab (Project Details)
1. Module Overview
- Module Name: Post-Production Tab (Project Details)
- Purpose: The Post-Production Tab within Project Details provides agencies with a project-specific view of all post-production jobs (deliverables) associated with the project's events. It displays deliverables organized by event (e.g., Reherseal Dinner, Wedding), showing their current workflow status, assigned editors, due dates, and delivery links. This tab serves as a quick-access point for monitoring editing progress without leaving the project context, while linking directly to the main Post-Production Board for detailed management.
- Business Goal: Enable agency users to quickly view and track post-production deliverable status within the project context, provide organized visibility of jobs grouped by event, allow quick identification of deliverable progress through color-coded status badges, facilitate easy access to delivery links for completed items, and maintain seamless navigation to the full Post-Production Board for comprehensive workflow management.
2. User Roles & Permissions
3. User Flow
4. Functional Logic
4.1 Post-Production Tab – Access and Empty States
- The Post-Production Tab within Project Details displays all post-production jobs (deliverables) associated with the specific project's events.
- It remains accessible to all authorized users (Agency Owner, Admin, Project Owner) who have access to the project.
- The tab displays deliverables organized by event, showing workflow status, editor assignments, due dates, and delivery links.
- The system determines the Empty State or Populated State dynamically based on the existence of deliverables linked to the project's events and their completion status.
4.1.1 Initial State — No Post-Production Jobs Found
When the project exists with events configured, but no post-production jobs (deliverables) have been generated or added yet.
Triggered When:
- No deliverables have been manually added to the Post-Production Board for this project
- Events have deliverables configured in client packages but the event date is still in the future
Display Behavior:
- The Post-Production Tab loads with an empty state layout
- A centered empty state message is displayed with an illustration/icon matching Pixally's design style
- Primary message: "No post-production jobs found"
- Secondary message: "Post-production jobs will appear here automatically once the event is completed. You can also create jobs manually from the Post-Production Board."
- The "View more details on the Post Production board" banner remains visible at the top for navigation
4.1.2 Job Intake & Creation
- Click Here - for are more details on the job automation and manual creation flow & logic
4.2 Post-Production Tab Layout and Job Listing
The Post-Production Tab displays all deliverables associated with the project's events in an organized, easy-to-scan format with quick access to the main Post-Production Board.
4.2.1 Navigation Banner
A persistent navigation banner appears at the top of the Post-Production Tab, providing quick access to the full Post-Production module.
- The banner is placed at the top of the tab content area, directly underneath the tab navigation bar.
- The banner will always remain visible, no matter what the tab currently shows — whether the tab has no data (empty state) or is fully populated.
- The banner will display a message: “View more details on the Post Production board.”
- A link/redirect icon will be positioned on the right side to indicate that clicking will take the user to the post-production Board.
- Clicking on the icon will navigate the user to the Operations → Post-Production module.
- The banner will remain displayed at all times to ensure users always have a clear shortcut to the main Post-Production board.
- It provides a consistent and easy navigation path from the current screen to the full Post-Production Board.
- When opened, the Post-Production module will load with the context of the current project (when applicable), allowing users to continue working seamlessly.
- From the main Post-Production board, users can access additional tools such as advanced filters, detailed views, and bulk actions that are not available within the current tab.
4.2.2 Job Listing Structure
Deliverables within the Post-Production Tab are organized by event, providing a clear hierarchical view that allows users to quickly identify which jobs belong to which event within the project.
This structure mirrors how projects are naturally organized—by individual events such as Rehearsal Dinner, Wedding, Engagement Shoot—making it intuitive for users to locate and track specific deliverables.
- Each event within the project appears as a distinct collapsible section, creating visual separation between different event groupings and allowing users to focus on specific events as needed.
- A colored dot appears before each event name (e.g., "● Rehearsal Dinner", "● Wedding")
- The dot color is fetched from the Brand Settings, where each event type can have a designated color
- Event Name Display:
- The full event name displays prominently as the section header
- Event names are fetched from the project's event configuration
- Examples include: "Rehearsal Dinner", "Wedding", "Engagement Photoshoot", "Reception"
- Sections are always in expanded state when the tab loads, showing all deliverables immediately
- Events are listed in chronological order based on their event dates
- Earlier events appear at the top of the list, later events below
- Example: A project with events on December 19 (Rehearsal Dinner) and December 20 (Wedding) would show Rehearsal Dinner first
- All deliverables associated with a specific event are grouped together under that event's section
- Users can see at a glance all the post-production work required for each event
- Each deliverable row displays independently within its parent event section
- Projects with multiple events display each event as a separate, distinct section
- Clear visual separation between sections using spacing and headers
- For projects with only one event, a single event section displays
- The structure remains consistent even with a single event for visual and functional consistency
4.2.3 Deliverable Row Display
Each deliverable (post-production job) appears as its own row within the corresponding event section. The goal is to provide all essential job details at a glance while keeping the layout clean and easy to scan.
-
Row Layout
- Each deliverable is displayed inside a white background card-style container to visually separate it from other rows.
- All deliverable information (name, editor, due date) is aligned to the left for readability.
- The status badge and supporting actions are positioned on the right side, ensuring a consistent and intuitive layout structure.
-
Deliverable Name
- This is the primary label shown for the job, displaying the specific deliverable type (e.g., "Instagram Video", "Highlight Film", "Photo Set").
- The name is pulled automatically from either the client’s selected package or manually created jobs.
- Once the job enters the post-production board, it will appear here as well.
- It is shown prominently as the main identifier for the deliverable row.
-
Editor Assignment
- Displays a label "EDITOR:" followed by the assigned editor’s details.
- Shows the editor’s avatar as a small circular image and their initials (e.g., "JD" for John Doe).
- If no editor has been assigned yet, the system will show "Unassigned" or a placeholder indicator.
- Users would have to navigate to the post-board to assign the editor.
- All editor information is pulled directly from the Team Management Module.
-
Due Date
- Displays the label "DUE DATE:" followed by the specific due date for the job.
- The date is formatted based on the agency’s global date format settings (e.g., “OCT 9” or “Oct 9, 2025”).
- The due date appears in secondary/gray text to differentiate it from the deliverable name.
- Due dates are calculated based on the event date associated with the project.
- During the package set up, the duration (e.g., “10 Days” or “2 Weeks”) is added after the event date to calculate the due date.
-
Status Badge
- A clearly color-coded badge appears on the right side of the row to show the job’s current workflow stage.
- Status options include the following stages and their corresponding badge colors: Post-event Processing, Processing Complete, Assigned to Editor, In Progress, Edit Complete, Revision Needed, Ready for Client, Delivered
- Any status change made on the Post-production board will reflect on the project detail tab as well.
- Each status stages appears with a unique color code.
-
Chat Icon
- A small message/chat icon appears on the far right end of the row.
- Clicking the icon opens a communication drawer or modal dedicated to that specific deliverable’s conversation.
- This allows internal team members, editors, and other collaborators to discuss details or share updates directly related to that job.
- For more detailed information on Chat feature - Click Here
4.2.4 Delivery Link Display
When a deliverable reaches the “Delivered” stage, an additional row appears beneath the main deliverable details to showcase the final delivery link. This section provides quick access for the team to review or share delivered content.
-
Link Display
- The delivery link row is shown only when the deliverable’s status is set to Delivered.
- A small link/chain icon appears at the start of the row to visually indicate that the content is a URL.
- The full delivery URL is displayed (e.g., “https://www.dropbox.com/marketplace/templates/pluma/?ref=…”).
- If the link is very long, it may be truncated with an ellipsis to maintain a clean layout while still showing enough of the URL for recognition.
-
Copy Functionality
- A copy icon appears at the far right side of the link row.
- Clicking this icon instantly copies the delivery URL to the user’s clipboard.
- This allows users to quickly share the delivery link with clients, team members, or editors.
- A small toast message may appear confirming the action, such as “Link copied to clipboard.”
-
Link Behavior
- Clicking the URL itself opens the delivery link in a new browser tab.
- The link is fully clickable and interactive, enabling quick previews of the final delivered content.
- The same URL is also displayed in the Client Portal, ensuring clients access the identical delivery link provided internally.
4.2.5 Row Interaction Behavior
- The Post-Production Tab offers a simplified, view-only version of each deliverable. Key fields—such as status badges and editor assignments—are display-only, with all edits and workflow updates handled in the main Post-Production Board.
- Interactive elements remain limited but purposeful:
- The chat icon opens the job-specific communication thread.
- Delivery link opens in a new tab.
- The copy icon copies the URL to the clipboard.
- For complete job management, users can navigate through the top banner to the full Post-Production Board, where advanced actions, edits, and workflow controls are available.
4.2.6 Data Synchronization
- All data displayed in Post-Production Tab is synchronized with main Post-Production module
- Status changes made in Post-Production Board reflect immediately in this tab
- Editor assignments reflect and updates
- Delivery links appear when added in main module
- Deliverable information fetched from the Post-Production module.
4.3 Impacted Modules
The Post-Production Tab within Project Details interacts with multiple modules across the Pixally CRM ecosystem. This section defines how the tab synchronizes data, displays information, and responds to updates from connected modules, ensuring real-time accuracy and seamless workflow integration.
4.3.1 Post-Production Module
- The Post-Production Tab serves as a filtered, project-specific view of the main Post-Production module.
- Data Source:
- All deliverable information displayed in the tab is fetched from the Post-Production module
- Job details include: Deliverable name, Editor assignment, Due date, Status, Delivery links
- Data filtered to show only jobs associated with the current project
- Real-Time Synchronization:
- Status changes made in Post-Production Board reflect immediately in this tab
- Editor assignments update in real-time
- Delivery links appear when added in main module
- New jobs created in Post-Production Board appear instantly in the tab
- Navigation Integration:
- "View more details on the Post Production board" banner links directly to main module
- Opens Post-Production module with context of current project
- Provides access to advanced features not available in tab view (filters, bulk actions, detailed editing)
- Impact if Unavailable:
- Deliverable rows do not populate in the tab
- Status badges unavailable
- Editor assignments not displayed
- Delivery links missing
- Empty state shown regardless of actual job existence
4.3.2 Projects & Events Module
- The Post-Production Tab is accessed through Project Details, making it directly dependent on the Projects & Events module.
- Project Context:
- Tab displays within Project Details interface
- Project information determines which deliverables are shown
- Project-event relationships define job groupings
- Event Organization:
- Deliverables organized by event within the project
- Event names fetched from project event configuration
- Events listed in chronological order by event date
- Event color indicators pulled from event settings
- Job Generation Trigger:
- Deliverables auto-generate the day after event completion
- Event date determines when jobs appear in Post-Production Tab
- Client package deliverables linked to specific events
- Impact if Unavailable:
- Tab cannot load without project context
- Event sections do not display
- Deliverable-event associations lost
- Chronological ordering fails
4.3.3 Brand Management Module
- Brand settings provide visual styling and configuration data for the Post-Production Tab.
- Event Color Coding:
- Colored dot indicators preceding event names are fetched from Brand Settings
- Each event type has designated color configured at brand level
- Provides visual consistency across the platform
- Impact if Unavailable:
- Event color indicators default to neutral color or missing
- Due date calculations may fail or use default values
- Visual identification inconsistent
4.3.4 Packages Module
- Client package configurations determine which deliverables are generated for each event.
- Deliverable Configuration:
- Deliverable types (e.g., "Instagram Video", "Highlight Film") defined in client packages
- Package selection during project setup determines auto-generated jobs
- Deliverable names pulled from package configuration
- Due Date Calculation Logic:
- Due dates are automatically calculated based on the event date associated with the project.
- The calculation uses duration settings configured during client package setup.
- During client package setup, agencies define the delivery timeline for each deliverable type.
- Duration options include predefined values such as:
- "10 Days after event"
- "2 Weeks after event"
- "30 Days after event"
- Custom duration (number of days/weeks/months)
- Example: "Instagram Video" may have a 7-day turnaround, while "Full Wedding Film" may have 30 days.
- Auto-Generation Logic:
- System generates post-production jobs based on package deliverables
- Jobs created automatically day after event date
- Each package deliverable creates corresponding job
- Impact if Unavailable:
- Deliverable names may show as generic or missing
- Auto-generation of jobs fails
- Manual job creation required for all deliverables
- Due date calculations fail
4.3.5 Team Management Module
- Editor information and user data are sourced from Team Management.
- Editor Assignment Display:
- Editor avatars fetched from user profiles in Team Management
- Editor names and initials displayed from user data
- "Unassigned" shown when no editor linked to job
- User Permissions:
- Access to Post-Production Tab determined by user roles
- Agency Owner, Admin, Project Owner permissions verified
- Project Owner access limited to assigned projects
- Impact if Unavailable:
- Editor avatars show placeholder images
- Editor names/initials unavailable
- User permission verification fails
- Unauthorized access possible
4.3.6 Settings Module (General Settings)
- Agency-wide settings affect data display formatting in the Post-Production Tab.
- Date Format Settings:
- Due dates formatted according to agency date settings
- Examples: "OCT 9", "Oct 9, 2025", "9 Oct 2025"
- Consistent formatting across all date displays
- Timezone Settings:
- Event dates and due dates adjusted to user timezone
- Ensures accurate date display for global teams
- Impact if Unavailable:
- Date format defaults to system standard
- Timezone adjustments not applied
- Inconsistent date displays possible
4.3.7 Client Portal Module
- Delivery links displayed in the tab are also visible to clients through the Client Portal.
- Link Consistency:
- Same delivery URL shown in both Post-Production Tab and Client Portal
- Ensures clients access identical content as internal team
- Maintains single source of truth for deliveries
- Delivery Visibility:
- When job marked "Delivered", link becomes accessible to clients
- Client Portal displays delivery in organized format
- Download/view access provided to clients
- Impact if Unavailable:
- Delivery links still functional in Post-Production Tab
- Client access to deliveries affected
- Link sharing to clients may fail
4.3.8 Notifications Module
- Status changes and updates in the Post-Production Tab may trigger notifications.
- Status Change Alerts:
- When deliverable status changes, relevant parties notified
- Editor notifications for new assignments
- Project Owner notifications for completed deliveries
- Chat Notifications:
- @mentions in job chat threads trigger notifications
- In-app and email notification options
- Deep links to specific deliverable conversations
- Impact if Unavailable:
- Status change notifications not sent
- Team members unaware of updates
- Manual communication required for status changes
4.3.9 Activity Tab (Project Details)
- Post-production activities may be logged in the Project Details Activity Tab.
- Activity Logging:
- Job status changes logged with timestamps
- Delivery completions recorded
- Editor assignments tracked
- Audit Trail:
- Provides history of post-production workflow
- Timestamps and user attribution for all actions
- Compliance and accountability tracking
- Impact if Unavailable:
- Post-production activities not logged
- Audit trail incomplete
- Historical tracking unavailable
5. Field Details & Validations
5.1 Event Section Fields
Field Name
Type
Validation Rules
Event Section Header
Collapsible Container
Contains event color indicator and event name; Click to collapse/expand section; Expanded by default on tab load
Event Color Indicator
Visual Marker
Colored dot preceding event name (e.g., "●"); Color fetched from Brand Settings for event type; Provides visual identification and consistency
Event Name
Text Display
Displays event title (e.g., "Reherseal Dinner", "Wedding"); Fetched from project event configuration; Click toggles section collapse/expand
5.2 Deliverable Row Fields
Field Name
Type
Validation Rules
Deliverable Row Container
Card Container
White background container for each deliverable; Contains all job information in horizontal layout; Individual row for each post-production job
Deliverable Name
Text Display
Primary text showing deliverable type (e.g., "Instagram Video"); Fetched from client package configuration or manual job creation; Left-aligned, prominent display
Editor Label
Text Label
Format: "EDITOR:" in uppercase; Gray/secondary text color; Precedes editor information
Editor Avatar
Circular Image
Small circular avatar image of assigned editor; Displays editor's profile picture; Shows placeholder if no image uploaded
Editor Initials
Text Display
Editor's initials displayed (e.g., "JD"); Shown alongside or within avatar; Displays "Unassigned" if no editor assigned
Due Date Label
Text Label
Format: "DUE DATE:" in uppercase; Gray/secondary text color; Precedes date value
Due Date Value
Date Display
Format follows agency date settings (e.g., "OCT 9"); Calculated from brand-defined SLA rules; Gray/secondary text color
Status Badge
Status Badge
Color-coded badge indicating workflow stage; Right-aligned within row; Values: Post-event Processing (gray), Processing Complete (blue), Assigned to Editor (purple), In Progress (yellow), Edit Complete (green), Revision Needed (orange), Ready for Client (teal), Delivered (green)
Chat Icon
Icon Button
Message/chat icon; Positioned on far right of row; Opens job-specific communication thread; Allows team collaboration on specific deliverable
5.3 Delivery Link Fields (Delivered Status Only)
Field Name
Type
Validation Rules
Delivery Link Container
Secondary Row
Appears below main deliverable row; Only visible for jobs with "Delivered" status; Contains link icon, URL, and copy icon
Link Icon
Icon
Chain/link symbol; Precedes delivery URL; Indicates clickable link content
Delivery URL
Hyperlink Text
Displays full or truncated delivery URL (e.g., "https://www.dropbox.com/marketplace/templates/pluma/?ref=land-book.co..."); Clickable, opens in new tab; Truncated with ellipsis if exceeds display width
Copy Icon
Icon Button
Copy/clipboard icon; Positioned at end of link row; Clicking copies URL to clipboard; Provides quick sharing functionality
6. Edge Cases
Scenario
Expected Behavior
Events exist but event dates are in the future
Empty state displayed: "Post-production jobs will appear here automatically once the event is completed."; Jobs will auto-generate day after each event date; Navigation link to Post-Production Board provided for manual job creation
Event completed but no deliverables in client package
No jobs auto-generated for that event; Event section does not appear in tab; User can manually create jobs from Post-Production Board if needed
Multiple events with same date
Events displayed as separate sections in alphabetical order by event name; Each event shows its own deliverables; Color indicators distinguish between events
Editor assigned in Post-Production Board
Editor avatar and initials update immediately in Post-Production Tab; Real-time synchronization ensures current assignment displayed
Editor unassigned or removed from job
Post-Production Tab displays "Unassigned" or placeholder indicator; Updates immediately when change made in main module
Editor removed from Team Management after assignment
Editor field shows "Editor Unavailable" or previous name with warning; Job remains in current status; Reassignment required in Post-Production Board
Status changed in Post-Production Board
Status badge in Post-Production Tab updates immediately; Color coding changes to reflect new workflow stage; No page refresh required
Job reaches "Delivered" status
Delivery link row appears below main deliverable row; Link icon, URL, and copy icon displayed; Link clickable to open in new tab
Delivery link added but very long URL
URL truncated with ellipsis to maintain clean layout; Full URL copied when copy icon clicked; Clicking URL opens complete link in new tab
Delivery link not yet added for "Delivered" job
Delivery link container may show empty or placeholder; Link appears when added in Post-Production Board; Status remains "Delivered"
Copy icon clicked for delivery link
URL copied to clipboard; Toast notification appears: "Link copied to clipboard"; User can paste link immediately
Chat icon clicked on deliverable row
Job-specific communication drawer/modal opens; Shows conversation thread for that deliverable; Allows team collaboration and messaging
Event color not configured in Brand Settings
Event color indicator defaults to neutral/gray color; Event name still displays correctly; Visual identification less distinct
Due date not calculated (missing package duration)
Due date field may show "—" or default to event date; Manual due date entry required in Post-Production Board; SLA timeline not automatically applied
Post-Production module unavailable
Tab shows error state or loading indicator; Message: "Unable to load post-production data. Please try again."; Navigation banner may still be visible
Network disconnection while viewing tab
Existing data remains visible but may become stale; Error message on refresh: "Connection lost. Please check your internet connection."; Real-time updates paused
Project with 20+ deliverables across multiple events
All deliverables displayed in scrollable list; Each event section shows all its deliverables; Performance optimized for large lists
Event section header clicked
Section collapses or expands; Collapsed state hides all deliverables under that event; Expanded state shows all deliverables; Toggle behavior preserved during session
All event sections collapsed
Only event headers visible with color indicators; Tab content area shows minimal view; User can expand any section individually
Deliverable deleted in Post-Production Board
Deliverable row removed from Post-Production Tab immediately; Event section updates to show remaining deliverables; If last deliverable deleted, event section may hide or show empty state
Event deleted from project after jobs generated
Jobs remain in Post-Production Board but orphaned from project context; Post-Production Tab may not display these jobs; Historical records preserved in main module
Brand deleted while viewing project
Event colors may revert to default; Due date calculations use fallback values; Job data remains intact
User timezone different from event timezone
Dates display in user's configured timezone; Due dates adjusted accordingly; Consistent display across all date fields
7. Test Cases
- Link - Click Here
8. Acceptance Criteria
- Access & Default View: Post-Production Tab is accessible from Project Details tab navigation alongside Activity, Files/Documents, Meetings, Finances, Notes; accessible to Agency Owner, Admin, and Project Owner based on project permissions; displays deliverables organized by event; system determines empty or populated state dynamically.
- Navigation Banner: Persistent banner at top of tab displays "View more details on the Post Production board" with redirect icon; always visible regardless of content state (empty or populated); clicking navigates to Operations → Post-Production module; opens with project context when applicable.
- Empty State – No Jobs Found: When no deliverables exist, centered empty state with illustration displays; primary message: "No post-production jobs found"; secondary message explains jobs appear after event completion or can be created manually; navigation link to Post-Production Board provided.
- Auto-Generation Logic: Deliverables attached to events auto-generate in Post-Production Tab the day after event date; jobs inherit metadata from project, event, and client package; due dates calculated from event date plus package duration settings; status defaults to "Post-event Processing".
- Event Section Organization: Events displayed as collapsible sections with colored dot indicator and event name; color fetched from Brand Settings; events listed in chronological order by event date; sections expanded by default; click header to collapse/expand.
- Single Event Display: Projects with single event show one event section; structure remains consistent with multi-event projects; all deliverables grouped under single header.
- Multiple Event Display: Each event appears as a separate distinct section; clear visual separation between sections; chronological ordering maintained (earlier events at top).
- Deliverable Row Layout: Each deliverable displayed in white card container; left-aligned: deliverable name, editor info, due date; right-aligned: status badge, chat icon; individual row for each post-production job.
- Deliverable Name Display: Primary text shows deliverable type (e.g., "Instagram Video"); fetched from client package or manual job creation; left-aligned, prominent display; serves as main row identifier.
- Editor Assignment Display: Label "EDITOR:" in uppercase gray text; editor avatar as small circular image; editor initials displayed (e.g., "JD"); shows "Unassigned" if no editor assigned; editor data fetched from Team Management.
- Due Date Display: Label "DUE DATE:" in uppercase gray text; date formatted per agency settings (e.g., "OCT 9"); calculated from event date plus package duration; secondary/gray text color; read-only in this tab.
- Due Date Calculation: Duration configured during package setup (e.g., "10 Days", "2 Weeks"); added to event date to calculate due date; each deliverable type can have unique duration; manual override possible in Post-Production Board.
- Status Badge Display: Color-coded badge on right side of row; statuses: Post-event Processing (gray), Processing Complete (blue), Assigned to Editor (purple), In Progress (yellow), Edit Complete (green), Revision Needed (orange), Ready for Client (teal), Delivered (green).
- Status Synchronization: Status changes in Post-Production Board reflect immediately in tab; real-time updates without page refresh; color coding updates automatically.
- Chat Icon Functionality: Message icon on far right of row; clicking opens job-specific communication thread; allows team collaboration on specific deliverable; drawer or modal interface.
- Delivery Link Display: Link row appears only for "Delivered" status jobs; link icon precedes URL; full or truncated URL displayed; copy icon at end of row.
- Delivery Link Behavior: Clicking URL opens in new tab; copy icon copies URL to clipboard; toast notification confirms "Link copied to clipboard"; same link visible in Client Portal.
- Copy Functionality: Copy icon provides quick URL sharing; instant clipboard copy; visual feedback confirms action; enables easy link sharing with clients and team.
- View-Only Interface: Most fields display-only (status, editor, due date); detailed editing in main Post-Production Board; interactive elements: chat icon, delivery link, copy icon, event collapse/expand.
- Row Interaction: Chat icon opens communication thread; delivery link clickable to new tab; copy icon copies to clipboard; event header click toggles collapse/expand; navigation banner click redirects to main module.
- Data Synchronization: All data synchronized with Post-Production module in real-time; status changes, editor assignments, delivery links update immediately; no manual refresh required.
- Pre-Event Display: Before event completion, empty state shows: "No Raw Media Available Yet" with explanatory subtext; jobs appear automatically day after event date.
- Post-Event Contractor Display: After event completion, contractors displayed by role, name, avatar, and specialization; information fetched from contractor profiles and assignments.
- Post-Event No Submission Display: Contractors with no submitted deliverables show: "Nothing Here - This contractor has yet to provide RAW Media"; clear indication of pending submissions.
- Delivery Method Display: All three delivery methods (Digital, Hard Drive, Other) displayed when submitted by contractor; each method shows relevant details.
- Digital Delivery Functionality: URLs must be clickable and open in new tab; individual copy icons for each URL; full or truncated display with complete URL copied.
- Hard Drive Information: Tracking number displayed; shipping service name shown; shipping address displayed correctly; all information as entered by contractor.
- Custom Text Preservation: "Other" delivery method text displayed exactly as entered by contractor; no modification or formatting changes; preserves original submission.
- Profile Integration: Contractor name and avatar clickable; opens contractor profile view; provides quick access to contractor details.
- Permission Enforcement: Agency Owner and Admin have full access; Project Owner limited to assigned projects; unauthorized access shows permission error.
- Event Color Coding: Colored dot indicator fetched from Brand Settings; provides visual identification; defaults to neutral color if not configured.
- Responsive Performance: Tab loads quickly with optimized data fetching; handles projects with many deliverables efficiently; scrollable list for large content.
- Error Handling: Network errors show appropriate messages; retry options provided; graceful degradation when modules are unavailable.
9. Dependencies
Module/System
Dependency Type
Impact if Unavailable
Post-Production Module
Data dependency
Deliverable rows do not populate in the tab, status badges unavailable, editor assignments not displayed, delivery links missing, chat functionality non-functional, empty state shown regardless of actual job existence
Projects & Events Module
Data dependency
Tab cannot load without project context, event sections do not display, deliverable-event associations lost, chronological ordering fails, event names and dates unavailable
Brand Management Module
Configuration dependency
Event color indicators default to neutral/gray color, due date SLA calculations fail or use default values, visual identification inconsistent across events
Client Packages Module
Data dependency
Deliverable names show as generic or missing, auto-generation of jobs fails, manual job creation required for all deliverables, due date calculations fail or default to event date, duration settings unavailable
Team Management Module
Data dependency
Editor avatars show placeholder images, editor names/initials unavailable, user permission verification fails, "Unassigned" displayed for all jobs regardless of actual assignment
Settings Module (General Settings)
Configuration dependency
Date format defaults to system standard, timezone adjustments not applied, inconsistent date displays across due dates and event dates
Chat/Communication Module
Feature dependency
Chat icon non-functional or hidden, job-specific communication unavailable, team collaboration hindered, users must use alternative communication methods
Client Portal Module
Integration dependency
Delivery link synchronization with client view fails, clients may not see delivered content, link consistency between internal and external views lost
Notifications Module
Feature dependency
Status change notifications not sent, team members unaware of updates, editor assignment alerts fail, manual communication required for workflow changes
10 References:
- Figma Link - Click Here
Right side menu
✅ Venue feature for the leads
Venue feature for the leads
Functional Requirement Document
BA & Ideation: Dakshraj Jhala
Reviewed By: KG (Project Manager)
Updated Date: 28 July 2025
Status: Approved
Version 1.0
Functional Requirements Document (FRD) - Venue Feature For The Leads
1. Module Overview
- Module Name: Venue feature for the Leads
- Purpose: Enable agency users to explore projects by the venue, specifically to assist with client marketing and pitching during the lead stage of an event by displaying relevant post-production deliverables from previous work at the same venue
- Business Goal: Improve lead conversion rates by providing agencies with quick access to showcase their previous work at specific venues, enhancing client pitching capabilities, and demonstrating venue-specific expertise during the lead engagement phase
2. User Roles & Permissions
Role
Description
Key Permissions
All Agency Users
All agency users (i.e., agency owner, team members)
Full access to view project deliverables, event dates, venue selection, and feature functionality
3. User Flow
Critical Path: Venue Selection and Project Display for Lead Stage Events
- Navigate to Feature Location: Users navigate to Project Details > Specific Event > Events Tab > Side Panel OR Event Overview tab (side panel)
- Feature Visibility Check: System verifies that any event of the project is in "Lead" stage - venue for the leads feature only displays if the condition is met
- Lead Form Venue Pre-selection: If the event was created via Lead Form with a specified venue, the system checks for any projects (past, current, or future) at that venue using fuzzy matching
- Auto-selection or Placeholder: The System pre-selects a venue if any projects exist at the current event venue; otherwise, it displays a "Select a venue" placeholder
- Manual Venue Selection: User searches/selects from a dropdown of venues with any projects, and displays project information with deliverables or event dates
- Display Project Names: System shows a list of all projects (past, current, future) for that venue, event count (Number of events the agency has at the venue), project names as section headers, displays deliverable links with hyperlinks, and copy buttons for projects where deliverables are available, and the event date for projects where no deliverables are found
- Scroll Through Projects: User vertically scrolls through multiple projects if available
- Access Deliverables: User clicks links to view or copies to the clipboard for client showcasing and pitching
4. Field Details & Validations
Field Name
Type
Required
Validation Rules
Venue Name
Searchable Dropdown with "Venue Name" label
No
Must be selected from venues where the agency has any projects (past, current, or future)
Event Count Display
Number
N/A
Shows (Number of events the agency has at the venue)
Project Name Headers
Section Headers
N/A
Displays project names as section headers for each project
Post-production Deliverable Links
Hyperlinks with Copy Buttons
N/A
- Each link must have both a hyperlink to open the URL and a copy-to-clipboard button (only for projects where post-production deliverables are found)
- Display link in a stack view
Project Date Display
Text Display
N/A
Shows the event date for past, current, or future projects (where post-production deliverables are not found)
Info Tooltip
Static Text
N/A
On hover display message: “If the venue entered on the lead form matches one from your past, current, or future project venues, it will show up here. If it does not fetch properly, you can type in the venue and find it from your list of venues.”
5. Success Scenario Handling
Validation Scenario
Success Scenario Handling
Venue auto-selected from lead form match
The venue appears pre-selected in the dropdown, with all projects (past, current, future) displayed
Manual venue selection was successful
Display event count (Number of total events (including past, present, and future) the agency has at the venue), displays deliverable links where deliverables are available, and the event date for projects where no deliverables are found
Link copied to clipboard
"Link copied to clipboard"
All projects are loaded with scroll
All projects (past, current, future) at the selected venue are displayed in a vertically scrollable section, ordered by most recent first
6. Error Message Handling
Field
Validation Scenario
Error Message
Venue Dropdown
Search returns no results
"No venues found matching your search."
Copy Functionality
Copy to clipboard failed
"Failed to copy link."
General
System error
"Something went wrong."
7. Functional Logic
Core Business Rules:
- Multi-Event Project Logic:
- If the project contains multiple events and at least one event is in the "Lead" stage, the venue for the leads feature appears in the side panel of each Lead stage event, and the overview tab
- If event status changes from Lead to Booked, the venue feature disappears from that event's side panel, but remains for other events with the lead stage and the overview tab
- If all events in the project move to the Booked stage, the venue feature is hidden entirely from both event views and the overview tab
- Venue Dropdown Population: Dropdown lists all venues where the agency has any projects (past, current, or future)
- Lead Form Pre-selection Logic:
- If the project > event is created via Lead Form with venue specified, and the agency has any projects (past, current, future) at the same venue, the dropdown pre-selects that venue
- If the project > event is created via Lead Form with venue specified, BUT the agency has no projects at that venue, or the project is created manually and no venue (TBD) is assigned for the project, the dropdown displays "Select a venue" placeholder
- When a venue is added manually to the event, the venue dropdown for that particular event will be pre-selected if the agency has any projects at the same venue.
- Fuzzy Matching: The System compares lead form venue names against existing venues using fuzzy matching (e.g., "Grand Hotel" vs "The Grand Hotel")
- The venue feature is independent of any brand and displays venues at the agency level, not tied to any specific brand. For example, if the agency has two brands and one brand has a project at Venue X, this feature will display Venue X in the venue dropdown for projects of all brands
- Venue Prioritization: Dropdown displays venues sorted by venue name, A to Z
- Projects Display Upon Venue Selection:
- List of all projects (past, current, future) for the selected venue by the agency
- The total number of events the agency has at the venue
- Project names are shown as section headers for each project (ordered by most recent event first)
- For projects where deliverables are found: Displays post-production deliverable links (i.e., Vimeo, gallery, Dropbox) with hyperlink to open URL and copy-to-clipboard button
- For projects (past, current, future) with no deliverables: Display event name and date
- Scrollable Display: If multiple projects exist at the selected venue, the project display section becomes vertically scrollable to accommodate and show all associated project information
- Search: Dropdown supports search functionality to help users find venues quickly
- Info Tooltip: “If the venue entered on the lead form matches one from your past, current, or future project venues, it will show up here. If it does not fetch properly, you can type in the venue and find it from your list of venues.”
8. Edge Cases
Scenario
Expected Behavior
Project>Event created via Lead Form with the venue, but the agency has no projects at that venue
Dropdown displays "Select a venue" placeholder; the user must manually search
Venue exists, but the agency has no projects there
The venue does not appear in the drop-down list
Multiple events in the project: some Lead, some Booked
The feature appears in the particular event side panels (which are in the lead stage) and the Overview tab only
Single event - lead stage changed to booked stage status
The feature disappears from that event's side panel and the Overview tab
All events in the project changed from Lead to Booked
Feature hidden entirely from all event views and the overview tab
Lead Form venue fuzzy matching finds multiple similar venues
The system selects the closest match based on fuzzy matching
Venue selected, but deliverable links become inaccessible
All project links still display - the system does not validate link accessibility
The venue has numerous projects (past and future)
The project display section becomes vertically scrollable, with no pagination limit, ordered by the most recent project first
Lead Form created without a venue specified
Dropdown shows "Select a venue" placeholder by default
9. Test Cases
- Link:
10. Acceptance Criteria
- Venue feature visibility is strictly limited to events with "Lead" stage status only
- Multi-event project logic correctly shows/hides the feature based on individual event statuses (lead or booked stage)
- The Venue dropdown labeled "Venue Name" populates with venues where the agency has any projects (past, current, or future)
- The default "Select a venue" placeholder displays when no Lead Form venue match is found, and also when the project is created manually, and no venue is assigned (TBD) to the project
- Search functionality works in the venue dropdown for quick venue location search
- Venue Prioritization: Dropdown displays venues sorted by venue name, A to Z
- All projects display complete information: project list, event count (Number of events the agency has at the venue), project name as headers, display deliverable links with hyperlinks and copy buttons for projects where deliverables are found, and the event date for projects where no deliverables are found
- Each deliverable link includes both hyperlink functionality and a copy-to-clipboard button
- Vertically scrollable display accommodates multiple projects (ordered by most recent first)
- The venue for leads feature completely disappears when all the project events move from Lead to Booked status
Purpose Fulfillment:
- Agencies can identify if they've worked at a venue before
- Agencies can retrieve and preview post-production deliverables links (if found) from projects at the selected venue, and view event dates for projects where no deliverables are found
- Agencies can use links for client showcasing, pitching, and marketing communication during the lead engagement phase
11. Dependencies
Module/System
Dependency Type
Impact if Unavailable
Events Management Interface
System dependency
The feature cannot be accessed or displayed in the specified location
Lead Form System
Data dependency
Cannot perform venue pre-selection and auto-selection logic
Project Management System
Data dependency
Cannot determine project completion status and multi-event logic
Post-Production Module
Data dependency
Cannot identify deliverables, retrieve deliverable links, or determine which projects should show event dates
Venue Management System
Data dependency
Cannot populate the dropdown or perform venue matching
User Authentication
System dependency
Cannot verify Agency Admin access permissions
12. References
- Figma Link: Click Here
Upload Timeline Module
Project Management Right Side Menu - Upload Timeline Module
1. Module Overview
- Module Name: Upload Timeline
- Purpose: Enable project administrators and team members to upload, manage, and share timeline documents (PDFs or external links) for specific event services within a project. This module facilitates timeline distribution to contractors
- Business Goal: Streamline the timeline sharing process, ensure contractors have access to relevant timeline information for their specific services, and maintain centralized timeline management for project coordination
2. User Roles & Permissions
Role
Description
Key Permissions
Agency Owner
Agency Owner
Full access: upload, view, delete timelines for all events/services of all projects across the agency
Agency Admin
System Administrator
Full access: upload, view, and delete timelines for all events/services of all projects across the agency
Project Manager
Project Manager for the associated project
Full access: upload, view, and edit timelines for projects they are assigned to, and delete only the timelines they have uploaded
Contractor
External service provider
View and download timelines assigned to their services (contractor portal)
3. User Flow
Critical Path: Upload New Timeline
- Access Upload Timeline: User clicks the "Upload Timeline" button from the Project Management side menu
- Pop-Up Opens: The Upload Timeline pop-up displays with two tabs - "Upload New Timeline" (default) and "Uploaded Timelines"
- Project Events Display: System displays ALL events of the current project with ALL services for each event as multi-select checkboxes; services that already have uploaded timelines appear disabled/grayed out
- Timeline Input: User either:
- Paste the external link in the "Link to timeline" field,
OR
-
- Uploads file manually via drag-and-drop or file browser (PDF format, max 15 MB)
- Confirmation: User clicks "Confirm" to upload timeline
- Timeline Assignment: The System assigns the uploaded timeline to all selected services
- Contractor Access: The timeline becomes available in the contractor portal for the services selected by the agency during the upload timeline for each event
Alternative Path: Manage Uploaded Timelines
- Switch to Uploaded Timelines Tab: User clicks "Uploaded Timelines" tab in the Upload Timeline pop-up
- Timeline Display: System displays all uploaded timelines grouped by event and service with visual indicators
- Timeline Management Options: The User can perform the following actions:
- Copy Link: Click the link icon to copy URL-based timelines to the clipboard
- Preview PDF: Click the eye icon to open the PDF preview in a pop-up overlay
- Delete Timeline: Click the delete icon to remove the timeline with a confirmation dialog
- Timeline Deletion Process:
- User clicks the delete icon
- The system shows a confirmation dialog
- User confirms deletion
- Timeline removed from display
- Corresponding service checkbox re-enabled in "Upload New Timeline" tab
- Re-upload Process: After deletion, the user can switch back to the "Upload New Timeline" tab to upload a new timeline for that service
4. Field Details & Validations
Upload New Timeline Tab
Field Name
Type
Required
Validation Rules
Event Services
Multi-select Checkbox
Yes
At least one service must be selected
Link to timeline
URL/Text
Conditional
- Valid URL format if provided
- Required if no file upload
File Upload
File
Conditional
- PDF format only
- Max 15 MB
- Required if no timeline link is provided
Close
Button
No
On click, close the pop-up without performing any action
Confirm
Button
Yes
- On click, validates the field. If no validation upload the timeline for the selected services in the event
- Checks for mutual exclusivity of upload methods
- If validation occurs display a relevant error message
Note: Upload method (file vs. link) validation is performed only upon clicking "Confirm". Users are allowed to input in both fields, but the system will prompt them to choose only one before proceeding
Additional Field Rules:
- Service Selection: The User must select at least one service before uploading
- Upload Method: Either link OR file upload required (not both simultaneously)
- File Format: Only PDF files accepted for manual upload
- URL Validation: Links must follow standard URL format
Uploaded Timelines Tab
Field Name
Type
Required
Validation Rules
Event Name
Display Label
N/A
Displays the event name for which the timeline is uploaded as a section header
Service Name
Display Label
N/A
Displays the service name for which the timeline is uploaded under the respective event
Timeline Type Indicator
Icon
N/A
- Display copy icon for URLs
- Eye icon for PDFs
Copy Link Button
Icon Button
N/A
- Available only for URL-based timelines
- On click, copy the link to the clipboard
Preview Button
Icon Button
N/A
- Available only for PDF timelines
- On click, opens a preview displaying the PDF file
Delete Button
Icon Button
N/A
- Available for all timelines
- On click triggers a confirmation dialog
Close
Button
N/A
On click, close the pop-up without performing any action
Uploaded Timeline Display Rules:
- Event Grouping: Timelines grouped hierarchically by event name
- Service Listing: Services listed under respective events with timeline details
- Icon Logic: Link icon for URL timelines, Eye icon for PDF files
- Action Availability: Copy/Preview/Delete actions based on the timeline type
- Empty State: Show message when no timelines are uploaded
5. Success Message Handling
Validation Scenario
Success Message
Timeline uploaded successfully
"Timeline has been uploaded successfully."
Timeline deleted successfully
"Timeline has been removed successfully."
Timeline link copied
"Link copied to clipboard."
6. Error Message Handling
Upload New Timeline Tab
Field
Validation Scenario
Error Message
Service Selection
No services selected
"Please select at least one service."
File Upload
File size exceeds 15MB
"File size cannot exceed 15 MB."
File Upload
Invalid file format
"Please upload a PDF file."
Link Input
Invalid URL format
"Please enter a valid URL."
Upload Method
Neither link nor file provided
"Please upload a timeline either by link or manually."
Upload Method
Both the link and the file are provided
"Please choose either link or file upload."
General
Network/server error
"Something went wrong."
Uploaded Timelines Tab
Field
Validation Scenario
Error Message
Copy Link
Copy function fails
"Failed to copy the link. Please try again."
PDF Preview
The file cannot be loaded
"Unable to preview file. Please try again."
Delete Timeline
Network error during deletion
"Something went wrong."
General
Loading timelines fails
"Something went wrong."
7. Functional Logic
Timeline Assignment Logic:
- User selects multiple service checkboxes and uploads ONE timeline (file or link)
- The SAME timeline gets assigned to ALL selected services simultaneously
- Each service can have only ONE active timeline at a time
- Once the timeline is uploaded, it cannot be replaced until deleted from the "Uploaded Timelines" tab
Checkbox State Management:
- System displays ALL events of the current project with ALL their services as checkboxes
- Services that already have uploaded timelines appear disabled/grayed out automatically
- After a successful upload, ALL newly selected service checkboxes become disabled in the "Upload New Timeline" tab
- Disabled checkboxes prevent new uploads until the existing timeline is deleted
- User must go to the "Uploaded Timelines" tab and delete the timeline to re-enable the checkboxes
- After deletion, previously disabled checkboxes become available for a new timeline upload
Upload Method Validation Logic:
- The system allows users to input in both the "Link to timeline" field AND the file upload area simultaneously during form filling
- No real-time validation occurs while the user is entering data in either field
- Validation is triggered only when the user clicks the "Confirm" button
- Confirm Button Validation Sequence:
- Check if at least one service is selected
- Check if either link OR file is provided
- Check if BOTH the link AND the file are provided
- If both methods are detected, display an error message and prevent upload
- If only one method is provided, proceed with upload validation (URL format, file size, and format)
Contractor Portal Integration:
- Uploaded timelines automatically appear as Download/Copy button in contractor portal > Events > Services
- Contractors can only access timelines for the event services they are assigned to
- Download/copy functionality in the contractor portal is available based on the timeline type (PDF/link)
Uploaded Timeline Management Logic:
- Timelines displayed in hierarchical structure: Event → Service - Timeline
- Each timeline shows appropriate action icons based on type (Link/PDF)
- Link timelines display a copyable link icon with click-to-copy functionality
- PDF timelines display an eye icon for preview in a pop-up overlay
- All timelines display a delete icon for removal with confirmation
- Timeline deletion immediately updates the checkbox states as enabled in the "Upload New Timeline" tab
- Empty states are shown when no timelines exist for events/services
Timeline Action Logic:
- Copy Link: Available only for URL-based timelines; copies full URL to clipboard
- Preview PDF: Available only for PDF files; opens file in pop-up with zoom/download options
- Delete Timeline: Available for all timeline types; requires confirmation before deletion
- Icon Display: System automatically detects timeline type and shows appropriate icons
8. Edge Cases
Scenario
Expected Behavior
User deletes the timeline while the contractor is viewing
On the API call Download timeline button will be hidden in the contractor portal
Multiple users editing the same timeline
Last upload wins
Service gets removed from the project
Associated timelines are automatically removed from the respective service
User rapidly clicks delete multiple times
Prevent duplicate deletion requests; disable button after first click
Network disconnection during timeline deletion
Show “Something went wrong.” error message
9. Test Cases
- Link :
10. Acceptance Criteria
- pop-up Accessibility: The "Upload Timeline" button is accessible from the Project Management page and opens the pop-up with two tabs - "Upload New Timeline" (default selected) and "Uploaded Timelines"
- Tab Navigation: Users can switch between "Upload New Timeline" and "Uploaded Timelines" tabs, with the active tab clearly highlighted and content updating accordingly
- Event Service Display: The pop-up displays ALL events of the current project with ALL services for each event as multi-select checkboxes, organized hierarchically by event; services with existing timelines appear disabled/grayed out
- Service Selection Validation: Users must select at least one service checkbox before uploading, with the system preventing upload attempts when no services are selected
- Dual Upload Methods: Users can upload timelines either by pasting a link in the "Link to timeline" field OR by uploading a file manually via drag-and-drop or file browser selection
- File Format Validation: System accepts only PDF files for manual upload, rejecting other formats with appropriate error messaging
- File Size Validation: File uploads are limited to 15 MB maximum size, with the system displaying an error message for oversized files
- URL Format Validation: Link input field validates proper URL format and displays an error message for invalid formats
- Upload Method Restriction: System enforces selection of either link OR file upload, not both simultaneously, with appropriate validation messaging
- Multi-Service Assignment: Selected timeline uploads to ALL checked services simultaneously, creating bulk assignment functionality
- Uploaded Timeline Display: "Uploaded Timelines" tab shows all uploaded timelines grouped by event and service with appropriate visual indicators
- Timeline Type Indicators: System displays link icon for URL-based timelines and eye icon for PDF files
- Link Copy Functionality: Users can copy timeline links to the clipboard by clicking the link copy icon
- PDF Preview Capability: Users can preview uploaded PDF files by clicking the eye icon, opening the file in a pop-up overlay
- Timeline Deletion: Users can delete existing timelines using the delete icon, with the system providing confirmation and immediately updating the display
- Checkbox State Management: Services with existing timelines show disabled checkboxes in upload new timeline view, preventing duplicate uploads until the existing timeline is deleted
- Timeline Replacement Logic: Users must delete the existing timeline before uploading a new one, with the checkbox re-enabling after successful deletion
- Confirmation Process: "Confirm" button triggers the upload timeline process and displays a success message upon completion
- Contractor Portal Integration: Uploaded timelines automatically appear in the contractor portal for assigned service providers with appropriate download/copy options
- Info Message Display: System shows an informational banner in the “Uploaded Timelines” tab stating "Need to upload one document to multiple services of events? Use Upload New Timeline to do it all at once."
- Pop-Up Closure: "Close" button exits the pop-up without saving changes, returning the user to the previous view
- Error Handling: The System provides specific, actionable error messages for all validation failures
- Timeline Availability: Uploaded timelines remain accessible until manually deleted, maintaining persistent access for contractors and the project team
11. Dependencies
Module/System
Dependency Type
Impact if Unavailable
File Storage Service
Infrastructure
Cannot upload or store PDF files
Contractor Portal
Integration
Timelines are not accessible to contractors
Project Management
Data dependency
Cannot retrieve project/event/service data
User Authentication
Security
Cannot verify user permissions for upload
Email Notification
Integration
Contractors not notified of new timelines
Cloud Storage API
External service
File upload/download functionality disabled
12. References
- Figma Design Link: Click Here
Add Service
Project Management Side Menu - Add Service
1. Module Overview
- Module Name: Event Service Management - Side Panel Add Service
- Purpose: Enable users to add new services (Photography, Videography, Content Creation) to existing events through the side panel "Add Service" button if any service of the brand is remaining for the event.
- Business Goal: Provide an alternative entry point for service addition that maintains consistency with the existing add services workflow while offering enhanced accessibility through the side panel interface.
2. User Roles & Permissions
Role
Description
Key Permissions
Project Manager
Team leader managing events
Full access to add/edit services for assigned projects
Team Member
Project contributor
Add services to events within assigned projects
Agency Admin
System administrator
Full access to all service management features
3. User Flow
Service Addition Initiation (Side Panel)
- User navigates to the Event details page or Overview tab
- User locates the side panel with project management options
- User clicks the "Add Service" button in the side panel
- System checks the context and available events:
- If clicked from Overview tab: "Choose Event" dropdown appears with events that have at least one service remaining for the brand
- If clicked from Event details page: Current event is auto-selected
- If only one event exists in project: Event name displays as read-only regardless of entry point
- System checks if any services remain available for the selected/current event
- If services are available, the "Add New Services" pop-up opens with service selection
- If no services are available, button remains disabled/inactive
Service Configuration
- User views event selection based on entry point:
- From Overview tab: "Choose Event" dropdown with events having remaining brand services
- From Event details page: Current event name (read-only, auto-populated)
- Single event project: Event name (read-only, auto-populated)
- User selects one service type from available options (already added services are grayed out)
- Pop-up expands dynamically to show relevant configuration fields for selected service
- User completes all required fields for the selected service
Service Submission
- User completes all required fields for the selected service
- User clicks the "Add new services" button
- System validates all input fields
- If validation passes, system creates the new service
- Success toast message displays with dynamic service type name
- Pop-up closes and returns user to the services tab
- Side panel updates to reflect new service availability
Critical Path: Side panel access → Service availability check → Pop-up launch → Service selection → Configuration → Validation → Service creation → Return to services view
4. Field Details & Validations
Field Name
Type
Required
Validation Rules
Choose Event
Dropdown
Conditional
Only appears when clicked from Overview tab; Shows events with remaining services for the brand
Event Name
Text Display (Read-only)
Yes
Auto-populated from current event context OR selected from Choose Event dropdown; Read-only when clicked from Event details page or when only one event exists in project
Service Type
Button Toggle
Yes
Single select only; Already added services disabled/grayed out; Selection expands pop-up configuration section
Choose Package
Dropdown
Yes
Options: Basic, Intermediate, Advanced
Coverage
Text Input
Yes
- Allows numeric input only, starting from 1
- Minimum: 1
- Maximum: 24
Min amount of photos
Numeric Input
Conditional
- Conditional: Only appears if the Service Type is Photography selected
- Allows numeric input only, starting from 1
- Minimum: 1
- Maximum: 5,000
Role Checkboxes
Checkbox Group
Yes
Options: Lead Shooter, Second Shooter, Drone Operator, Assistant; Shows count in "No of Shooters"
Service Note
Text Area
No
Max 250 characters, plain text only
Cancel
Button
No
Closes pop-up without saving, returns to previous view
Add New Services
Button
No
- On click, if there are no validation errors, add the service to the current event context.
- Remains enabled; displays validation errors if validation fails.
5. Success Message Handling
Validation Scenario
Success Message
On successfully saving service changes
"Your {Photography/Videography/Content Creation} service has been added successfully."
6. Error Message Handling
Field
Validation Scenario
Error Message
Choose Event
No event selected (when dropdown appears)
"Please select an event."
Service Type
No service selected
"Please select a service."
Package
Not selected
"Please select a package."
Coverage
Empty
"Please enter the coverage duration."
Coverage
Coverage > 24
"Coverage must be between 1 and 24 hours."
Min amount of photos
Empty (Photography selected)
"Please enter the minimum amount of photos."
Min amount of photos
Value > 5000
"Minimum amount of photos must be between 1 and 5000."
Roles
None selected
"Please select a role."
Service Note
Exceeds 250 characters
"Service notes cannot exceed 250 characters."
General
Server error
"Something went wrong."
7. Functional Logic
Event Selection Logic:
- When accessed from Overview tab: "Choose Event" dropdown displays only events with remaining services for the brand
- When accessed from Event details page: Current event name appears as read-only (no dropdown)
- Single event projects: Event name appears as read-only regardless of entry point
- Events with all services completed are excluded from dropdown options
Side Panel Button State Management:
- The "Add Service" button state is context-dependent based on service availability
- Event Details Page: Button is enabled when at least one service type remains available for the current event; disabled when all service types have been added to that specific event
- Overview Tab: Button is disabled only when all services have been created for all events in the project
- When disabled in (overview), hovering over the “Add Service” button displays tooltip: "All available services have already been added to this project. No additional services can be added."
- When disabled in (events), hovering over the “Add Service” button displays tooltip: "All available services have already been added to this event. No additional services can be added."
- Button state updates dynamically when services are added or removed
Service Availability Check:
- System performs real-time check against current event's existing services
- Automatically determines which service types are available for addition
- Updates button accessibility based on availability
Pop-up Behavior Consistency:
- Preserves dynamic field display logic (Photography- (Min amount of photos))
Service State Synchronization:
- Added services immediately reflect in the services tab
- Side panel button state updates after successful service addition
- Maintains consistency across all entry points
8. Edge Cases
Scenario
Expected Behavior
Overview tab access with multiple events
"Choose Event" dropdown appears showing only events with remaining brand services
Event details page access
Current event name appears as read-only; No dropdown appears
Single event in project
Event name displays as read-only regardless of entry point
All events have all services
Add Service button disabled
Overview tab - some events incomplete
Add Service button enabled; Choose Event Dropdown shows events with remaining services
Current event has all services added
"Add Service" button disabled only for that specific event; Button remains enabled on other events with remaining services
Current event has remaining services
"Add Service" button enabled; Pop-up opens with available service options
All services already added to current event
Hover displays tooltip: "All available services have already been added to this event. No additional services can be added."
User cancels service addition
Pop-up closes; Returns to previous state; No changes saved
Network interruption during save
Display "Something went wrong" message; Allow retry
9. Test Cases
- Link:
10. Acceptance Criteria
- Button Accessibility: The "Add Service" button is accessible from the side panel and responds appropriately based on service availability
- Service Availability Check: The button is disabled only for the specific event when all available services of the brand have been created for that particular event
- Overview Tab Button State: On Overview tab, button is disabled only when all services have been created for all events in the project
- Context-Specific Button State: Button behavior adapts based on current context (specific event vs overview) and remaining service availability
- Disabled State Tooltip: When disabled, hovering over the button displays the tooltip: "All available services have already been added to this event. No additional services can be added."
- Event Selection Logic: When accessed from Overview tab, "Choose Event" dropdown displays only events with remaining brand services
- Event Context Display: When accessed from Event details page or single event projects, event name appears as read-only
- Service Type Selection: Users can select one service type from available options, with already added services appearing disabled/grayed out
- Dynamic Field Display: The "Min amount of photos" field appears only when Photography service is selected
- Package Selection: Users can select from Basic, Intermediate, and Advanced package options
- Coverage Validation: Coverage field accepts numeric input between 1 and 24 hours
- Photo Count Validation: Minimum amount of photos field accepts values between 1 and 5,000 when Photography is selected
- Role Selection: Users must select at least one role from Lead Shooter, Second Shooter, Drone Operator, or Assistant
- Service Note Character Limit: Service note field enforces a 250-character limit with appropriate validation
- Required Field Validation: All required fields validate properly with specific error messages for each validation scenario
- Pop-up Expansion: Selected service type expands the pop-up and displays relevant configuration fields
- Success Confirmation: System displays dynamic success message with the specific service type name upon successful addition
- Form Cancellation: Cancel button closes the pop-up without saving changes and returns to the previous view
- Service Tab Update: Successfully added services immediately reflect in the services tab
11. Dependencies
Module/System
Dependency Type
Impact if Unavailable
Event Management System
Data dependency
Cannot retrieve current event information
Services Configuration
Core functionality
Cannot display available service options
User Authentication
Security dependency
Cannot validate user permissions for service addition
Notification System
User feedback
Success/error messages cannot be displayed
Project Management Module
Context dependency
Cannot determine project-level service permissions
12. References
- Figma Design Link:
Create Event
Project Management Side Menu - Create Event
1. Module Overview
- Module Name: Create Event
- Purpose: Enable users to create new events within a project by selecting from available brand event types, configuring services, scheduling, and venue details.
- Business Goal: Streamline the event creation process while ensuring data consistency between brand configurations and project limitations, preventing over-allocation of events per project.
2. User Roles & Permissions
Role
Description
Key Permissions
Project Manager
Manages project events and services
Full access - create, edit, delete events
Team Member
Regular project contributor
Create and edit assigned events
Agency Admin
System administrator
Full system access and configuration
3. User Flow
- Initial Access: The user clicks the "CREATE EVENT" button from the Project Management panel
- Validation Check: The system validates if all available brand events are already created in the project. If the limit is reached, the “CREATE EVENT” button becomes disabled with the hover tooltip: "You cannot create a new event because all allowed events for this brand have already been created"
- Form Display: If validation passes, the "Create new event" pop-up opens
- Event Configuration: User fills required fields (Event Type, Services, Service Area, Venue)
- Date/Time Setup: User configures event timing (single or multi-day)
- Venue Selection: The user selects a venue using Google Maps integration
- Submission: The user clicks "Create new event" to save
- Confirmation: The system displays a success message and updates the project with the new event and its services
Critical Path: Validate event limits → Display form → Collect required data → Save event → Confirm creation
4. Field Details & Validations
Field Name
Type
Required
Validation Rules
Event Type
Dropdown
Yes
Options: Display only the brand event types that are not yet added to the project
Service Types
Multi-select Buttons
Yes
- Options: Display all services configured for the brand
- At least one service must be selected from the brand's available services
Service Area
Dropdown
Yes
Select from configured service areas of the brand
Event Date
Date Picker
Optional
DD/MM/YYYY format, show "TBD" in the event if not filled
Event Time
Time Picker
Optional
12-hour format
Enabled only after date selection
Multi-day Event
Checkbox
No
When checked: Event Date becomes "Event Start Date", Event Time becomes "Event Start Time", and additional "Event End Date" and "Event End Time" fields are displayed
Event Start Date
Date Picker
Conditional
Required if multi-day checked, only visible when multi-day checkbox enabled
Event Start Time
Time Picker
Optional
12-hour format (hh: mm a), only visible when multi-day enabled
Event End Date
Date Picker
Conditional
- Required if multi-day checked, calendar prevents selection of dates before the event start date
- Allows selection of same date as event start date
Event End Time
Time Picker
Optional
12-hour format (hh: mm a), only visible when multi-day enabled
- Disabled until the event start time is selected
- The selected event end time must be after the event start time; otherwise, display a validation error.
Venue
Location Search
Yes
- The venue field uses Google Places API, validates address exists, and provides autocomplete address
- Max 150 characters
Cancel
Button
N/A
On click close the pop-up without updating any data
Create New event
Button
N/A
- On click validates the field and creates new event in the project
- If validation occurs display relevant error message
5. Success Message Handling
Validation Scenario
Success Message
Event created successfully
"Event has been created successfully and added to your project"
6. Error Message Handling
Field
Validation Scenario
Error Message
Event Type
Not selected
"Please select an event type."
Service Types
None selected
"Please select a service."
Service Area
Not selected
"Please select a service area."
Event Start Date
Empty when multi-day checked
"Please enter a start date."
Event End Date
Empty when multi-day checked
"Please enter an end date."
Event End Time
Before start time (same day)
"End time must be after the start time."
Venue
Empty submission
"Please enter a venue location."
Venue
Invalid address
"Please enter a valid address."
Venue
Venue > 150 characters
“Venue cannot exceed 150 characters.”
General
Maximum events reached
Tooltip: "All available events for this brand have already been added to the project."
General
Server error
"Something went wrong."
General
Network timeout
"Something went wrong."
7. Functional Logic
Event Limit Validation Logic:
- If all available brand events have been created in the project, then no more events can be added
- When all events are already created: the “CREATE EVENT” button becomes disabled (non-clickable)
- Hover tooltip displays: "You cannot create a new event because all allowed events for this brand have already been created"
- If some events are still available: Button stays enabled, Event type dropdown in the create new event pop-up shows only the remaining brand event types that haven't been added to the project
Multi-day Event Logic:
- When the "This is a multi-day event" checkbox is unchecked: Display the "Event Date" and "Event Time" fields
- When checked: Field labels change dynamically:
- "Event Date" becomes "Event Start Date"
- "Event Time" becomes "Event Start Time"
- Additional "Event End Date" and "Event End Time" fields appear
- Date Range: Event End Date allows selection of the same date as Event Start Date or any date after
- End Time Dependency: The “Event End Time” field is disabled until the “Event Start Time” is filled
- Only date fields (Event Start Date, Event End Date) become required when multi-day is enabled
- Time fields (Event Start Time, Event End Time) remain optional
Service Area Dropdown Population:
- The dropdown displays all service areas configured for the brand
Google Maps Integration:
- Venue field uses Google Places API Validates address exists and autocomplete address
- Returns formatted address with Zip/Postal code
8. Edge Cases
Scenario
Expected Behavior
The user switches from multi-day to single-day after entering the dates
Clear start/end date fields and show single date field - Event Date and Event Time
9. Test Cases
Link:
10. Acceptance Criteria
- Event Limit Validation: The “CREATE EVENT” button is disabled with an appropriate tooltip when all brand events are already created in the project
- Event Type Selection: Users can only select from brand event types that have not yet been added to the project
- Service Selection: Users can select multiple services from the brand's configured services using multi-select buttons
- Required Field Validation: All required fields (Event Type, Service Types, Service Area, Venue) validate properly with clear error messages
- Multi-day Functionality: Multi-day checkbox correctly toggles field labels and displays additional End Date/End Time fields
- Date Range Validation: The event end date must be on the same date or after the event start date when multi-day events are enabled
- Event Time: If the event starts and ends on the same date, the event end time must be later than the event start time
- Time Field Behavior: All time fields remain optional
- Google Maps Integration: Venue field provides address autocomplete using Google Maps API
- Success Confirmation: The system displays an appropriate success message after event creation
- Form Cancellation: The cancel button closes the pop-up without saving any data
11. Dependencies
Module/System
Dependency Type
Impact if Unavailable
Brand Management
Data dependency
Cannot load event types, services, or service areas
Project Management
Core dependency
Cannot validate event limits or save to project
User Authentication
Security dependency
Cannot determine user permissions
Database
Data storage
Cannot persist event data
12. References
- Figma Design Link:
Invite Users
Functional Requirements Document (FRD)
Invite Users Module
Module Name: Invite Users
Version: 1.0
Last Updated: May 05, 2026
Status: Draft
1. Module Overview
1.1 Module Name
Invite Users
1.2 Purpose
The Invite Users module enables agency users to add clients and team members to a project from the Project Details page. This module provides functionality to invite new users (creating them in the system) or add existing users from the agency's database. It also includes the All Users section for viewing and managing all users associated with a project.
1.3 Business Goals
- Enable quick addition of clients and team members to projects without navigating away from Project Details.
- Support both creating new users and selecting from existing users in the agency database.
- Enforce Primary Client logic to ensure each project has exactly one designated primary contact.
- Enforce single Project Manager rule to maintain clear project ownership.
- Provide a centralized view of all users associated with a project through the All Users section.
- Maintain audit trail by logging all user-related activities.
1.4 Module Access Points
Access Point
Location
Action Triggered
Invite Users
Project Details → Sidebar → Project Management Panel → "INVITE USERS" button
Opens Invite Users popup with Add Client / Add Team Member options
1.5 Scope
This FRD covers:
- Invite Users popup and options
- Invite Client flow (New and Existing tabs)
- Set Primary Client modal
- Invite Team Member flow (New and Existing tabs)
- All Users section in Project Details sidebar
- User card popups (Client, Team Member, Contractor)
- Edit Roles modal
- Remove from Project functionality
2. User Roles & Permissions
2.1 Invite Users Permissions
Role
Invite Client
Invite Team Member
Agency Owner
✅ Yes
✅ Yes
Admin
✅ Yes
✅ Yes
Project Manager
❌ No
❌ No
Team Member
❌ No
❌ No
2.2 All Users Section Permissions
Role
View All Users
Edit Role
Remove from Project
Agency Owner
✅ Yes
✅ Yes
✅ Yes
Admin
✅ Yes
✅ Yes
✅ Yes
Project Manager
✅ Yes
✅ Yes
✅ Yes
Team Member
✅ Yes
❌ No
❌ No
2.3 Other Portals
Portal
Access
Client Portal
❌ No access
Contractor Portal
❌ No access
3. User Flow
3.1 Invite Users - Initial Flow
3.1.1 The user navigates to the Project Details page and locates the Project Management panel in the sidebar.
3.1.2 The user clicks the "INVITE USERS" button in the Project Management panel.
3.1.3 The system displays a popup with two options: "Add Client" and "Add Team Member".
3.1.4 The user selects one of the options to proceed to the respective invite modal.
3.2 Invite Client - New Client Flow
3.2.1 The user selects "Add Client" from the Invite Users popup.
3.2.2 The system displays the "Invite Client" modal with two tabs: "Invite New Client" (default) and "Existing Client".
3.2.3 The user fills in the client information:
- Full Name (required)
- Email Address (required)
- Phone Number with country code (required)
- Company (optional, dropdown)
- Client Role (optional, dropdown)
- Street Address (optional)
- Country (optional)
- State (optional)
- City (optional)
- Zip/Postal Code (optional)
- Internal Note (optional)
3.2.4 The user clicks "Invite" to submit the form.
3.2.5 The system validates all fields. If validation fails, error messages are displayed inline.
3.2.6 If validation passes, the system creates the client record, associates them with the project, and sends an invitation email.
3.2.7 The system displays a success toast and closes the modal.
3.2.8 If this is the first client added to the project, they automatically become the Primary Client.
3.3 Invite Client - Existing Client Flow
3.3.1 The user selects "Add Client" and switches to the "Existing Client" tab.
3.3.2 The system displays a searchable list of all clients in the agency database (excluding clients already on this project).
3.3.3 The user can search clients by name using the search bar.
3.3.4 Each client row displays: Checkbox, Avatar, Name, Email, and "Add Role" dropdown.
3.3.5 The user selects one or more clients by checking the checkboxes.
3.3.6 The user optionally assigns a Client Role to each selected client via the "Add Role" dropdown.
3.3.7 The user clicks "Invite" to add the selected clients.
3.3.8 If multiple clients are selected and no Primary Client exists on the project, the system displays the "Set Primary Client" modal.
3.3.9 If a Primary Client already exists, the selected clients are added as regular clients.
3.4 Set Primary Client Flow
3.4.1 The Set Primary Client modal appears when multiple clients are being added to a project with no existing Primary Client.
3.4.2 The modal displays a note: "Each project can only have one primary client. If you assign a new primary client, the previous one will automatically be switched to a regular client."
3.4.3 Each client is displayed with their avatar, name, and a role dropdown.
3.4.4 The role dropdown includes client roles plus an "Assign Primary Client" option.
3.4.5 The user selects one client as Primary by choosing "Assign Primary Client" from their dropdown.
3.4.6 The user clicks "Save" to complete the process.
3.4.7 Clicking "Back" returns to the Existing Client selection screen.
3.5 Invite Team Member - New Member Flow
3.5.1 The user selects "Add Team Member" from the Invite Users popup.
3.5.2 The system displays the "Invite Team Member" modal with two tabs: "Invite New Member" (default) and "Existing Member".
3.5.3 The user fills in the team member information:
- Full Name (required)
- Work Email (required)
- Phone Number with country code (required)
- Personal Email (optional)
- Brand(s) (required, multi-select dropdown)
- Role (required, dropdown)
3.5.4 The system displays the permissions associated with the selected role (read-only display).
3.5.5 The user clicks "Invite" to submit the form.
3.5.6 The system validates all fields. If validation fails, error messages are displayed inline.
3.5.7 If validation passes, the system creates the team member record in the agency, adds them to the project, and sends an invitation email to the work email.
3.5.8 If the selected role is "Project Manager" but a PM already exists on the project, the new member is added as "Team Member" instead.
3.5.9 The system displays a success toast and closes the modal.
3.6 Invite Team Member - Existing Member Flow
3.6.1 The user selects "Add Team Member" and switches to the "Existing Member" tab.
3.6.2 The system displays a searchable list of all team members in the agency (excluding those already on this project).
3.6.3 Each team member row displays: Avatar, Name, Role, Email, and "Select" button.
3.6.4 The user searches by name and clicks "Select" on desired team members (button changes to "Selected").
3.6.5 The user can select multiple team members.
3.6.6 The user clicks "Save" to add the selected team members.
3.6.7 Selected team members are added with their existing system role. If any selected member has "Project Manager" role but a PM already exists, they are added as "Team Member" instead.
3.6.8 The system displays a success toast and closes the modal.
3.7 All Users Section Flow
3.7.1 The All Users section is located in the Project Details sidebar, below the Project Management panel.
3.7.2 The section displays a grid of user cards for all users associated with the project.
3.7.3 The user can click on any user card to open the user card popup.
3.7.4 The user can access the kebab (3-dot) menu on each card for additional actions.
3.7.5 Available actions vary by user type:
- Clients: View Details, Edit Role, Remove from Project
- Team Members: View Details, Edit Role, Remove from Project
- Contractors: View Details, Remove from Project
4. Functional Logic
4.1 Invite Users Popup
4.1.1 Popup Trigger and Display
- Clicking "INVITE USERS" in the Project Management panel opens a popup overlay.
- The popup displays two options as buttons/cards: "Add Client" and "Add Team Member".
- Clicking outside the popup or pressing Escape closes the popup.
4.2 Invite Client Modal - New Client Tab
4.2.1 Modal Display
- The modal opens with "Invite New Client" tab active by default.
- All text input fields are empty with placeholder text.
- Phone country code defaults to user's detected country or +1 (United States).
4.2.2 Company Dropdown
- The Company dropdown is populated with all active companies from the agency database.
- Companies are sorted alphabetically.
- Type-ahead search is enabled.
- Selection is optional.
4.2.3 Client Role Dropdown
- The Client Role dropdown contains predefined roles across various event types.
- Wedding roles: Bride, Groom, Spouse, Fiancé(e), Mother of the Bride, Father of the Bride, Mother of the Groom, Father of the Groom, Maid of Honor, Matron of Honor, Best Man, Bridesmaid, Groomsman, Flower Girl, Ring Bearer, Wedding Planner, Officiant, Guest, Sibling (Sister/Brother), Parent, Friend, Guest of Honor, Vendor.
- Corporate/Brand Shoot roles: Project Manager, Marketing Manager, Brand Director, Producer, Creative Director, Stakeholder, Operations Lead, Executive (CEO/Founder), PR Contact, Internal Contact, Event Coordinator, Assistant.
- Music Video roles: Artist/Performer, Manager/Agent, Label Representative, Director, Producer, Choreographer, Stylist/MUA, Set Designer, Friend/Guest Appearance, Talent Coordinator.
- Real Estate roles: Realtor, Homeowner, Property Manager, Listing Agent, Buyer/Client, Broker, Marketing Coordinator, Developer, Builder, Stager.
- General roles: Main Contact, Secondary Contact, Assistant, Client Representative, Internal Team, External Collaborator, Admin, Guest, Coordinator, Contact Person, Referrer.
4.2.4 Address Fields
- Street Address, Country, State, City, and Zip/Postal Code are all optional.
- User types in the fields manually (no dropdown for address fields).
- State field behavior is independent of Country selection.
4.2.5 Internal Note
- Internal Note is a textarea for free-form notes.
- Maximum 1000 characters.
- Visible only to agency team members, not to the client.
4.2.6 Invitation Email
- Upon successful creation, the system sends an invitation email to the client's email address.
4.3 Invite Client Modal - Existing Client Tab
4.3.1 Client List Display
- The list displays all active clients from the agency database.
- Clients already associated with this project are excluded from the list.
- Each client row shows: Checkbox, Avatar, Name, Email, "Add Role" dropdown.
4.3.2 Search Functionality
- The search bar filters clients by name only.
- Search is case-insensitive and supports partial matching.
4.3.3 Multi-Selection
- Users can select multiple clients by checking the checkboxes.
- There is no maximum limit on the number of clients that can be selected.
4.3.4 Role Assignment
- The "Add Role" dropdown allows assigning a Client Role to each selected client.
- Role assignment is optional when selecting existing clients.
4.4 Primary Client Logic
4.4.1 Automatic Primary Assignment
- When a single client (new or existing) is added to a project with no existing clients, that client automatically becomes the Primary Client.
- The Primary Client is indicated by a crown icon displayed next to their role badge.
4.4.2 Multiple Clients - Initial Assignment
- If multiple existing clients are selected when no Primary Client exists, the system displays the "Set Primary Client" modal.
- The user must explicitly designate one client as Primary before the action can be completed.
4.4.3 Existing Primary Client
- If a Primary Client already exists on the project, any additional clients are added as regular (non-primary) clients.
- The existing Primary Client remains unchanged.
4.4.4 Single Primary Client Rule
- Each project can have only one Primary Client at any time.
- Assigning a new Primary Client automatically converts the previous Primary Client to a regular client.
4.5 Invite Team Member Modal - New Member Tab
4.5.1 Modal Display
- The modal opens with "Invite New Member" tab active by default.
- All text input fields are empty with placeholder text.
4.5.2 Brand(s) Field
- Multi-select dropdown showing all agency brands.
- At least one brand must be selected (required field).
4.5.3 Role Dropdown
- Available roles: Admin, Project Manager, Supervising Editor, Editor.
- Selection is required.
4.5.4 Permissions Display
- Below the Role dropdown, the system displays a read-only list of permissions associated with the selected role.
- A "Show More" link expands the full permissions list if truncated.
4.5.5 Email Fields
- Work Email is required and receives the invitation email.
- Personal Email is optional.
4.5.6 Agency and Project Addition
- New team members are added to the agency AND automatically added to the current project.
4.6 Invite Team Member Modal - Existing Member Tab
4.6.1 Team Member List Display
- The list displays all team members from the agency.
- Team members already associated with this project are excluded from the list.
- Each row shows: Avatar, Name, Role, Email, "Select" button.
4.6.2 Selection Behavior
- Clicking "Select" toggles the button to "Selected" state.
- Multiple team members can be selected.
- Selected members retain their system role when added to the project.
4.7 Project Manager Role Logic
4.7.1 Single Project Manager Rule
- Each project can have only one Project Manager at any time.
- The Project Manager is established when a project is created (creator becomes PM for manual creation; Primary Lead Recipient becomes PM for lead form creation).
4.7.2 Role Conversion
- If a team member with "Project Manager" role is added to a project that already has a PM, they are automatically converted to "Team Member" role for this project.
- This conversion happens silently without a warning dialog.
- This applies whether adding a single team member or multiple team members at once.
4.8 All Users Section
4.8.1 Section Location and Display
- The All Users section is located in the Project Details sidebar.
- It displays below the Deliverables section (or other sidebar sections).
- The section header shows "All Users" with a users icon.
4.8.2 User Cards Grid
- Users are displayed as cards in a grid layout (2 columns).
- Each card shows: Avatar, Name, Role badge.
- For Clients: Role badge shows Client Role (e.g., "Bride", "Groom", "Client").
- For Team Members: Role badge shows their role (e.g., "Admin", "Team Member").
- For Contractors: Role badge shows "Contractor" with service type (e.g., "Contractor (Photography)") and role icon indicating Lead Shooter, Second Shooter, Assistant, or Drone Operator.
4.8.3 Primary Client Indicator
- The Primary Client displays a crown icon next to their role badge.
4.8.4 Sort Order
- Users are sorted in the following order:
- Current user ("You") - whether Project Owner, Admin, or Owner - displayed first
- Clients
- Contractors
- Team Members
4.8.5 Scrollable List
- If there are many users, the list becomes scrollable.
- There is no "Show More" button; all users are displayed in the scrollable area.
4.8.6 No Add Button
- There is no "+ Add" button in the All Users section.
- Users are added only through the "INVITE USERS" button in the Project Management panel.
4.9 User Card Popups
4.9.1 Popup Trigger
- Clicking on a user card opens the user card popup.
- The "View Details" action in the kebab menu also opens the popup.
4.9.2 Client Card Popup
- Displays: Avatar, Name, Role badge (with crown if Primary), Email (with icon), Phone number (with icon).
- Action buttons: "Remove from project" (red text with trash icon), "View Profile" (with arrow icon).
- "View Profile" navigates to the full Client Profile page.
4.9.3 Team Member Card Popup
- Displays: Avatar, Name, Role badge, Email (with icon), Phone number (with icon).
- Action buttons: "Remove from project" only (no "View Profile" button).
4.9.4 Contractor Card Popup
- Displays: Avatar (with role icon badge), Name (with role icon), Role badge showing service type, Email (with icon), Phone number (with icon).
- Action buttons: "Remove from project", "View Profile".
- "View Profile" navigates to the Contractor Profile page.
- Role icon indicates: Lead Shooter, Second Shooter, Assistant, or Drone Operator.
4.10 Kebab Menu Actions
4.10.1 Menu Options by User Type
User Type
View Details
Edit Role
Remove from Project
Client
✅
✅
✅
Team Member
✅
✅
✅
Contractor
✅
❌
✅
4.11 Edit Roles Modal
4.11.1 Modal Access
- Accessed via "Edit Role" action in the kebab menu for Clients or Team Members.
4.11.2 Modal Layout
- The modal has two tabs: "Team Members" and "Clients".
- The tab corresponding to the selected user type is active by default.
4.11.3 Clients Tab
- Displays all clients associated with the project.
- Each client row shows: Avatar, Name, Role dropdown (with crown icon for Primary).
- The role dropdown contains all Client Roles plus "Assign Primary Client" option.
- Note message displayed: "Each project can only have one primary client. If you assign a new primary client, the previous one will automatically be switched to a regular client."
4.11.4 Team Members Tab
- Displays all team members associated with the project.
- Each team member row shows: Avatar, Name, Role dropdown.
- The role dropdown contains two options: "Project Owner" and "Team Member".
- Changing a team member to "Project Owner" (Project Manager) converts the current PM to "Team Member".
4.11.5 Multiple Changes
- Users can make multiple role changes across clients and team members in a single session.
- Clicking "Save Changes" applies all changes.
- Clicking "Cancel" discards all changes and closes the modal.
4.12 Remove from Project
4.12.1 Confirmation Dialog
- Clicking "Remove from project" displays a confirmation dialog.
- Message: "Are you sure you want to remove [Name] from this project?"
- Buttons: "Cancel" and "Remove".
4.12.2 Primary Client Removal - Only Client
- If the Primary Client is the only client on the project, removal is blocked.
- Message: "This client cannot be removed as they are the only client on this project. Please add another client before removing."
- Button: "Cancel" only.
4.12.3 Primary Client Removal - Multiple Clients
- If the Primary Client is being removed but other clients exist, removal is blocked.
- Message: "This client is the Primary Client. Please assign another client as Primary before removing."
- Button: "Cancel" only.
4.12.4 Successful Removal
- Upon confirmation, the user is removed from the project.
- A success toast is displayed.
- The All Users section refreshes to reflect the change.
5. Field Details & Validations
5.1 Invite New Client Fields
Field
Type
Required
Max Length
Validation Rules
Default Value
Full Name
Text Input
Yes
100 chars
Not empty; Min 2 characters; Alphanumeric + spaces
Empty
Email Address
Email Input
Yes
255 chars
Valid format (RFC 5322); Unique within agency
Empty
Phone (Country Code)
Dropdown
Yes
N/A
Must select valid code
User's country or +1
Phone Number
Text Input
Yes
20 chars
Numeric only; 7-15 digits
Empty
Company
Dropdown
No
N/A
Must be existing company or empty
Empty
Client Role
Dropdown
No
N/A
Must be valid role from list
Empty
Street Address
Text Input
No
255 chars
Alphanumeric + special characters
Empty
Country
Text Input
No
N/A
Free text
Empty
State
Text Input
No
N/A
Free text
Empty
City
Text Input
No
100 chars
Alphanumeric + spaces
Empty
Zip/Postal Code
Text Input
No
20 chars
Alphanumeric
Empty
Internal Note
Textarea
No
1000 chars
Free text; Team-only visibility
Empty
5.2 Invite New Team Member Fields
Field
Type
Required
Max Length
Validation Rules
Default Value
Full Name
Text Input
Yes
100 chars
Not empty; Min 2 characters; Alphanumeric + spaces
Empty
Work Email
Email Input
Yes
255 chars
Valid format (RFC 5322); Unique within agency
Empty
Phone (Country Code)
Dropdown
Yes
N/A
Must select valid code
User's country or +1
Phone Number
Text Input
Yes
20 chars
Numeric only; 7-15 digits
Empty
Personal Email
Email Input
No
255 chars
Valid format if provided
Empty
Brand(s)
Multi-select Dropdown
Yes
N/A
At least one brand selected
Empty
Role
Dropdown
Yes
N/A
Must select from: Admin, Project Manager, Supervising Editor, Editor
Empty
5.3 Edit Roles - Client Fields
Field
Type
Required
Validation Rules
Client Role
Dropdown
No
Must be valid role from list or "Assign Primary Client"
5.4 Edit Roles - Team Member Fields
Field
Type
Required
Validation Rules
Role
Dropdown
Yes
Must be "Project Owner" or "Team Member"
6. Success Message Handling
Action
Success Message
Display Type
Duration
New client invited
"[Client Name] has been invited"
Toast Notification
3 seconds
Single existing client added
"[Client Name] added to project"
Toast Notification
3 seconds
Multiple existing clients added
"[Client Name 1] and [Client Name 2] added to project"
Toast Notification
3 seconds
New team member invited
"[Team Member Name] has been invited"
Toast Notification
3 seconds
Single existing team member added
"[Team Member Name] added to project"
Toast Notification
3 seconds
Multiple existing team members added
"[Name 1] and [Name 2] added to project"
Toast Notification
3 seconds
Roles updated
"Roles updated successfully"
Toast Notification
3 seconds
User removed from project
"[User Name] removed from project"
Toast Notification
3 seconds
7. Error Message Handling
7.1 Validation Errors
Field
Error Condition
Error Message
Display Location
Full Name
Empty
"Full name is required"
Below field
Full Name
< 2 characters
"Full name must be at least 2 characters"
Below field
Full Name
> 100 characters
"Full name cannot exceed 100 characters"
Below field
Email Address
Empty
"Email address is required"
Below field
Email Address
Invalid format
"Please enter a valid email address"
Below field
Email Address
Duplicate exists
"A client with this email address already exists"
Below field
Work Email
Duplicate exists
"This work email address is already associated with another team member"
Toast Notification (red)
Phone Number
Empty
"Phone number is required"
Below field
Phone Number
Invalid format
"Please enter a valid phone number"
Below field
Phone Number
< 7 digits
"Phone number must be at least 7 digits"
Below field
Phone Number
> 15 digits
"Phone number cannot exceed 15 digits"
Below field
Brand(s)
Not selected
"Please select at least one brand"
Below field
Role
Not selected
"Please select a role"
Below field
7.2 Business Rule Errors
Error Scenario
Error Message
Display Type
Remove only client (Primary)
"This client cannot be removed as they are the only client on this project. Please add another client before removing."
Dialog
Remove Primary Client (others exist)
"This client is the Primary Client. Please assign another client as Primary before removing."
Dialog
7.3 System Errors
Error Type
Error Message
Display Type
Network Error
"Unable to save. Please check your connection and try again."
Toast Notification
Server Error
"Something went wrong. Please try again later."
Toast Notification
8. Edge Cases
Edge Case
System Behavior
User tries to add client already on project
Client does not appear in the Existing Client list (excluded)
User tries to add team member already on project
Team member does not appear in the Existing Member list (excluded)
Adding PM when PM already exists
New team member is silently converted to "Team Member" role
Multiple PMs selected from existing list
All are converted to "Team Member" role since PM already exists
Single new client added (no existing clients)
Client automatically becomes Primary Client
Multiple clients added at once (no existing primary)
Set Primary Client modal appears requiring selection
User cancels Invite modal
Modal closes without saving; no data is retained
Network disconnects during submission
Error toast displayed; form data preserved for retry
Email already exists in archived records
Allow creation - archived records are separate from active
Changing Primary Client via Edit Roles
Previous Primary automatically becomes regular client
Removing last team member
Allowed (project can have no team members after PM)
User closes browser during modal
No data saved; user must restart the process
9. Acceptance Criteria
9.1 Invite Users Popup
- AC-1: Clicking "INVITE USERS" shall display a popup with "Add Client" and "Add Team Member" options.
- AC-2: Selecting an option shall open the corresponding invite modal.
- AC-3: Clicking outside the popup shall close it.
9.2 Invite Client - New
- AC-4: User shall be able to fill Full Name, Email, and Phone (required fields).
- AC-5: System shall validate email format and display error for invalid format.
- AC-6: System shall check for duplicate email and prevent creation if exists.
- AC-7: Phone number shall accept country code selection and validate format.
- AC-8: Optional fields (Company, Client Role, Address, Internal Note) shall be submittable when empty.
- AC-9: Internal Note shall have 1000 character limit.
- AC-10: Successful invite shall send invitation email to client.
- AC-11: Success toast shall display upon successful creation.
9.3 Invite Client - Existing
- AC-12: System shall display searchable list of all agency clients.
- AC-13: Clients already on the project shall be excluded from the list.
- AC-14: User shall be able to select multiple clients via checkboxes.
- AC-15: User shall be able to assign Client Role via "Add Role" dropdown.
- AC-16: Search shall filter clients by name.
9.4 Primary Client Logic
- AC-17: First client added to project shall automatically become Primary Client.
- AC-18: Primary Client shall be indicated by crown icon.
- AC-19: When multiple clients added with no existing Primary, Set Primary Client modal shall appear.
- AC-20: User shall be required to designate one Primary Client before completing multi-client addition.
- AC-21: Each project shall have exactly one Primary Client.
- AC-22: Assigning new Primary shall automatically convert previous Primary to regular client.
9.5 Invite Team Member - New
- AC-23: User shall be able to fill Full Name, Work Email, Phone, Brand(s), and Role (required fields).
- AC-24: System shall validate work email uniqueness and display error if duplicate exists.
- AC-25: Successful invite shall add team member to agency AND to the project.
- AC-26: Invitation email shall be sent to work email address.
- AC-27: Permissions for selected role shall be displayed (read-only).
9.6 Invite Team Member - Existing
- AC-28: System shall display searchable list of all agency team members.
- AC-29: Team members already on the project shall be excluded from the list.
- AC-30: User shall be able to select multiple team members via "Select" button.
- AC-31: "Select" button shall toggle to "Selected" state when clicked.
- AC-32: Team members shall retain their system role when added.
9.7 Project Manager Logic
- AC-33: Each project shall have only one Project Manager.
- AC-34: Adding a team member with PM role when PM exists shall convert them to Team Member.
- AC-35: Role conversion shall happen silently without warning dialog.
9.8 All Users Section
- AC-36: All Users section shall display in Project Details sidebar.
- AC-37: Users shall be displayed as cards in a grid layout.
- AC-38: Cards shall show Avatar, Name, and Role badge.
- AC-39: Primary Client shall display crown icon next to role badge.
- AC-40: Contractors shall display role icon (Lead Shooter, Second Shooter, etc.).
- AC-41: Users shall be sorted: Current user first, then Clients, Contractors, Team Members.
- AC-42: List shall be scrollable when many users exist.
9.9 User Card Popups
- AC-43: Clicking on user card shall open user card popup.
- AC-44: Client card shall show "Remove from project" and "View Profile" buttons.
- AC-45: Team Member card shall show only "Remove from project" button.
- AC-46: Contractor card shall show "Remove from project" and "View Profile" buttons.
- AC-47: "View Profile" shall navigate to the user's profile page.
9.10 Kebab Menu and Actions
- AC-48: Client kebab menu shall have: View Details, Edit Role, Remove from Project.
- AC-49: Team Member kebab menu shall have: View Details, Edit Role, Remove from Project.
- AC-50: Contractor kebab menu shall have: View Details, Remove from Project.
9.11 Edit Roles Modal
- AC-51: Edit Roles modal shall have Team Members and Clients tabs.
- AC-52: Clients tab shall allow changing Client Role and Primary designation.
- AC-53: Team Members tab shall allow changing between Project Owner and Team Member.
- AC-54: Changing Primary Client shall automatically update previous Primary.
- AC-55: Multiple role changes shall be saveable in single action.
9.12 Remove from Project
- AC-56: Remove action shall display confirmation dialog.
- AC-57: Removing only client (Primary) shall be blocked with appropriate message.
- AC-58: Removing Primary Client when others exist shall be blocked until new Primary assigned.
- AC-59: Successful removal shall display success toast.
- AC-60: All Users section shall refresh after removal.
9.13 Activity Logging
- AC-61: Client invitation shall be logged in Activity Tab.
- AC-62: Team member invitation shall be logged in Activity Tab.
- AC-63: User removal shall be logged in Activity Tab.
- AC-64: Role changes shall be logged in Activity Tab.
10. Dependencies
Dependency Type
Dependency Name
Description
Impact if Unavailable
Internal Module
Project Details
Parent page where Invite Users is accessed
Cannot access Invite Users
Internal Module
Client Module
Source for existing clients list
Cannot add existing clients
Internal Module
Team Member Module
Source for existing team members list
Cannot add existing team members
Internal Module
Company Module
Source for company dropdown
Cannot associate clients with companies
Internal Module
Activity Tab
Logs user-related activities
Activity not logged
Internal Module
Leads & Client Management
Client creation and management
Cannot create new clients
External Service
Email Service
Sends invitation emails
Invitations not sent
Database
Clients Table
Stores client records
Client operations fail
Database
Team Members Table
Stores team member records
Team member operations fail
Database
Project Users Table
Stores project-user associations
Cannot associate users with projects
11. References
- Figma Designs: [To be added]
- Related FRD: Create Client/Company (FRD #1 - Leads & Client Management)
Appendix A: Client Role Reference
A.1 Wedding Roles
Bride, Groom, Spouse, Fiancé(e), Mother of the Bride, Father of the Bride, Mother of the Groom, Father of the Groom, Maid of Honor, Matron of Honor, Best Man, Bridesmaid, Groomsman, Flower Girl, Ring Bearer, Wedding Planner, Officiant, Guest, Sibling (Sister/Brother), Parent, Friend, Guest of Honor, Vendor
A.2 Corporate/Brand Shoot Roles
Project Manager, Marketing Manager, Brand Director, Producer, Creative Director, Stakeholder, Operations Lead, Executive (CEO/Founder), PR Contact, Internal Contact, Event Coordinator, Assistant
A.3 Music Video Roles
Artist/Performer, Manager/Agent, Label Representative, Director, Producer, Choreographer, Stylist/MUA, Set Designer, Friend/Guest Appearance, Talent Coordinator
A.4 Real Estate Roles
Realtor, Homeowner, Property Manager, Listing Agent, Buyer/Client, Broker, Marketing Coordinator, Developer, Builder, Stager
A.5 General Roles
Main Contact, Secondary Contact, Assistant, Client Representative, Internal Team, External Collaborator, Admin, Guest, Coordinator, Contact Person, Referrer
Appendix B: Contractor Roles Reference
Role
Icon
Description
Lead Shooter
Crown icon
Primary photographer/videographer for the event
Second Shooter
Secondary icon
Supporting photographer/videographer
Assistant
Assistant icon
General assistance during shoot
Drone Operator
Drone icon
Operates drone for aerial shots
Appendix C: Team Member Roles Reference
Role
Description
Admin
Full administrative access
Project Manager
Manages project, primary owner
Supervising Editor
Oversees editing work
Editor
Handles post-production editing
All Users
Functional Requirements Document (FRD)
All Users Section
Module Name: All Users Section
Version: 1.2
Last Updated: May 28, 2026
Status: Draft
1. Module Overview
1.1 Module Name
All Users Section
1.2 Purpose
The All Users Section provides a centralized view of all users associated with a project within the Project Details sidebar. This module enables agency users to view, manage, and perform actions on clients, team members, and contractors assigned to a project. It includes functionality for viewing user details, editing roles (for clients and team members), and removing users from the project with appropriate confirmation dialogs based on user type and payment status.
1.3 User Scope
User Type
Scope
Removal Behavior
Client
Project-level only
Removing from any tab removes from entire project
Team Member
Project-level only
Removing from any tab removes from entire project. Agency Owner and Admin cannot be removed.
Contractor
Event-level only
Cannot be removed from All Users section. Contractors can only be removed from Events tab.
1.5 Business Goals
- Provide a single, consolidated view of all users associated with a project.
- Enable quick access to user details without navigating away from Project Details.
- Allow authorized users to edit client and team member roles directly from the project context.
- Support Primary Client management through the Edit Roles functionality.
- Facilitate user removal from projects with appropriate safeguards for Primary Clients.
- Provide contextual removal dialogs for contractors based on payment status.
- Maintain visual distinction between user types (Clients, Team Members, Contractors) through role badges and icons.
1.6 Module Location
Location
Description
Project Details → Sidebar → All Users Section
Displayed below the Deliverables section in the Project Details sidebar
2. User Roles & Permissions
Note: "Team Members" is a category that includes Agency Owner, Admin, and Project Manager. In the Edit Roles modal, "Project Owner" is a secondary role that can be assigned to any team member, and "Team Member" refers to those who are not the Project Owner.
2.1 View Permissions
Role
View All Users Section
Agency Owner
✅ Yes
Admin
✅ Yes
Project Manager
✅ Yes
2.2 Action Permissions
Role
View Details
Edit Role
Remove from Project
Agency Owner
✅ Yes
✅ Yes
❌ Cannot be removed
Admin
✅ Yes
✅ Yes
❌ Cannot be removed
Project Manager
✅ Yes
✅ Yes
✅ Yes
2.3 Other Portals
Portal
Access
Client Portal
❌ No access
Contractor Portal
❌ No access
3. User Flow
3.1 Viewing All Users
3.1.1 The user navigates to the Project Details page.
3.1.2 The user scrolls down the sidebar to locate the "All Users" section.
3.1.3 The section displays a grid of user cards showing all users associated with the project.
3.1.4 The user can scroll within the section if there are many users.
3.2 Viewing User Details
3.2.1 The user clicks on a user card OR clicks "View Details" from the kebab menu.
3.2.2 The system displays a user card popup with detailed information.
3.2.3 The popup displays: Avatar, Name, Role badge, Email, Phone number.
3.2.4 For Clients and Contractors, a "View Profile" button is available to navigate to their full profile.
3.2.5 The user can close the popup by clicking the X button or clicking outside.
3.3 Editing Roles
3.3.1 The user clicks the kebab (3-dot) menu on a Client or Team Member card.
3.3.2 The user selects "Edit Role" from the menu options.
3.3.3 The system displays the Edit Roles modal with two tabs: "Team Members" and "Clients".
3.3.4 The tab corresponding to the selected user type is active by default.
3.3.5 The user makes role changes using the dropdown(s).
3.3.6 The user clicks "Save Changes" to apply or "Cancel" to discard changes.
3.4 Removing User from Project
3.4.1 The user clicks on a user card to open the popup OR accesses the kebab menu.
3.4.2 The user clicks "Remove from project" button/option (if available).
3.4.3 The system displays an appropriate dialog based on user type and conditions:
- Clients: Simple confirmation dialog, or blocking dialog if Primary Client or only client
- Agency Owner: Remove option is hidden (cannot be removed)
- Admin: Remove option is hidden (cannot be removed)
- Project Manager: Simple confirmation dialog, or warning dialog if pending signatures exist
- Contractors: Remove option is hidden (can only be removed from Events tab)
3.4.4 For blocked removals (Primary Client scenarios), the user can only click Cancel.
3.4.5 For allowed removals, the user confirms to remove or cancels the action.
3.4.6 Upon confirmation, the user is removed and the All Users section refreshes.
3.4.7 If the removed Project Manager is the Project Owner, the Agency Owner automatically becomes the new Project Owner.
3.4.8 A notification is sent to the Agency Owner when they are auto-assigned as Project Owner.
4. Functional Logic
4.1 All Users Section Display
4.1.1 Section Header
- The section displays a header with a users icon and "All Users" text.
- There is no "+ Add" button in the section header.
- Users are added to the project only through the "INVITE USERS" button in the Project Management panel.
4.1.2 User Cards Grid
- Users are displayed as cards in a 2-column grid layout.
- Each card displays: Avatar, Name, Role badge.
- Cards include a kebab (3-dot) menu icon for additional actions.
4.1.3 Sort Order
Users are displayed in the following order:
- Current user ("You") - Always displayed first, regardless of role
- Clients - All clients associated with the project
- Contractors - All contractors assigned to project events
- Team Members - Agency Owner, Admin, and Project Managers on the project
4.1.4 Scrollable List
- If there are many users, the section becomes scrollable.
- There is no "Show More" button; all users are visible within the scrollable area.
- The section maintains a consistent height with internal scrolling.
4.2 User Card Display - By User Type
4.2.1 Client Cards
Element
Display
Avatar
Profile photo or initials
Name
Full name
Role Badge
Client Role (e.g., "Bride", "Groom", "Client")
Primary Indicator
Crown icon next to role badge (if Primary Client)
Kebab Menu
✅ Visible
4.2.2 Team Member Cards
Element
Display
Avatar
Profile photo or initials
Name
Full name (shows "You" label if current user)
Role Badge
Team role: "Agency Owner", "Admin", or "Project Manager"
Kebab Menu
✅ Visible
4.2.3 Contractor Cards
Element
Display
Avatar
Profile photo or initials with role icon badge
Name
Full name with role icon
Role Badge
"Contractor" with service type (e.g., "Contractor (Photography)")
Role Icon
Indicates: Lead Shooter, Second Shooter, Assistant, or Drone Operator
Kebab Menu
✅ Visible
4.3 Primary Client Indicator
4.3.1 Crown Icon Display
- The Primary Client displays a crown icon next to their role badge on the user card.
- The crown icon is also displayed in the user card popup.
- The crown icon is displayed in the Edit Roles modal next to the Primary Client.
4.3.2 Single Primary Rule
- Only one client can be the Primary Client at any time.
- The crown icon always indicates the current Primary Client.
4.4 Kebab Menu Actions
4.4.1 Menu Options by User Type
User Type
View Details
Edit Role
Remove from Project
Client
✅
✅
✅
Agency Owner
✅
✅
❌ Hidden
Admin
✅
✅
❌ Hidden
Project Manager
✅
✅
✅
Contractor
✅
❌
❌ Hidden
Note:
- Agency Owner and Admin are automatically added to every project and cannot be removed.
- Contractors can only be removed from the Events tab, not from the All Users section.
4.4.2 Permission-Based Display
- Agency Owner, Admin, and Project Manager see all applicable options based on user type.
- Remove option is hidden for Agency Owner and Admin (they cannot be removed).
- Remove option is hidden for Contractors (they can only be removed from Events tab).
4.5 User Card Popups
4.5.1 Popup Trigger
- Clicking on a user card opens the user card popup.
- Clicking "View Details" from the kebab menu also opens the popup.
4.5.2 Client Card Popup
Element
Description
Avatar
Large profile photo centered at top
Name
Full name displayed below avatar
Role Badge
Client Role with crown icon if Primary
Email address with mail icon
Phone Number
Phone number with phone icon
Remove Button
"Remove from project" - Red text with trash icon
View Profile Button
"View Profile" with arrow icon - Navigates to Client Profile page
4.5.3 Team Member Card Popup
Element
Description
Avatar
Large profile photo centered at top
Name
Full name displayed below avatar
Role Badge
Team role (e.g., "Agency Owner", "Admin", "Project Manager")
Email address with mail icon
Phone Number
Phone number with phone icon
Remove Button
"Remove from project" - Red text with trash icon. Hidden for Agency Owner and Admin.
View Profile Button
❌ Not displayed for Team Members
4.5.4 Contractor Card Popup
Element
Description
Avatar
Large profile photo with role icon badge (notification-style)
Name
Full name with role icon next to it
Role Badge
Service type (e.g., "Contractor (Photography)")
Email address with mail icon
Phone Number
Phone number with phone icon
Remove Button
❌ Hidden - Contractors can only be removed from Events tab
View Profile Button
"View Profile" with arrow icon - Navigates to Contractor Profile page
4.5.5 Popup Close Actions
- Click the X button in the top-right corner.
- Click outside the popup area.
4.6 Edit Roles Modal
4.6.1 Modal Access
- Accessed by clicking "Edit Role" from the kebab menu on a Client or Team Member card.
- Only available for users with edit permissions (Agency Owner, Admin, Project Manager).
4.6.2 Modal Layout
- Modal title: "Edit Roles"
- Two tabs: "Team Members" and "Clients"
- The tab corresponding to the selected user type is active by default.
- Cancel and "Save Changes" buttons at the bottom.
4.6.3 Clients Tab
Display:
- Lists all clients associated with the project.
- Each client row shows: Avatar, Name, Role dropdown (with crown icon for Primary).
Note Message:
- Yellow info box displayed at top.
- Message: "Note: Each project can only have one primary client. If you assign a new primary client, the previous one will automatically be switched to a regular client."
Role Dropdown Options:
- All Client Roles (Bride, Groom, Wedding Planner, etc.)
- "Assign Primary Client" option - Selecting this makes the client the Primary Client.
Primary Client Behavior:
- Current Primary Client shows crown icon next to their role dropdown.
- Selecting "Assign Primary Client" for a different client automatically removes Primary status from the previous one.
4.6.4 Team Members Tab
Display:
- Lists all team members (Agency Owner, Admin, Project Managers) associated with the project.
- Each team member row shows: Avatar, Name, Role dropdown.
Role Dropdown Options:
- Project Owner
- Team Member (not the Project Owner)
Project Owner Behavior:
- Only one team member can be the "Project Owner" at a time.
- Any team member (Agency Owner, Admin, or Project Manager) can be assigned as Project Owner.
- Changing the Project Owner automatically converts the previous Project Owner to "Team Member" designation.
4.6.5 Multiple Changes
- Users can switch between tabs and make changes to both clients and team members.
- All changes are applied together when "Save Changes" is clicked.
- Clicking "Cancel" discards all unsaved changes.
4.7 Remove from Project
4.7.1 Remove Action Access
- Click "Remove from project" button in the user card popup.
- Click "Remove from Project" option in the kebab menu.
4.7.2 Client Removal - Simple Confirmation
When removing a client who is NOT the Primary Client, or a non-primary client:
Element
Content
Title
Remove Client?
Message
Are you sure you want to remove [Client Name] from this project?
Primary Button
Remove
Secondary Button
Cancel
On Confirm:
- Client is removed from the project.
- Success toast is displayed.
- All Users section refreshes.
4.7.3 Client Removal - Blocking (Only Client on Project)
When attempting to remove a client who is the only client on the project:
Element
Content
Title
Cannot Remove Client
Message
This client is the only client on this project and cannot be removed.
Hint Box (Yellow)
⚠️ Please add another client to the project before proceeding.
Button
Cancel
Behavior:
- Removal is blocked.
- User must add another client first, then remove this one.
4.7.4 Client Removal - Blocking (Primary Client with Others)
When attempting to remove the Primary Client while other clients exist on the project:
Element
Content
Title
Cannot Remove Client
Message
This client is the primary contact on this project and cannot be removed.
Hint Box (Yellow)
⚠️ Please assign another client as primary before proceeding.
Button
Cancel
Behavior:
- Removal is blocked.
- User must first assign another client as Primary (via Edit Roles), then remove this client.
4.7.5 Team Member Removal - Restrictions
Agency Owner and Admin cannot be removed from projects.
- They are automatically added to every project by default.
- The "Remove from Project" option is hidden from the kebab menu.
- The "Remove from project" button is hidden from the user card popup.
Only Project Managers can be removed from projects.
4.7.6 Team Member Removal - Simple Confirmation
When: Removing a Project Manager with no pending signature conditions.
Element
Content
Title
Remove Team Member?
Message
Are you sure you want to remove [Team Member Name] from this project?
Primary Button
Remove
Secondary Button
Cancel
On Confirm:
- Team member is removed from the project.
- Success toast: "[Team Member Name] removed successfully"
- All Users section refreshes.
4.7.7 Team Member Removal - Pending Signature Warning
When: ALL of the following conditions are true:
- Primary Signatory setting (in Settings > General) is set to "Project Owner"
- The team member being removed IS the Project Owner
- There are pending signatures for counter-sign (Service Agreements, Client Contracts, or Proposals)
Element
Content
Title
Remove Team Member?
Message
This user has pending signatures for counter-sign: [X] Service Agreement(s), [Y] Client Contract(s), [Z] Proposal(s). Removing them will require you to send new documents for signature. Are you sure you want to proceed?
Primary Button
Remove
Secondary Button
Cancel
Note: Only document types with count > 0 are displayed in the message.
Examples:
- 2 Service Agreements pending → "2 Service Agreement(s)"
- 2 Service Agreements + 1 Proposal → "2 Service Agreement(s), 1 Proposal(s)"
- 1 of each → "1 Service Agreement(s), 1 Client Contract(s), 1 Proposal(s)"
On Confirm:
- Team member is removed from the project.
- Pending signature documents remain pending (agency can decide to request new signatures or send fresh documents).
- Success toast: "[Team Member Name] removed successfully"
- All Users section refreshes.
4.7.8 Project Owner Auto-Assignment
When the removed team member is the Project Owner:
- The Agency Owner automatically becomes the new Project Owner.
- A notification is sent to the Agency Owner informing them of this assignment.
- Success toast: "[Team Member Name] removed successfully"
4.7.9 Contractor Removal - All Users Section
Contractors cannot be removed from the All Users section.
- The "Remove from Project" option is hidden from the kebab menu.
- The "Remove from project" button is hidden from the contractor user card popup.
- Contractors can only be removed from the Events tab (see Events Tab FRD for details).
Note: Contractor removal functionality with payment status dialogs is documented in the Events Tab FRD.
5. Field Details & Validations
5.1 Edit Roles - Clients Tab Fields
Field
Type
Required
Validation Rules
Client Role
Dropdown
No
Must be valid role from predefined list
Assign Primary Client
Dropdown option
No
Only one client can be Primary at a time
5.2 Edit Roles - Team Members Tab Fields
Field
Type
Required
Validation Rules
Role
Dropdown
Yes
Must be "Project Owner" or "Team Member" (not Project Owner)
Note: Only one team member can be designated as Project Owner at a time.
5.3 User Card Popup Fields
Field
Display Format
Description
Name
Text
User's full name
Role
Badge
Role with appropriate styling
Text with icon
Email address (clickable)
Phone
Text with icon
Phone number with country code
6. Success Message Handling
Action
Success Message
Display Type
Duration
Roles updated
"Roles updated successfully"
Toast Notification
3 seconds
User removed from project
"[User Name] removed successfully"
Toast Notification
3 seconds
Primary Client changed
"Primary client updated successfully"
Toast Notification
3 seconds
7. Error Message Handling
7.1 Client Removal Blocking Dialogs
Scenario
Title
Message
Hint Box
Button
Only client on project
Cannot Remove Client
This client is the only client on this project and cannot be removed.
⚠️ Please add another client to the project before proceeding.
Cancel
Primary Client (others exist)
Cannot Remove Client
This client is the primary contact on this project and cannot be removed.
⚠️ Please assign another client as primary before proceeding.
Cancel
7.2 System Errors
Error Type
Error Message
Display Type
Network Error
"Unable to save changes. Please check your connection and try again."
Toast Notification
Server Error
"Something went wrong. Please try again later."
Toast Notification
Save Failed
"Failed to update roles. Please try again."
Toast Notification
Removal Failed
"Failed to remove user. Please try again."
Toast Notification
8. Edge Cases
Edge Case
System Behavior
No users on project
All Users section displays empty state or is hidden
Only current user on project
Shows only the current user's card
Attempting to remove Agency Owner
Remove option is hidden; cannot be removed
Attempting to remove Admin
Remove option is hidden; cannot be removed
Removing Project Manager
Allowed with confirmation dialog
Removing Project Manager who is Project Owner
Allowed; Agency Owner automatically becomes Project Owner; notification sent
Removing Project Manager with pending signatures
Warning shown with pending count; user can still proceed with removal
User removes themselves (if Project Manager)
Allowed with confirmation; user loses access to project after removal
Editing role while another user edits
Last save wins; no conflict resolution
Network disconnects during save
Error toast displayed; changes not saved; modal remains open for retry
Changing Primary Client and removing old Primary in same session
Changes processed in order; new Primary assigned first, then removal allowed
Contractor in All Users section
Remove option is hidden; must be removed from Events tab
Very long user name
Name truncated with ellipsis on card; full name shown in popup
User card popup opened via kebab while another popup is open
Previous popup closes; new popup opens
Removing Primary Client who is only client
Blocked with "Cannot Remove Client" dialog and hint to add another client
Removing Primary Client when others exist
Blocked with "Cannot Remove Client" dialog and hint to assign new primary
Primary Signatory set to Project Owner with pending docs
Warning dialog shows count of pending Service Agreements, Client Contracts, and Proposals
Primary Signatory not set to Project Owner
Simple confirmation dialog shown regardless of pending documents
9. Acceptance Criteria
9.1 All Users Section Display
- AC-1: All Users section shall display in Project Details sidebar below Deliverables section.
- AC-2: Section shall display all users associated with the project in a card grid layout.
- AC-3: Section shall be scrollable when many users exist.
- AC-4: No "+ Add" button shall appear in the section header.
- AC-5: Current user shall always appear first in the list.
- AC-6: Users shall be sorted: Current user, Clients, Contractors, Team Members.
9.2 User Cards
- AC-7: Each user card shall display Avatar, Name, and Role badge.
- AC-8: Client cards shall display Client Role (e.g., "Bride", "Groom").
- AC-9: Primary Client shall display crown icon next to role badge.
- AC-10: Contractor cards shall display service type and role icon.
- AC-11: Team Member cards shall display team role ("Agency Owner", "Admin", or "Project Manager").
- AC-12: Each card shall have a kebab (3-dot) menu.
9.3 User Card Popups
- AC-13: Clicking on user card shall open user card popup.
- AC-14: Popup shall display Avatar, Name, Role, Email, and Phone.
- AC-15: Client popup shall have "Remove from project" and "View Profile" buttons.
- AC-16: Agency Owner popup shall NOT have "Remove from project" button (hidden).
- AC-17: Admin popup shall NOT have "Remove from project" button (hidden).
- AC-18: Project Manager popup shall have "Remove from project" button.
- AC-19: Contractor popup shall have "View Profile" button only; "Remove from project" shall be hidden.
- AC-20: "View Profile" shall navigate to the user's profile page.
- AC-21: Popup shall close when X button clicked or clicking outside.
9.4 Kebab Menu
- AC-22: Client kebab menu shall show: View Details, Edit Role, Remove from Project.
- AC-23: Agency Owner kebab menu shall show: View Details, Edit Role (Remove from Project hidden).
- AC-24: Admin kebab menu shall show: View Details, Edit Role (Remove from Project hidden).
- AC-25: Project Manager kebab menu shall show: View Details, Edit Role, Remove from Project.
- AC-26: Contractor kebab menu shall show: View Details only (Edit Role and Remove from Project hidden).
- AC-27: Users without edit permissions shall only see "View Details" option.
9.5 Edit Roles Modal
- AC-28: Edit Roles modal shall open when "Edit Role" is clicked.
- AC-29: Modal shall have "Team Members" and "Clients" tabs.
- AC-30: Correct tab shall be active based on selected user type.
- AC-31: Clients tab shall display note about Primary Client rule.
- AC-32: Clients tab shall allow role change and Primary Client assignment.
- AC-33: Team Members tab shall allow Project Owner designation change.
- AC-34: Changing Primary Client shall automatically update previous Primary.
- AC-35: Changing Project Owner shall automatically update previous Project Owner to regular team member.
- AC-36: "Save Changes" shall apply all changes.
- AC-37: "Cancel" shall discard all changes.
9.6 Remove from Project - General
- AC-38: Remove action shall be accessible from user card popup and kebab menu (where applicable).
- AC-39: Agency Owner and Admin shall NOT have remove option visible.
- AC-40: Confirmation dialog shall display user's name.
- AC-41: Successful removal shall display "[User Name] removed successfully" toast.
- AC-42: All Users section shall refresh after removal.
9.7 Remove from Project - Client
- AC-43: Removing non-primary client shall show simple confirmation dialog.
- AC-44: Removing only client on project shall be blocked with "Cannot Remove Client" dialog.
- AC-45: Blocking dialog for only client shall display hint "Please add another client to the project before proceeding."
- AC-46: Removing Primary Client when others exist shall be blocked with "Cannot Remove Client" dialog.
- AC-47: Blocking dialog for Primary Client shall display hint "Please assign another client as primary before proceeding."
- AC-48: Blocking dialogs shall have only Cancel button (no Remove option).
9.8 Remove from Project - Team Member
- AC-49: Agency Owner shall NOT be removable from projects.
- AC-50: Admin shall NOT be removable from projects.
- AC-51: Project Manager shall be removable with confirmation dialog.
- AC-52: Removing Project Manager who is Project Owner shall auto-assign Agency Owner as new Project Owner.
- AC-53: Agency Owner shall receive notification when auto-assigned as Project Owner.
- AC-54: When Primary Signatory = Project Owner AND team member is Project Owner AND pending signatures exist, warning dialog shall be displayed.
- AC-55: Warning dialog shall show count of pending Service Agreements, Client Contracts, and Proposals.
- AC-56: Warning dialog shall allow user to proceed with removal (not blocking).
9.9 Remove from Project - Contractor
- AC-57: Contractors shall NOT be removable from All Users section.
- AC-58: "Remove from Project" option shall be hidden from contractor kebab menu.
- AC-59: "Remove from project" button shall be hidden from contractor popup.
- AC-60: Contractors can only be removed from Events tab (see Events Tab FRD).
9.10 Permissions
- AC-61: All agency users on project shall be able to view All Users section.
- AC-62: Only Agency Owner, Admin, and Project Manager shall be able to edit roles.
- AC-63: Only Agency Owner, Admin, and Project Manager shall be able to remove users.
- AC-64: Agency Owner and Admin cannot be removed (option hidden).
9.11 Activity Logging
- AC-66: Role changes shall be logged in Activity Tab.
- AC-67: User removal shall be logged in Activity Tab.
- AC-68: Primary Client changes shall be logged in Activity Tab.
- AC-69: Project Owner auto-assignment shall be logged in Activity Tab.
10. Dependencies
Dependency Type
Dependency Name
Description
Impact if Unavailable
Internal Module
Project Details
Parent page containing All Users section
Section not accessible
Internal Module
Invite Users
Adds users to the project
Cannot add new users
Internal Module
Client Profile
Navigation target for "View Profile"
Cannot view client details
Internal Module
Contractor Profile
Navigation target for "View Profile"
Cannot view contractor details
Internal Module
Activity Tab
Logs user-related activities
Activity not logged
Database
Project Users Table
Stores project-user associations
Cannot display or manage users
Database
Clients Table
Source for client data
Client information not available
Database
Team Members Table
Source for team member data
Team member information not available
Database
Contractors Table
Source for contractor data
Contractor information not available
11. References
- Figma Designs: [To be added]
- Related FRD: Invite Users Module
Appendix A: Contractor Roles Reference
Role
Icon
Description
Lead Shooter
Crown icon
Primary photographer/videographer for the event
Second Shooter
Secondary icon
Supporting photographer/videographer
Assistant
Assistant icon
General assistance during shoot
Drone Operator
Drone icon
Operates drone for aerial shots
Appendix B: Client Roles Reference
B.1 Wedding Roles
Bride, Groom, Spouse, Fiancé(e), Mother of the Bride, Father of the Bride, Mother of the Groom, Father of the Groom, Maid of Honor, Matron of Honor, Best Man, Bridesmaid, Groomsman, Flower Girl, Ring Bearer, Wedding Planner, Officiant, Guest, Sibling (Sister/Brother), Parent, Friend, Guest of Honor, Vendor
B.2 Corporate/Brand Shoot Roles
Project Manager, Marketing Manager, Brand Director, Producer, Creative Director, Stakeholder, Operations Lead, Executive (CEO/Founder), PR Contact, Internal Contact, Event Coordinator, Assistant
B.3 Music Video Roles
Artist/Performer, Manager/Agent, Label Representative, Director, Producer, Choreographer, Stylist/MUA, Set Designer, Friend/Guest Appearance, Talent Coordinator
B.4 Real Estate Roles
Realtor, Homeowner, Property Manager, Listing Agent, Buyer/Client, Broker, Marketing Coordinator, Developer, Builder, Stager
B.5 General Roles
Main Contact, Secondary Contact, Assistant, Client Representative, Internal Team, External Collaborator, Admin, Guest, Coordinator, Contact Person, Referrer
Appendix C: Team Member Roles for Edit Roles Modal
Role Option
Description
Project Owner
Primary owner responsible for the project. Can be any team member (Agency Owner, Admin, or Project Manager). Only one per project.
Team Member
Team member who is not designated as the Project Owner.
Note: The "Team Members" category includes Agency Owner, Admin, and Project Manager. The Edit Roles modal allows assigning one of them as the "Project Owner" for the project.
Archive Event & Project
Functional Requirements Document (FRD)
Archive & Unarchive - Projects & Events
Module Name: Archive & Unarchive Functionality
Version: 1.0
Last Updated: May 28, 2026
Status: Draft
1. Module Overview
1.1 Purpose
This module defines the functionality for archiving and unarchiving projects and events within the Project Details module. Archiving allows agency users to hide projects or events from active lists while preserving all associated data, documents, and records. Archived items become read-only, with all automations and workflows paused. Unarchiving restores the item to its previous working state without requiring users to recreate or resend anything.
1.2 Scope
This FRD covers:
- Archive and unarchive actions from the Project Management widget
- Context-based archive behavior (project-level vs event-level)
- Archive Project modal and Archive Event modal
- Cannot Archive Primary Event blocking modal
- Unarchive confirmation dialog
- Archived state behavior (read-only, document expiry, contractor handling)
- Partial archive behavior (some events archived)
- Archived listings for projects and events
- Client Portal and Contractor Portal behavior for archived items
- Auto-primary event assignment logic
1.3 Key Definitions
Term
Definition
Archive
Hide a project or event from active lists while preserving all data. Read-only state.
Unarchive
Restore an archived project or event to its previous working state.
Partial Archive
When only some events in a project are archived individually, while others remain active.
Primary Event
The first event of a project, linked to invoice payment schedules.
1.4 Module Location
Location
Description
Project Details > Project Management Widget
Archive/Unarchive button (context-dependent)
Projects Listing > Trash Icon
Access to Archived Projects page
Events Listing > Pipeline > Archived Tab
Access to Archived Events list
2. User Roles & Permissions
Role
Archive
Unarchive
Agency Owner
✅ Yes
✅ Yes
Admin
✅ Yes
✅ Yes
Project Owner (assigned)
✅ Yes
✅ Yes
Project Manager (not Project Owner)
❌ No
❌ No
Note: Only Project Managers who are assigned as the Project Owner of a specific project can archive/unarchive that project or its events.
3. User Flow
3.1 Archiving a Project (Overview Tab)
- User navigates to Project Details and stays on the Overview tab.
- User opens the Project Management widget.
- User clicks the "Archive" button.
- System evaluates event count and primary event status.
- System displays the appropriate modal (Archive Project modal or blocking modal).
- User reviews impact notice, sets notification toggles, and optionally adds internal notes.
- User clicks "Confirm".
- Project is archived and moved to the Archived Projects page.
- Success toast is displayed.
3.2 Archiving an Event (Events Tab)
- User navigates to Project Details and switches to the Events tab.
- User selects the specific event.
- User opens the Project Management widget.
- The "Archive" button now applies to the selected event.
- User clicks the "Archive" button.
- System evaluates event count and primary event status.
- System displays the Archive Event modal or blocking modal.
- User reviews, sets toggles, adds notes, and clicks "Confirm".
- Event is archived and moved to the Archived Events list.
- Success toast is displayed.
3.3 Unarchiving a Project
- User navigates to the Archived Projects page (via trash icon on Projects listing).
- User clicks "View Details" on the archived project.
- User opens the Project Management widget.
- The button now shows "Unarchive".
- User clicks "Unarchive".
- System displays the Unarchive confirmation dialog.
- User sets notification toggles and clicks "Unarchive".
- Project is restored to its previous state (events restored to their pipeline stages).
- Success toast is displayed.
3.4 Unarchiving an Event
- User navigates to Project Details and switches to the Events tab.
- User selects the archived event.
- User opens the Project Management widget.
- The button shows "Unarchive".
- User clicks "Unarchive".
- System displays the Unarchive confirmation dialog.
- User sets notification toggles and clicks "Unarchive".
- Event is restored to its previous pipeline stage.
- Success toast is displayed.
4. Functional Logic
4.1 Archive Button - Dynamic Behavior
4.1.1 Context-Based Action
The Archive/Unarchive button on the Project Management widget changes behavior based on the current tab and archive status.
Current Tab
Item Status
Button Label
Action
Overview
Project active
Archive
Archives entire project
Overview
Project archived
Unarchive
Unarchives entire project
Events tab (event selected)
Event active
Archive
Archives selected event
Events tab (event selected)
Event archived
Unarchive
Unarchives selected event
4.1.2 Partial Archive Button State
- If a project has some events archived but NOT all, the project is still considered active.
- On the Overview tab, the button still shows "Archive" (since the entire project is not archived).
4.2 Archive Decision Logic
The archive flow follows the same event-count and primary-event logic as event cancellation.
4.2.1 One Event in Project
Scenario
Result
Archiving the only event
✅ Allowed. Archives the entire project. Archive Project modal is shown. No "Create TBD Event" option.
Note: For a single event that is primary with an invoice, archiving is allowed (blocking does not apply since there is no other event to assign as primary).
4.2.2 Two Events in Project
Is it the primary event?
Result
No (non-primary)
✅ Allowed. Archive Event modal opens normally.
Yes (primary)
✅ Allowed. The remaining event auto-becomes primary. Archive Event modal shows info message about auto-assignment.
Note: At 2 events, invoice existence does not matter — archiving is never blocked.
4.2.3 Three or More Events in Project
Is it the primary event?
Invoice generated?
Result
No (non-primary)
N/A
✅ Allowed. Archive Event modal opens normally.
Yes (primary)
No invoice
✅ Allowed. System auto-assigns another event as primary. Archive Event modal opens normally.
Yes (primary)
Yes, invoice exists
🚫 BLOCKED. "Cannot Archive Primary Event" modal shown. User must change primary event first.
4.2.4 Auto-Primary Assignment Logic
When the primary event is archived (or cancelled) and another event must become primary:
- The system assigns the chronologically nearest upcoming event (by event date) as the new primary event.
- This logic is consistent across both Archive and Cancel operations.
- This applies to the 3+ events scenario. For the 2 events scenario, the single remaining event automatically becomes primary.
4.3 Archive Project Modal
Displayed when archiving a project from the Overview tab.
4.3.1 Header Section
Field
Description
Title
Archive Project
Project Name
Name of the project (e.g., "Smith Wedding Package")
Events
List of all events in the project (e.g., "Engagement Shoot, Bridal Portraits, Wedding Day")
Invoice
Financial summary: Total, Paid, Balance
Invoice Display:
- Single Invoice: Total: $8,500 | Paid: $3,000 | Balance: $5,500
- Multiple Invoices: Displayed as "Invoice 1", "Invoice 2", etc.
Note: Invoice section is hidden if no invoices exist.
4.3.2 Important Notice (Yellow Box)
Important Notice: Archiving this project will pause all automations, reminders, and scheduled emails right away. No new actions can be performed on this project until it's unarchived.
Scheduled invoices, payment reminders, and client communications will not go out while the project is archived.
If an event is on a future date, its assigned contractors will be removed once this project is archived.
If any refunds are due to the client, please process those before archiving. Alternatively, if money is still owed to you, please collect it before archiving.
Any contractor payments to assigned contractors must be settled manually.
You can unarchive this project at any time. Doing so will restore all events to their previous stage and resume any paused automations.
4.3.3 Notifications Section
Element
Content
Section Title
Notifications — Who should be notified about this archive?
Toggle 1
Notify team members (Default: ON)
Toggle 2
Notify contractors (Default: ON)
Toggle 3
Notify client (Default: ON)
4.3.4 Internal Notes Section
Element
Content
Label
Internal Notes (Optional)
Placeholder
"Add a reason or note for this archive (e.g., 'Project on hold until Q3, resuming in August')"
Character Limit
2000
4.3.5 Bottom Note
Element
Content
Note (Gray)
ℹ️ Note: Archiving pauses activity but does not cancel the project. Unarchive at any time to pick up right where you left off.
4.3.6 Buttons
Button
Action
Close
Closes modal, no action taken
Confirm
Archives the project
4.4 Archive Event Modal
Displayed when archiving an event from the Events tab.
4.4.1 Header Section
Field
Description
Title
Archive Event
Event Name
Name of the event (e.g., "Engagement Shoot")
Date
Event date (e.g., "Aug 15, 2025")
Part of Project
Project name (e.g., "Smith Wedding Package")
Invoice
Financial summary: Total, Paid, Balance
Note: Invoice section is hidden if no invoices exist.
4.4.2 Auto-Primary Assignment Message (2 Events - Primary Archived)
Element
Content
Info Box (Blue)
ℹ️ The remaining event "[Event Name]" will become the primary event.
Visibility: Only shown when archiving the primary event in a 2-event project.
4.4.3 Important Notice (Yellow Box)
Important Notice: Archiving this event will pause all automations, reminders, and scheduled emails tied to it right away. No new actions can be performed on this event until it's unarchived.
Scheduled reminders and client communications for this event will not go out while it's archived.
If this event is on a future date, its assigned contractors will be removed once it's archived.
If any refunds are due to the client, please process those before archiving. Alternatively, if money is still owed to you, please collect it before archiving.
Any contractor payments to contractors assigned to this event must be settled manually.
You can unarchive this event at any time. Doing so will restore it to its previous stage and resume any paused automations.
4.4.4 Notifications Section
Element
Content
Section Title
Notifications — Who should be notified about this archive?
Toggle 1
Notify team members (Default: ON)
Toggle 2
Notify contractors (Default: ON)
Toggle 3
Notify client (Default: ON)
4.4.5 Internal Notes Section
Element
Content
Label
Internal Notes (Optional)
Placeholder
"Add a reason or note for this archive (e.g., 'Rescheduled, resuming in August')"
Character Limit
2000
4.4.6 Bottom Note
Element
Content
Note (Gray)
ℹ️ Note: Archiving pauses activity but does not cancel the event. Unarchive at any time to pick up right where you left off.
4.4.7 Buttons
Button
Action
Close
Closes modal, no action taken
Confirm
Archives the event
4.5 Cannot Archive Primary Event (Blocking Modal)
4.5.1 Trigger Conditions
Displayed when ALL of the following are true:
- Project has 3 or more events.
- User is attempting to archive the primary event.
- An invoice has been generated for the client.
4.5.2 Modal Content
Element
Content
Title
Cannot Archive Primary Event
Message
This event is the primary event linked to the project's invoice payment schedule. Please assign another event as primary before archiving this event.
Primary Button
Change Primary Event
Secondary Button
Cancel
4.5.3 Button Actions
Button
Action
Change Primary Event
Opens Edit Project modal to change primary event. After save, returns to Event Details screen. User must manually initiate archive again.
Cancel
Closes modal, no action taken.
4.6 Unarchive Confirmation Dialog
4.6.1 Trigger
Displayed when user clicks "Unarchive" on an archived project or event.
4.6.2 Modal Content
Element
Content
Title
Unarchive Project? / Unarchive Event?
Message
Are you sure you want to unarchive [Project/Event Name]? This will restore it to its previous stage. Note: You will need to add contractors manually.
Notifications Section Title
Notifications — Who should be notified?
Toggle 1
Notify team members (Default: ON)
Toggle 2
Notify client (Default: ON)
Primary Button
Unarchive
Secondary Button
Cancel
Note: The unarchive dialog does NOT include a contractor notification toggle, since contractors were removed during archiving (for future events).
4.6.3 Button Actions
Button
Action
Unarchive
Restores the project/event to previous stage. Resumes automations.
Cancel
Closes dialog, no action taken.
4.7 Archived State Behavior
4.7.1 Read-Only State
When a project or event is archived:
- The project/event becomes read-only.
- All action buttons are grayed out and disabled.
- No new actions can be performed (contracts, agreements, proposals, questionnaires, contractor assignments, deliverables, invoices, uploads, etc.).
4.7.2 Preserved Data
Item
Behavior
Existing contracts
Remain unchanged
Service agreements
Remain unchanged
Proposals
Remain unchanged
Contractor assignments
Retained on record (removed for future events; see 4.7.4)
Invoices
Remain unchanged, view-only
Payments
Remain unchanged
Deliverables
Remain unchanged, view-only
4.7.3 Automations & Workflows
Item
Behavior
Project automations
Paused
Reminders
Paused
Scheduled emails
Paused
Background workflows
Paused
Scheduled invoices
Not sent while archived
Payment reminders
Not sent while archived
Client communications
Not sent while archived
4.7.4 Contractor Handling
Event Date
Contractor Behavior
Future events
Contractors are removed. They become available for other events on the same date.
Past/Completed events
Contractors remain on record.
Note: Contractors removed due to archiving still see the event in their Completed list with an "Archived" tag for record purposes.
4.7.5 Document Expiry
Document Status
Behavior
Pending signature (not fully signed)
Expired. Not viewable by client/contractor.
Fully signed (client signed + agency counter-signed)
Remains for viewing.
Note: This expiry logic applies consistently to proposals, contracts, service agreements, and questionnaires.
4.7.6 View Access
- Users can still VIEW files, documents, invoices, and deliverables in an archived project/event.
- Pending signature documents get expired and are no longer viewable.
- Signed documents remain legally valid and viewable.
4.8 Unarchive Behavior
4.8.1 Restoration Logic
Item
Behavior
Event
Restored to its previous pipeline stage (the stage it was in before archiving).
Project
Restored to active state. Projects are not tied to a stage; internal events restore to their respective stages.
4.8.2 What Is NOT Automatically Restored
Item
Behavior
Expired documents
Stay expired. User must resend if needed.
Contractors
Must be added manually (they were removed for future events).
4.8.3 What Resumes
Item
Behavior
Automations
Resume
Reminders
Resume
Scheduled emails
Resume
Background workflows
Resume
4.9 Partial Archive Behavior
4.9.1 Some Events Archived
When only some events in a project are archived individually (e.g., 2 of 5):
- The project remains active.
- The project appears in BOTH:
- Active project listing (showing active events)
- Archived Projects page (accordion shows only the archived events)
- If only the event is archived, it impacts only that event.
4.9.2 All Events Archived Individually
When all events in a project are archived one by one:
- The project automatically becomes archived.
- The project moves entirely to the Archived Projects page.
4.9.3 Project-Level Archive
When the entire project is archived from the Overview tab:
- All events in the project are archived.
- The impact applies to all events within that project.
4.9.4 Accordion Display
Listing
Accordion Shows
Active Project Listing
Only active events (archived events hidden)
Archived Projects Page
Only archived events
4.10 Archived Listings
4.10.1 Archived Projects Page
Element
Description
Access
Projects listing > Trash icon (next to "Project Management" title)
Content
All fully archived projects AND partially archived projects
Columns
Project name, Users, Brand, Service area, Actions
Actions
View Details
4.10.2 Archived Events List
Element
Description
Access
Events listing > Pipeline status bar > Archived tab
Content
All archived events AND cancelled events (with tag)
Cancelled Event Display
Shown with a "Cancelled" badge
Actions
View Details (view-only)
Note: The Archived tab count includes both archived and cancelled events.
4.11 Cancelled vs Archived
Aspect
Behavior
Cancelled events in archived list
Displayed with a badge
Unarchive cancelled event
Not applicable — cancellation is not linked with archiving. Once cancelled, it stays cancelled.
Cancelled projects
Cannot be unarchived.
4.12 Primary Event Archive - Special Warning
When a user attempts to archive the primary event under blocking conditions (3+ events with invoice):
- The action is blocked.
- User is asked to change the primary event first (see Section 4.5).
5. Portal Behavior
5.1 Client Portal
Aspect
Behavior
Archived Project/Event
Visible with "Archived" tag
Actions
View-only (grayed out, not actionable)
Files, invoices, payment history
Viewable (read-only)
Pending signatures
Expired, not viewable
Signed documents
Viewable
5.2 Contractor Portal
Aspect
Behavior
Archived Event (future)
Contractor removed, but event shown in Completed list with "Archived" tag for record
Archived Event (past)
Contractor remains; event shown in Completed list with "Archived" tag
Actions
View-only
Note: All archived events appear in the contractor's Completed list with an "Archived" tag for record purposes, even when the contractor has been removed.
6. Field Details & Validations
6.1 Archive Project Modal Fields
Field
Type
Required
Max Length
Validation Rules
Notify Team Members
Toggle
No
N/A
Default: ON
Notify Contractors
Toggle
No
N/A
Default: ON
Notify Client
Toggle
No
N/A
Default: ON
Internal Notes
Textarea
No
2000
Free text
6.2 Archive Event Modal Fields
Field
Type
Required
Max Length
Validation Rules
Notify Team Members
Toggle
No
N/A
Default: ON
Notify Contractors
Toggle
No
N/A
Default: ON
Notify Client
Toggle
No
N/A
Default: ON
Internal Notes
Textarea
No
2000
Free text
6.3 Unarchive Confirmation Fields
Field
Type
Required
Max Length
Validation Rules
Notify Team Members
Toggle
No
N/A
Default: ON
Notify Client
Toggle
No
N/A
Default: ON
7. Success Message Handling
Action
Message
Type
Project archived
"Project archived successfully"
Toast
Event archived
"Event archived successfully"
Toast
Project unarchived
"Project unarchived successfully"
Toast
Event unarchived
"Event unarchived successfully"
Toast
8. Error Message Handling
Scenario
Message
Type
Network error during archive
"Unable to archive. Please check your connection and try again."
Toast
Network error during unarchive
"Unable to unarchive. Please check your connection and try again."
Toast
Server error
"Something went wrong. Please try again later."
Toast
Notes exceed limit
"Notes cannot exceed 2000 characters."
Inline
9. Edge Cases
#
Edge Case
System Behavior
1
Archiving the only event in a project
Archives entire project. No TBD option.
2
Archiving primary event (single event) with invoice
Allowed (blocking does not apply).
3
Archiving primary event (2 events)
Remaining event auto-becomes primary. Info message shown.
4
Archiving primary event (3+ events) with invoice
Blocked. "Cannot Archive Primary Event" modal.
5
Archiving primary event (3+ events) without invoice
Auto-assigns nearest upcoming event (by date) as primary.
6
Archiving event with processing payment
Allowed with warning info message (general pop-up message sufficient).
7
Archiving project with mixed past/future events
Future event contractors removed; past event contractors remain.
8
All events archived individually
Project auto-becomes archived.
9
Some events archived (partial)
Project stays active; appears in both active and archived listings.
10
Unarchiving event
Restored to previous pipeline stage.
11
Unarchiving project
Restored; events return to their stages.
12
Unarchiving with expired documents
Documents stay expired; must resend.
13
Unarchiving requires contractors
User must add contractors manually.
14
Cancelled event in archived list
Shown with badge; cannot be unarchived.
15
Cancelled project
Cannot be unarchived.
16
Contractor removed due to archive
Still sees event in Completed list with Archived tag.
17
Client viewing archived project
Sees "Archived" tag; view-only access.
18
Multiple invoices in Archive Project modal
Shown as Invoice 1, Invoice 2, etc.
19
Archived project accessed via View Details
Shows all events regardless of archive status; accordion in listing shows only archived.
20
Pending signature during archive
Document expired; not viewable.
10. Acceptance Criteria
10.1 Archive Access & Permissions
- AC-01: Agency Owner, Admin, and assigned Project Owner shall be able to archive/unarchive.
- AC-02: Project Managers not assigned as Project Owner shall not be able to archive/unarchive.
- AC-03: Archive button shall be located on the Project Management widget.
10.2 Dynamic Button Behavior
- AC-04: On Overview tab, Archive button shall apply to the entire project.
- AC-05: On Events tab, Archive button shall apply to the selected event.
- AC-06: Button shall show "Unarchive" when item is already archived.
- AC-07: Button shall switch dynamically when switching between Overview and Events tabs.
- AC-08: For partially archived projects, Overview tab button shall still show "Archive".
10.3 Archive Decision Logic
- AC-09: Archiving only event in project shall archive the entire project (no TBD option).
- AC-10: Archiving primary event (single) with invoice shall be allowed.
- AC-11: Archiving primary event (2 events) shall auto-assign remaining event as primary with info message.
- AC-12: Archiving primary event (3+ events) with invoice shall be blocked.
- AC-13: Archiving primary event (3+ events) without invoice shall auto-assign primary.
- AC-14: Auto-assigned primary shall be the chronologically nearest upcoming event by event date.
10.4 Archive Project Modal
- AC-15: Archive Project modal shall display project name, events list, and invoice summary.
- AC-16: Multiple invoices shall display as Invoice 1, Invoice 2, etc.
- AC-17: Important Notice shall be displayed in yellow box.
- AC-18: Notification toggles shall default to ON.
- AC-19: Internal Notes shall be optional with 2000 character limit.
- AC-20: Bottom note shall clarify archiving does not cancel the project.
10.5 Archive Event Modal
- AC-21: Archive Event modal shall display event name, date, project, and invoice summary.
- AC-22: Auto-primary info message shall display when archiving primary event in 2-event project.
- AC-23: Important Notice shall be displayed in yellow box.
- AC-24: Notification toggles shall default to ON.
- AC-25: Internal Notes shall be optional with 2000 character limit.
10.6 Blocking Modal
- AC-26: "Cannot Archive Primary Event" modal shall show when archiving primary event (3+ events) with invoice.
- AC-27: "Change Primary Event" shall open Edit Project modal.
- AC-28: After changing primary, user must manually re-initiate archive.
10.7 Unarchive
- AC-29: Unarchive shall show a simple confirmation dialog.
- AC-30: Unarchive dialog shall include note about adding contractors manually.
- AC-31: Unarchive dialog shall have Notify team members and Notify client toggles (no contractor toggle).
- AC-32: Unarchiving event shall restore it to previous pipeline stage.
- AC-33: Unarchiving project shall restore events to their respective stages.
10.8 Archived State
- AC-34: Archived project/event shall be read-only with all actions grayed out.
- AC-35: All automations, reminders, and scheduled emails shall be paused when archived.
- AC-36: No new actions shall be performable on archived items.
- AC-37: Contractors on future events shall be removed when archived.
- AC-38: Contractors on past events shall remain when archived.
- AC-39: Pending signature documents shall be expired when archived.
- AC-40: Fully signed documents shall remain viewable when archived.
- AC-41: Files, invoices, and deliverables shall be viewable (read-only) when archived.
10.9 Unarchive Restoration
- AC-42: Expired documents shall stay expired after unarchive.
- AC-43: Contractors shall need to be added manually after unarchive.
- AC-44: Automations shall resume after unarchive.
10.10 Partial Archive
- AC-45: Partially archived project shall remain active.
- AC-46: Partially archived project shall appear in both active and archived listings.
- AC-47: Active listing accordion shall show only active events.
- AC-48: Archived listing accordion shall show only archived events.
- AC-49: All events archived individually shall auto-archive the project.
10.11 Archived Listings
- AC-50: Archived Projects page shall be accessed via trash icon on Projects listing.
- AC-51: Archived Events list shall be accessed via Archived tab in pipeline.
- AC-52: Archived Events list shall include cancelled events with a badge.
- AC-53: Archived listings shall provide View Details action (view-only).
10.12 Portal Behavior
- AC-54: Archived projects/events shall appear in Client Portal with "Archived" tag (view-only).
- AC-55: Archived events shall appear in Contractor Portal Completed list with "Archived" tag.
- AC-56: Contractors removed due to archive shall still see event in Completed list.
10.13 Cancelled vs Archived
- AC-57: Cancelled events shall not be unarchivable.
- AC-58: Cancelled projects shall not be unarchivable.
10.14 Notifications & Activity
- AC-59: Archive shall send notifications to team members, contractors, and client (per toggles).
- AC-60: Unarchive shall send notifications to team members and client (per toggles).
- AC-61: Archive and unarchive actions shall be logged in Activity Tab.
- AC-62: Auto-primary assignment shall be logged in Activity Tab.
11. Notification Templates (Placeholders)
11.1 Archive Notification
Recipient
Content
Team Members
[Placeholder - Content to be provided]
Contractors
[Placeholder - Content to be provided]
Client
[Placeholder - Content to be provided]
11.2 Unarchive Notification
Recipient
Content
Team Members
[Placeholder - Content to be provided]
Client
[Placeholder - Content to be provided]
12. Activity Logging
Action
Activity Log Entry
Project Archived
"[User Name] archived project [Project Name]"
Event Archived
"[User Name] archived event [Event Name]"
Project Unarchived
"[User Name] unarchived project [Project Name]"
Event Unarchived
"[User Name] unarchived event [Event Name]"
Auto-Primary Assignment
"[Event Name] set as primary event"
13. Dependencies
#
Type
Dependency
Description
Impact if Unavailable
1
Internal Module
Project Details
Parent module containing archive functionality
Cannot access archive
2
Internal Module
Project Management Widget
Contains archive/unarchive button
Cannot trigger archive
3
Internal Module
Edit Project Modal
Change primary event
Cannot change primary; blocking modal cannot redirect
4
Internal Module
Events Tab
Event-level archive
Cannot archive individual events
5
Internal Module
Pipeline / Stage Management
Restore events to previous stage
Cannot restore stage on unarchive
6
Internal Module
Contractor Availability
Contractor removal/retention on archive
Contractor handling may fail
7
Internal Module
Client Portal
Display archived items with tag
Archived items not shown correctly
8
Internal Module
Contractor Portal
Display archived events in Completed list
Archived events not shown
9
External Service
Email Service
Send archive/unarchive notifications
Notifications fail
10
Internal Module
Activity Tab
Log archive/unarchive actions
Actions not logged
11
Internal Module
Document Management
Expire pending documents
Documents not expired correctly
14. References
- Event Kebab Menu FRD (Cancel Event - parallel logic)
- Events Info Tab FRD (Primary Event, Contractor Availability)
- Project Details Module FRD
- Finance Module FRD
- Notification System Documentation
Document End
Delete Project
Functional Requirements Document (FRD)
Project Management Widget - Delete Project
Module Name: Delete Project
Version: 1.0
Last Updated: May 28, 2026
Status: Draft
1. Module Overview
1.1 Purpose
This module defines the functionality for the "Delete Project" action available in the Project Management widget. Delete Project permanently removes a project and all associated data from the system with no record retention. This action is strictly limited to projects in the early lead stage where no commitments (signed documents or payments) have been made. For projects with any signed documents or completed payments, deletion is disabled and users are guided to cancel the project instead.
1.2 Scope
This FRD covers:
- Delete Project button placement and visibility in the Project Management widget
- Enable/disable logic based on project stage and financial status
- Disabled state behavior with hover tooltip
- Delete confirmation dialog
- Notification handling
- Permanent deletion behavior
- Post-deletion redirect and success messaging
1.3 Key Distinction: Delete vs Cancel vs Archive
Action
Behavior
Recovery
Delete
Permanent removal, no record retained
❌ Cannot be recovered
Cancel
Project remains in system with "Cancelled" tag
Record retained for reference
Archive
Project hidden from active lists, fully preserved
✅ Can be unarchived
Note: If a user may need the project later, they should cancel instead of delete. Delete is permanent and irreversible.
1.4 Module Location
- Access: Project Details > Project Management Widget > Delete Project button
- The button appears alongside "Cancel Project" and "Archive".
2. User Roles & Permissions
Role
Delete Project
Agency Owner
✅ Yes
Admin
✅ Yes
Project Owner (assigned)
✅ Yes
Project Manager (not Project Owner)
❌ No
Note: Only Project Managers who are assigned as the Project Owner of a specific project can delete that project.
3. User Flow
3.1 Deleting a Project
- User navigates to Project Details.
- User opens the Project Management widget.
- User locates the "Delete Project" button.
- If the project is eligible (all events in lead stage, nothing signed, nothing paid), the button is enabled.
- User clicks "Delete Project".
- System displays the Delete confirmation dialog.
- User reviews the warning, sets notification toggles.
- User clicks "Delete".
- Project and all associated data are permanently deleted.
- User is redirected to the Projects listing.
- Success toast is displayed.
3.2 Attempting to Delete an Ineligible Project
- User navigates to Project Details and opens the Project Management widget.
- The "Delete Project" button appears grayed out (disabled).
- User hovers over the disabled button.
- System displays a tooltip explaining why deletion is not available.
- User can choose to cancel the project instead.
4. Functional Logic
4.1 Button Visibility
- The "Delete Project" button is always visible in the Project Management widget for users with delete permissions.
- The button is either enabled or disabled based on the project's stage and financial status.
4.2 Enable/Disable Logic
4.2.1 Enabled Conditions
The Delete Project button is enabled only when ALL of the following are true:
- ALL events in the project are in the lead stage (New Lead, Follow Up, Proposal Sent).
- No proposal or contract has been signed.
- No invoice has been paid.
- No payment is currently processing.
4.2.2 Disabled Conditions
The Delete Project button is disabled when ANY of the following are true:
- Any event is in the booked stage or beyond (Proposal Signed, Deposit Paid, Planning, etc.).
- Any proposal or contract has been signed.
- Any invoice has been paid.
- Any payment is currently processing.
4.2.3 Enable/Disable Matrix
Proposal/Contract Signed
Invoice Paid / Processing
Delete Button
No
No
✅ Enabled
No (proposal sent only)
Invoice generated but unpaid
✅ Enabled
No
Multiple invoices, none paid
✅ Enabled
Yes (signed)
No
🚫 Disabled
No
Yes (paid)
🚫 Disabled
No
Processing
🚫 Disabled
Yes
Yes
🚫 Disabled
Summary: Delete is enabled ONLY when all events are in lead stage with nothing signed and nothing paid/processing.
4.2.4 Multiple Events Consideration
- Delete is a project-level action only (there is no delete for individual events).
- If ANY single event in the project moves to the booked stage, the entire project's Delete button is disabled.
- All events must remain in the lead stage for delete to be enabled.
4.3 Disabled State Behavior
4.3.1 Visual State
- When disabled, the Delete Project button is grayed out.
- The button is not clickable.
4.3.2 Hover Tooltip
- When the user hovers over the disabled button, a tooltip is displayed.
- Tooltip Message: "Cannot delete: This project has signed documents or completed payments. You can cancel it instead."
4.4 Delete Confirmation Dialog
4.4.1 Trigger
Displayed when the user clicks the enabled "Delete Project" button.
4.4.2 Dialog Content (Minimal)
Element
Content
Title
Delete Project?
Warning Message
This will permanently delete the project and all associated data. This action cannot be undone. If you may need this project later, consider canceling instead.
Notifications Section Title
Notifications — Who should be notified?
Toggle 1
Notify team members (Default: ON)
Toggle 2
Notify contractors (Default: ON)
Toggle 3
Notify client (Default: ON)
Primary Button
Delete
Secondary Button
Cancel
4.4.3 Button Actions
Button
Action
Delete
Permanently deletes the project and all associated data. Redirects to Projects listing.
Cancel
Closes the dialog, no action taken.
4.5 Deletion Behavior
4.5.1 Permanent Deletion
When a project is deleted:
- The project is permanently removed from the system.
- No record is retained.
- The project cannot be recovered or restored.
4.5.2 Data Deleted
All associated data is permanently deleted, including:
- All events within the project
- Unsigned proposals
- Draft/unpaid invoices
- Uploaded files and documents
- Team member and client associations
- Any contractor assignments (if present at lead stage)
- Notes and activity history
4.5.3 Post-Deletion Redirect
- After successful deletion, the user is redirected to the Projects listing.
- Success toast is displayed: "Project deleted successfully"
4.6 Notifications
- Notification toggles allow the user to choose who is notified about the deletion.
- Recipients: Team members, Contractors, Client.
- All toggles default to ON.
- Notifications are sent based on the user's toggle selections.
5. Field Details & Validations
5.1 Delete Confirmation Dialog Fields
Field
Type
Required
Validation Rules
Notify Team Members
Toggle
No
Default: ON
Notify Contractors
Toggle
No
Default: ON
Notify Client
Toggle
No
Default: ON
6. Success Message Handling
Action
Message
Type
Project deleted
"Project deleted successfully"
Toast
7. Error Message Handling
Scenario
Message
Type
Network error during deletion
"Unable to delete the project. Please check your connection and try again."
Toast
Server error
"Something went wrong. Please try again later."
Toast
Project state changed during action (became ineligible)
"This project can no longer be deleted. It may have signed documents or payments. You can cancel it instead."
Toast
8. Edge Cases
#
Edge Case
System Behavior
1
All events in lead stage, nothing signed/paid
Delete button enabled
2
Proposal sent but not signed
Delete allowed
3
Invoice generated but not paid
Delete allowed
4
Multiple invoices, none paid
Delete allowed
5
Proposal signed, no invoice paid
Delete disabled
6
Invoice paid, no proposal signed
Delete disabled
7
Payment currently processing
Delete disabled
8
One event moves to booked stage
Entire project's Delete button disabled
9
User hovers disabled button
Tooltip explains why and suggests cancel
10
Project state changes during confirmation (another user signs/pays)
Deletion blocked with error message
11
Contractors assigned at lead stage
Contractors permanently removed on deletion; notified if toggle ON
12
Project Manager (not Project Owner) attempts delete
Not permitted; no delete access
13
Deletion with notifications OFF
Project deleted silently, no notifications sent
14
Deletion with notifications ON
Notifications sent to selected recipients
9. Acceptance Criteria
9.1 Button Visibility & Permissions
- AC-01: Delete Project button shall be visible in the Project Management widget for users with delete permissions.
- AC-02: Delete Project button shall appear alongside Cancel Project and Archive.
- AC-03: Agency Owner, Admin, and assigned Project Owner shall have delete access.
- AC-04: Project Managers not assigned as Project Owner shall not have delete access.
9.2 Enable/Disable Logic
- AC-05: Delete button shall be enabled only when all events are in lead stage.
- AC-06: Delete button shall be enabled when a proposal is sent but not signed.
- AC-07: Delete button shall be enabled when an invoice is generated but not paid.
- AC-08: Delete button shall be enabled with multiple unpaid invoices.
- AC-09: Delete button shall be disabled when any proposal/contract is signed.
- AC-10: Delete button shall be disabled when any invoice is paid.
- AC-11: Delete button shall be disabled when any payment is processing.
- AC-12: Delete button shall be disabled if any event moves to booked stage.
9.3 Disabled State
- AC-13: Disabled Delete button shall be grayed out.
- AC-14: Hovering over disabled button shall show a tooltip explaining why.
- AC-15: Tooltip shall suggest canceling the project instead.
9.4 Confirmation Dialog
- AC-16: Clicking enabled Delete button shall show confirmation dialog.
- AC-17: Dialog shall display "Delete Project?" title.
- AC-18: Dialog shall display permanent deletion warning.
- AC-19: Dialog shall suggest canceling as an alternative.
- AC-20: Dialog shall have notification toggles (team members, contractors, client) defaulting to ON.
- AC-21: Dialog shall have Delete and Cancel buttons.
9.5 Deletion Behavior
- AC-22: Deletion shall permanently remove the project and all associated data.
- AC-23: Deleted project shall not be recoverable.
- AC-24: All events, proposals, invoices, files, and associations shall be permanently deleted.
- AC-25: User shall be redirected to Projects listing after deletion.
- AC-26: Success toast "Project deleted successfully" shall be displayed.
9.6 Notifications
- AC-27: Notifications shall be sent to selected recipients based on toggles.
- AC-28: Notifications with all toggles OFF shall result in silent deletion.
10. Notification Templates (Placeholders)
10.1 Delete Notification
Recipient
Content
Team Members
[Placeholder - Content to be provided]
Contractors
[Placeholder - Content to be provided]
Client
[Placeholder - Content to be provided]
11. Dependencies
#
Type
Dependency
Description
Impact if Unavailable
1
Internal Module
Project Details
Parent module containing delete functionality
Cannot access delete
2
Internal Module
Project Management Widget
Contains the Delete Project button
Cannot trigger delete
3
Internal Module
Stage Management
Determine event stages for enable/disable logic
Cannot evaluate delete eligibility
4
Internal Module
Finance Module
Determine invoice/payment status
Cannot evaluate financial eligibility
5
Internal Module
Projects Listing
Redirect target after deletion
Cannot redirect after delete
6
External Service
Email Service
Send deletion notifications
Notifications fail
12. References
- Event Kebab Menu FRD (Cancel Project)
- Archive & Unarchive FRD
- Project Details Module FRD
- Finance Module FRD
- Notification System Documentation
Document End
Add Package
Functional Requirements Document (FRD)
Project Management Widget - Add Package
Module Name: Add Package
Version: 1.0
Last Updated: May 28, 2026
Status: Draft
1. Module Overview
1.1 Purpose
This module defines the functionality for manually adding a package to an existing project via the Project Management widget. While packages are typically added through the proposal flow, this feature allows agency users (customer service side) to add packages manually in scenarios where a proposal is not being sent — such as direct lead inquiries, offline/cash payments, or upgrades/downgrades to an existing package. The flow includes an informational note, package selection, conflict detection and resolution, and a manual invoice update reminder.
1.2 Scope
This FRD covers:
- Add Package entry point and informational note modal
- Package selection screen (brand-specific, grouped packages)
- Conflict detection and resolution (Conflicting Items modal)
- Replace vs Duplicate logic for events
- Service override and deletion logic
- Contractor conflict handling
- Signed proposal handling
- "Event may no longer be needed" warning (Services tab)
- Manual invoice update reminder
- Impacted areas and modules
1.3 Key Principles
Principle
Description
Manual Only
Add Package is an agency-side (CS) action; it is never visible to or performed by the client.
No Automation of Invoices
The system does not modify invoices automatically. Users must manually update invoices for any pricing changes.
No Automatic Deletion of Contractors
Contractors are never removed automatically. Where a service would be deleted but a contractor is assigned, the user is prompted.
User-Driven Conflict Resolution
The system surfaces conflicts and lets the user decide (replace or keep/duplicate); it does not force removals.
1.4 Module Location
- Access: Project Details > Project Management Widget > Add Package
- Availability: Only on active projects. Add Package is not available for archived or cancelled projects.
2. User Roles & Permissions
Role
Add Package
Agency Owner
✅ Yes
Admin
✅ Yes
Project Owner (assigned)
✅ Yes
Project Manager (not Project Owner)
❌ No
Client
❌ No (never visible)
Note: Add Package is an agency-side action performed manually by customer service. It is never exposed to the client.
3. User Flow
3.1 Adding a Package (No Conflict)
- User navigates to Project Details and opens the Project Management widget.
- User clicks "Add Package".
- System displays the informational note modal ("Add a Package to This Project").
- User clicks "Continue".
- System displays the Package selection screen showing published package groups for the project's brand.
- User expands a group and selects one package.
- User clicks "Continue".
- System checks for conflicts. If none exist, the package is added directly.
- System displays the "Update the invoice" reminder pop-up.
- User clicks "Got It".
- Package events and services are added to the project.
3.2 Adding a Package (With Conflict)
- Steps 1–7 same as above.
- System detects one or more conflicts.
- System displays the "Conflicting Items" modal listing all conflicts.
- User resolves each actionable conflict (replace or keep/duplicate) via dropdowns.
- User reviews informational-only notices (existing event data, signed proposal).
- User clicks "Submit".
- System applies the user's choices.
- System displays the "Update the invoice" reminder pop-up.
- User clicks "Got It".
- Changes are applied to the project.
4. Functional Logic
4.1 Informational Note Modal
4.1.1 Trigger & Behavior
- Displayed every time the user clicks "Add Package".
- This modal is static and always shown (it does not get dismissed permanently).
4.1.2 Modal Content
Element
Content
Title
Add a Package to This Project
Intro
Packages can include multiple events and services. If this project already has events (like a Wedding), adding a package with overlapping events may prompt you to replace or duplicate those existing events.
Use a package when
• You're switching to a standard bundle of services/events • You want to quickly add multiple connected events and services at once
If you only need to
• Add a one-off service → use Add Service • Add a single event → use Add Event
Footer
We'll guide you through any conflicts if there's overlap with existing project details
Primary Button
Continue
Secondary Button
Cancel
4.2 Package Selection Screen
4.2.1 Display Logic
- Displays all published packages from the templates for the project's brand only.
- Packages are organized by package group (e.g., "Photography — 3 Packages").
- Package groups are expandable/collapsible.
4.2.2 Package Group Display
Element
Description
Group Header
Group name, package count, and associated metadata (owner, service type, events)
Expand/Collapse
Groups can be expanded to view individual packages
4.2.3 Package Card Display
Element
Description
Package Name
Name of the package (e.g., "Simple Photography")
Events & Items
Events included (e.g., Wedding, Rehearsal Dinner) with their items listed
Price
Package price (e.g., "$350.00 USD")
Select Button
Selects this package
4.2.4 Selection Rules
- The user can select only one package at a time.
- After selecting a package, the user clicks "Continue" to proceed.
- To add another package, the user repeats the entire flow.
4.2.5 Empty State
- If the project's brand has no published packages, the screen displays an empty state message prompting the user to create a package first.
- Message “No published packages found for this brand. Create a package to get started."
4.3 Conflict Detection
4.3.1 Trigger
- After the user selects a package and clicks "Continue", the system checks for conflicts against existing project details.
- The Conflicting Items modal appears only when conflicts exist.
- If no conflicts exist, the package is added directly (proceeds to invoice reminder).
4.3.2 Conflict Types
Conflict Type
Type
Description
Duplicate Event Type
Actionable (dropdown)
The project already has an event of the same type as one in the package.
Existing Event Contains Data
Informational
The existing event contains data (tasks, contractors, notes, questionnaires, deliverables, timelines, agreements/contract documents, invoices, line items).
Service Not in Package (Contractor Assigned)
Actionable (dropdown)
The selected package does not include a service for an event, but a contractor is assigned to that service.
Signed Proposal Conflict
Informational
The project originated from a signed proposal.
Note: There are no "Duplicate Services" or "Quantity Conflict" types. Services are overridden or deleted based on the package (see Section 4.5).
4.4 Conflict Resolution — Events
4.4.1 Duplicate Event Type
Element
Content
Title
Duplicate Event Type
Description
Project already has ([X]) [Event Type]
Dropdown Options
Keep event / Replace
Note: The description is dynamic and reflects the count of existing events of that type (e.g., "Project already has (1) Wedding" or "Project already has (2) Wedding").
4.4.2 Replace vs Keep (Duplicate) Behavior
Choice
Behavior
Replace
The existing event is replaced by the package event. All package values (hours, shooters, items, etc.) override the existing event. If multiple events of the same type exist, all are replaced.
Keep event
The existing event(s) remain, and the package event is added as a new (duplicate) event. All events remain.
4.4.3 Multiple Same-Type Events
- When multiple events of the same type exist (e.g., 2 Weddings) and the selected package also includes that event type:
- The description reflects the count: "Project already has (2) Wedding".
- If the user chooses Replace: all existing events of that type are replaced.
- If the user chooses Keep event: all existing events remain and the package event is added (resulting in all events retained).
4.4.4 Existing Event Contains Data (Informational)
Element
Content
Title
Existing Event Contains Data
Description
If the existing event already has: Tasks, Contractors assigned, Notes, Questionnaires, Deliverables, Timelines, Agreements/Contract documents, Invoices, or line items.
Warning Note (Yellow)
Replacing events will remove this entire data.
Note: This is informational only; there is no dropdown. It warns the user that replacing will remove the existing event's data.
4.4.5 Future Events
- When replacing, future-dated events are the ones typically replaced (as they are the active upcoming events).
4.5 Conflict Resolution — Services
4.5.1 Service Override Logic
- When the selected package includes a service that already exists on the event, the package overrides the existing service values (hours of coverage, number of shooters, etc.).
4.5.2 Service Deletion Logic
- When an existing service is NOT included in the selected package:
- If no contractor is assigned to that service → the service is automatically deleted.
- If a contractor is assigned to that service → the service is kept and surfaced in the Conflicting Items modal for the user to decide.
4.5.3 Service Not in Package (Contractor Assigned)
Element
Content
Title
Service Not in Package
Description
The selected package doesn't include [Service] for [Event], but a contractor is assigned. Choose whether to keep or remove this service.
Dropdown Options
Keep service / Remove service
4.5.4 Application Timing
- Service override and deletion apply automatically only when the user chooses to Replace the related event.
- If the user chooses to Keep/Duplicate, existing services remain untouched.
4.6 Signed Proposal Handling
4.6.1 Signed Proposal Conflict (Informational)
Element
Content
Title
Signed Proposal Conflict
Description
Project originated from a signed proposal.
Warning Note (Yellow)
Package changes may require sending an updated contract.
Note: This is informational only. If a signed proposal exists, this notice always appears in the Conflicting Items modal, even when there are no other conflicts.
4.6.2 Proposal vs Contract
- A second proposal cannot be sent after a package change on a signed-proposal project.
- The user may create and send a contract instead. This is a manual, optional action (not mandatory and not triggered automatically by this flow).
4.6.3 Client Portal Reflection
- Changes made through Add Package are reflected in the client portal at the "project changes" level.
4.7 "Event May No Longer Be Needed" Warning
4.7.1 Trigger Conditions
Displayed in Project Details > Services tab when ALL of the following are true:
- An event was created by default when the lead came in (created before proposal sending).
- The event is NOT included in the selected package (applies to both signed proposal packages and manually added packages).
- The event is on a future date.
4.7.2 Warning Content
Element
Content
Warning (Red/Orange Box)
This event may no longer be needed. This [Event] event was created by default when the lead came in. However, the signed proposal does not include this event. If you no longer need this event, you can delete it — but make sure to first copy any notes or files/documents to the appropriate active event before deleting. If you do want to keep this event, click 'Keep Active' below to remove this warning.
Primary Button
Delete Event
Secondary Button
Keep Event Active
4.7.3 Button Actions
Button
Action
Delete Event
Permanently deletes the event.
Keep Event Active
Removes the warning; the event remains active.
4.8 Invoice Update Reminder
4.8.1 Trigger
- Displayed always after a package is added (whether or not there were conflicts).
4.8.2 Reminder Content
Element
Content
Title
Update the invoice
Message
Reminder: Please update the invoice if any of these changes impact pricing.
Button
Got It
4.8.3 Invoice Handling
- The system does NOT modify invoices automatically.
- The user is responsible for manually updating, voiding, or refunding invoices to reflect any pricing changes (upgrade difference, downgrade refund, etc.).
- Invoices remain editable until fully paid; fully paid invoices can be refunded manually.
4.9 Contractor & Payment Handling (Manual)
- Contractors are never removed automatically, even on Replace.
- Where a service would be deleted but a contractor is assigned, the user decides (Keep/Remove) via the Conflicting Items modal.
- All invoice and payment-related actions (difference charges, refunds, voids) are handled manually by the agency.
4.10 Downgrade Scenario
- When downgrading (e.g., Platinum → Gold) results in fewer events or services:
- The package change overrides values; it does NOT automatically delete extra events/services (except services not in the package with no contractor, per Section 4.5.2).
- Removal of extra events/services must be done manually where applicable.
- The user handles any refund manually.
5. Impacted Areas & Modules
Area / Module
Impact
Services Tab
Services overridden or deleted based on package; "Event may no longer be needed" warning displayed.
Events
Events replaced or duplicated based on user choice.
Deliverables Widget
Deliverables updated based on package.
Order Info (Info Tab)
Package name, items, and services reflect the added package.
Order Activity (Info Tab)
Package addition and group change logged.
Invoice / Finance
Not updated automatically; manual update required. Reminder shown.
Client Portal
Changes reflected at the "project changes" level.
Contractor Assignments
Not removed automatically; user prompted where a service with a contractor would be deleted.
Proposals / Contracts
Signed proposal cannot be re-sent; contract can be created manually.
6. Field Details & Validations
6.1 Informational Note Modal
Field
Type
Required
Validation Rules
Continue Button
Button
N/A
Proceeds to package selection
Cancel Button
Button
N/A
Closes modal, no action
6.2 Package Selection Screen
Field
Type
Required
Validation Rules
Package Group
Expandable Section
N/A
Displays brand-specific published groups
Package Selection
Single Select
Yes
Only one package can be selected at a time
Continue Button
Button
N/A
Proceeds to conflict check
6.3 Conflicting Items Modal
Field
Type
Required
Validation Rules
Duplicate Event Type
Dropdown
Yes (if present)
Options: Keep event / Replace
Service Not in Package (Contractor Assigned)
Dropdown
Yes (if present)
Options: Keep service / Remove service
Existing Event Contains Data
Informational
N/A
Display-only warning
Signed Proposal Conflict
Informational
N/A
Display-only warning
Back Button
Button
N/A
Returns to previous step
Submit Button
Button
N/A
Applies choices
6.4 Invoice Update Reminder
Field
Type
Required
Validation Rules
Got It Button
Button
N/A
Dismisses reminder
6.5 Event May No Longer Be Needed Warning
Field
Type
Required
Validation Rules
Delete Event Button
Button
N/A
Permanently deletes the event
Keep Event Active Button
Button
N/A
Removes the warning
7. Success Message Handling
Action
Message
Type
Package added (no conflict)
"Package added successfully"
Toast
Package added (with conflict resolution)
"Package added successfully"
Toast
Event deleted (via warning)
"Event deleted successfully"
Toast
Event kept active (via warning)
Warning removed (no toast required)
—
8. Error Message Handling
Scenario
Message
Type
No package selected
"Please select a package to continue."
Inline
Network error
"Unable to add the package. Please check your connection and try again."
Toast
Server error
"Something went wrong. Please try again later."
Toast
Brand has no published packages
"No packages available for this brand. Please create a package first."
Empty State
9. Edge Cases
#
Edge Case
System Behavior
1
No conflicts on add
Package added directly; invoice reminder shown.
2
Brand has no published packages
Empty state prompting package creation.
3
Multiple same-type events + package has same type
"Project already has (X) [Event]"; Replace = all replaced, Keep = all retained.
4
Service not in package, no contractor
Service auto-deleted on Replace.
5
Service not in package, contractor assigned
Service kept; surfaced in modal with Keep/Remove option.
6
Signed proposal exists, no other conflicts
Signed Proposal informational note still shown in modal.
7
Existing event has data + Replace chosen
Warning shown that data will be removed.
8
Downgrade (fewer events/services)
Override only; extra items removed manually where applicable.
9
Default lead event not in package, future date
"Event may no longer be needed" warning in Services tab.
10
Manually added package excludes existing event
Same "event may no longer be needed" warning applies.
11
Add Package on archived/cancelled project
Add Package not available.
12
Invoice half-paid at time of change
Invoice remains editable; user updates/voids/refunds manually.
13
Invoice fully paid at time of change
User issues refund manually if needed.
14
Contractor assigned on replaced event
Contractor not removed automatically.
15
Keep/Duplicate chosen
Existing events/services untouched; package added as new.
10. Acceptance Criteria
10.1 Access & Permissions
- AC-01: Add Package shall be accessible from the Project Management widget.
- AC-02: Agency Owner, Admin, and assigned Project Owner shall have Add Package access.
- AC-03: Add Package shall never be visible to the client.
- AC-04: Add Package shall be available only on active projects.
10.2 Informational Note Modal
- AC-05: Informational note modal shall be displayed every time Add Package is clicked.
- AC-06: Modal shall be static and always shown.
- AC-07: Modal shall have Continue and Cancel buttons.
10.3 Package Selection
- AC-08: Package selection shall show only published packages for the project's brand.
- AC-09: Packages shall be organized by expandable package groups.
- AC-10: User shall be able to select only one package at a time.
- AC-11: Empty state shall be shown when the brand has no published packages.
10.4 Conflict Detection
- AC-12: Conflicting Items modal shall appear only when conflicts exist.
- AC-13: If no conflicts exist, package shall be added directly.
- AC-14: Duplicate Event Type shall show dynamic count and Keep/Replace dropdown.
- AC-15: Existing Event Contains Data shall show informational warning about data removal.
- AC-16: Service Not in Package (contractor assigned) shall show Keep/Remove dropdown.
- AC-17: Signed Proposal Conflict shall show informational warning about contract.
10.5 Replace vs Duplicate
- AC-18: Replace shall override existing event/service values with package values.
- AC-19: Keep/Duplicate shall retain existing events and add package event as new.
- AC-20: For multiple same-type events, Replace shall replace all; Keep shall retain all.
10.6 Service Handling
- AC-21: Services in the package shall override existing service values.
- AC-22: Services not in the package with no contractor shall be auto-deleted on Replace.
- AC-23: Services not in the package with a contractor shall be surfaced with Keep/Remove option.
- AC-24: Service override/deletion shall apply only when Replace is chosen.
10.7 Signed Proposal
- AC-25: Signed proposal notice shall always appear when a signed proposal exists.
- AC-26: A second proposal shall not be sendable after a package change.
- AC-27: A contract may be created manually (optional).
- AC-28: Changes shall be reflected in the client portal at the project changes level.
10.8 Event No Longer Needed Warning
- AC-29: Warning shall appear in Services tab for default lead events not in the package on future dates.
- AC-30: Warning shall apply for both signed proposal and manually added packages.
- AC-31: Delete Event shall permanently delete the event.
- AC-32: Keep Event Active shall remove the warning.
10.9 Invoice Reminder
- AC-33: Invoice update reminder shall always appear after adding a package.
- AC-34: System shall not modify invoices automatically.
- AC-35: Got It shall dismiss the reminder.
10.10 Contractor & Payment
- AC-36: Contractors shall never be removed automatically.
- AC-37: All invoice and payment actions shall be handled manually.
11. Dependencies
#
Type
Dependency
Description
Impact if Unavailable
1
Internal Module
Project Details
Parent module containing Add Package
Cannot access Add Package
2
Internal Module
Project Management Widget
Contains Add Package button
Cannot trigger Add Package
3
Internal Module
Templates / Packages
Source of published packages by brand
Cannot display packages
4
Internal Module
Brands
Determines which packages are shown
Cannot filter packages by brand
5
Internal Module
Events / Services
Target of package application
Cannot apply package
6
Internal Module
Deliverables Widget
Deliverables updated by package
Deliverables not updated
7
Internal Module
Order Info / Order Activity
Reflects and logs package changes
Order Info/Activity not updated
8
Internal Module
Finance / Invoices
Manual invoice updates
Invoice reminder cannot reference invoices
9
Internal Module
Client Portal
Reflects project changes
Changes not reflected to client
10
Internal Module
Contractor Assignments
Contractor conflict handling
Cannot surface contractor conflicts
12. References
- Events Info Tab FRD (Order Info, Order Activity, Services)
- Proposals & Packages Module Documentation
- Finance Module FRD
- Project Details Module FRD
- Client Portal Documentation
Document End
Create event-sidebar
Functional Requirements Document (FRD)
Create Event Module
Module Name: Create Event
Version: 1.1
Last Updated: May 22, 2026
Status: Draft
1. Module Overview
1.1 Module Name
Create Event
1.2 Purpose
The Create Event module enables agency users to add new events to an existing project from the Project Details page. Events represent individual occasions or sessions within a project (e.g., a Wedding project may have multiple events like Rehearsal Dinner, Wedding Ceremony, Engagement Photoshoot). This module also covers the Add Service flow, which allows users to add services to existing events, and the shared Add Deliverables functionality that optionally follows both flows.
1.3 Business Goals
- Enable quick creation of events within existing projects without leaving the Project Details page.
- Allow flexible event configuration with customizable event types, services, dates, and venues.
- Support deliverable assignment during event creation for streamlined workflow setup.
- Provide an Add Service flow to add services to existing events with optional deliverable creation.
- Maintain consistency with the agency's configured event types and service offerings.
- Log all event and service creation activities for audit and tracking purposes.
1.4 Module Access Points
Access Point
Location
Action Triggered
Create Event
Project Details → Sidebar → "CREATE EVENT" button
Opens Create New Event modal
Add Service
Project Details → Sidebar → "ADD SERVICE" button
Opens Add New Services modal
2. User Roles & Permissions
2.1 Agency Portal Users
Role
Create Event
Add Service
Add Deliverable
Agency Owner
✅ Yes
✅ Yes
✅ Yes
Admin
✅ Yes
✅ Yes
✅ Yes
Project Manager
✅ Yes
✅ Yes
✅ Yes
2.2 Other Portals
Portal
Access
Client Portal
❌ No access
Contractor Portal
❌ No access
3. User Flow
3.1 Create Event Flow
3.1.1 The user navigates to the Project Details page and locates the Project Details sidebar on the right side of the screen.
3.1.2 The user clicks the "CREATE EVENT" button in the sidebar.
3.1.3 The system displays the "Create New Event" modal as an overlay on the current page.
3.1.4 The user fills in the required and optional event details:
- Event Type (required)
- Services (required, multi-select)
- Event Stage (optional, defaults to "New Lead")
- Event Date (required)
- Event Time (optional)
- Event End Date (required)
- Event End Time (optional)
- Venue (optional)
- Event Notes (optional)
3.1.5 The user clicks "Next" to proceed to the Add Deliverable step, or clicks "Cancel" to close the modal without saving.
3.1.6 If the user clicks "Next", the system validates all fields. If validation fails, the system displays appropriate error messages and prevents progression.
3.1.7 If validation passes, the system displays the "Add Deliverables" modal.
3.1.8 The user can:
- Add one or more deliverables using the "+" button to add rows
- Remove deliverables using the trash icon
- Leave all deliverable rows empty and click "Save" to create the event without deliverables
- Click "Back" to return to the Create New Event modal and edit event details
- Click the close button (X) to cancel the entire operation
3.1.9 Upon successful creation, the system displays a success toast message and returns the user to the Project Details page.
3.1.10 The newly created event appears in the event cards section of the Project Details page.
3.2 Add Service Flow
3.2.1 The user navigates to the Project Details page and locates the Project Details sidebar.
3.2.2 The user clicks the "ADD SERVICE" button in the sidebar.
3.2.3 The system displays the "Add New Services" modal as an overlay.
3.2.4 The user fills in the service details:
- Choose Event (required)
- Services (required, multi-select)
- Coverage (optional)
- Min Amount of Photos (optional, conditional)
- Number of Shooters (optional)
3.2.5 The user clicks "Next" to proceed to the Add Deliverable step, or clicks "Cancel" to close the modal.
3.2.6 If the user clicks "Next", the system validates all fields. If validation fails, error messages are displayed.
3.2.7 If validation passes, the system displays the "Add Deliverables" modal.
3.2.8 The user can:
- Add one or more deliverables using the "+" button to add rows
- Remove deliverables using the trash icon
- Leave all deliverable rows empty and click "Save" to create the service without deliverables
- Click "Back" to return to the Add New Services modal and edit service details
- Click the close button (X) to cancel the entire operation
3.2.9 Upon successful creation, the system displays a success toast message and returns the user to the Project Details page.
3.3 Add Deliverables Flow (Shared)
3.3.1 The Add Deliverables modal appears after the user clicks "Next" in either the Create Event or Add Service modal.
3.3.2 The modal displays the title "Add Deliverables" with subtitle "Do you need to add any deliverables to this event?"
3.3.3 By default, one empty deliverable row is displayed with a dropdown field.
3.3.4 The user can select a deliverable from the dropdown, which contains:
- Deliverable options from configured package line items
- "Custom Deliverable (Manual Input)" option
3.3.5 If the user selects "Custom Deliverable (Manual Input)", they must type the custom deliverable name in the field.
3.3.6 The user can add more deliverable rows by clicking the "+" button next to each row.
3.3.7 The user can remove a deliverable row by clicking the trash icon next to each row.
3.3.8 Deliverables already added to the list are excluded from subsequent dropdown options to prevent duplicates.
3.3.9 The modal displays an info message: "This step is optional. You can click Save to create the event without adding any deliverables."
3.3.10 The modal displays a reminder message: "Reminder: Please update the invoice if any of these changes impact pricing."
3.3.11 The user clicks one of the action buttons:
- "Save" - Creates the event/service with any deliverables that were added (or without deliverables if all rows are empty)
- "Back" - Returns to the previous modal (Create Event or Add Service) to edit details
- Close button (X) - Cancels the entire operation and discards all entered data
3.3.12 Upon successful creation, the system displays a success toast and returns to Project Details.
4. Functional Logic
4.1 Create New Event Modal
4.1.1 Modal Trigger and Display
- Clicking "CREATE EVENT" in the Project Details sidebar opens the Create New Event modal.
- The modal displays as a centered overlay with a semi-transparent backdrop.
- The modal contains an informational message: "You're adding an event to the current project. To start a new project instead, click here" with "click here" as a hyperlink.
- Clicking "click here" navigates the user to the Create New Project flow.
4.1.2 Event Type Selection
- The Event Type field is a dropdown that displays event types configured by the agency during setup.
- Event types include: Wedding, Engagement Photoshoot, Rehearsal Dinner, Elopement, Proposal, Newborn Photography, Family Portraits, Birthday Parties, Maternity Shoot, Corporate Shoot, Graduation, Anniversary, Real Estate, Music Video, Product Photography, Fashion Shoot, Baby Shower, Holiday Party, Senior Portraits, Bar Mitzvah, Bat Mitzvah, and any custom types added by the agency.
- The user must select one event type (single-select).
- This field is required.
4.1.3 Services Selection
- The Services field displays as selectable chips/tags based on the agency's configured services.
- Default services include: Photography, Videography, Content creation.
- The user can select multiple services (multi-select).
- At least one service must be selected; this field is required.
- Selected chips are highlighted with a border/background color change.
4.1.4 Event Stage Selection
- The Event Stage field is a dropdown with the following options:
- New Lead (default)
- Follow-up
- Proposal Sent
- Proposal Signed
- Deposit Paid
- Planning
- Post Production
- Completed
- Archived
- The field defaults to "New Lead" when the modal opens.
- This field is optional; the default value is used if not changed.
4.1.5 Date and Time Configuration
- The Event Date field uses a date picker control and is required.
- The date format follows DD/MM/YYYY.
- The date picker disables all past dates; only the current date and future dates are available for selection.
- The Event Time field uses a time picker with 12-hour format (hh:mm AM/PM) and is optional.
- The Event End Date field uses a date picker control and is required.
- The Event End Time field uses a time picker with 12-hour format and is optional.
- The system validates that Event End Date is on or after Event Date.
- If Event End Date equals Event Date, Event End Time must be after Event Time (when both times are provided).
4.1.6 Venue Selection
- The Venue field uses Google Places autocomplete integration.
- Users can search for and select addresses from Google Places suggestions.
- The selected address is stored with full location details (address, city, state, country, coordinates).
- This field is optional.
- If no venue is selected, the system displays "To be decided" in venue-related displays throughout the application.
4.1.7 Event Notes
- The Event Notes field is a multi-line text area for free-form notes.
- This field is optional.
- Maximum 250 characters limit is enforced.
4.1.8 Event Color Assignment
- The system automatically assigns a color to the newly created event.
- The color is used for visual identification in event cards and calendar views.
- Users cannot manually select the event color during creation.
4.1.9 Modal Actions
- Cancel Button: Closes the modal without saving any data. All entered information is discarded.
- Next Button: Validates all fields and proceeds to the Add Deliverable modal if validation passes.
4.2 Add New Services Modal
4.2.1 Modal Trigger and Display
- Clicking "ADD SERVICE" in the Project Details sidebar opens the Add New Services modal.
- The modal displays as a centered overlay with a semi-transparent backdrop.
4.2.2 Choose Event Selection
- The Choose Event field is a dropdown that lists all events within the current project.
- Each event is displayed with its color indicator and name.
- The user must select one event (single-select).
- This field is required.
4.2.3 Services Selection
- The Services field displays as selectable chips/tags based on the agency's configured services.
- Services that are already assigned to the selected event are displayed but disabled (greyed out and not clickable).
- The user can only select services not currently assigned to the event.
- At least one new service must be selected; this field is required.
- The field label includes an asterisk (*) to indicate it is required.
4.2.4 Coverage Field
- The Coverage field is a text input for specifying service duration.
- This field accepts numeric input only.
- Minimum value: 1
- Maximum value: 24
- The field is optional.
- Input suffix/unit is "h" (hours).
4.2.5 Min Amount of Photos Field
- This field only appears when "Photography" is selected as a service type.
- The field is a numeric input.
- Minimum value: 1
- Maximum value: 5,000
- The field is optional.
4.2.6 Number of Shooters Field
- The Number of Shooters field is a numeric input.
- The field accepts positive integers only.
- Maximum limit of 4 is enforced.
- The field is optional.
4.2.7 Modal Actions
- Cancel Button: Closes the modal without saving any data.
- Next Button: Validates all fields and proceeds to the Add Deliverable modal if validation passes.
4.3 Add Deliverables Modal
4.3.1 Modal Context
- The Add Deliverables modal appears as Step 2 in both the Create Event and Add Service flows.
- This step is optional; users can click "Save" without adding any deliverables.
4.3.2 Modal Header
- Modal title: "Add Deliverables"
- Subtitle: "Do you need to add any deliverables to this event?"
- Close button (X) in the top-right corner.
4.3.3 Deliverable Rows
- By default, one empty deliverable row is displayed when the modal opens.
- Each deliverable row contains:
- Deliverable Name dropdown field with placeholder "Type deliverable name"
- "+" button to add a new deliverable row below
- Trash icon to remove the row
- Users can add unlimited deliverable rows by clicking the "+" button.
- Users can remove any row by clicking the trash icon.
- The minimum number of rows is one (the default empty row cannot be deleted, but can be left empty).
4.3.4 Deliverable Name Dropdown
- The Deliverable Name field is a dropdown/searchable select field.
- The dropdown options are populated from the database, sourced from:
- Line items from configured packages
- The "Custom Deliverable (Manual Input)" option is always available at the end of the list.
- If no packages or line items exist, the dropdown will only contain the "Custom Deliverable (Manual Input)" option.
- Deliverables already selected in other rows are excluded from the dropdown to prevent duplicates.
4.3.5 Custom Deliverable
- When "Custom Deliverable (Manual Input)" is selected, the user must type the custom deliverable name directly in the field.
- Maximum character limit: 100 characters.
4.3.6 Info Messages
- Info Box (Grey): "This step is optional. You can click Save to create the event without adding any deliverables."
- Always displayed at the bottom of the deliverable rows.
- Reminder Box (Yellow): "Reminder: Please update the invoice if any of these changes impact pricing."
- Always displayed below the info box.
4.3.7 Modal Actions
- Back Button: Returns to the previous modal (Create New Event or Add New Services) allowing the user to edit the details entered in Step 1.
- Save Button: Creates the event/service with any deliverables that were added. If all deliverable rows are empty, the event/service is created without deliverables.
- Close Button (X): Located at the top-right corner of the modal. Closes the modal and discards all data from both Step 1 and Step 2.
4.3.8 Validation Behavior
- No validation is required for deliverable rows.
- Empty deliverable rows are ignored when saving.
- The event/service is created with whatever valid deliverables were added.
- If all rows are empty or deleted, the event/service is created without any deliverables.
4.4 Post-Creation Behavior
4.4.1 Navigation
- After successful event or service creation, the user is returned to the Project Details page.
- The page is refreshed to display the newly created event in the event cards section.
4.4.2 Event Card Display
- The newly created event appears as a card in the horizontal event cards section.
- The card displays: Event color indicator, event name (truncated if long), event date, event stage, and assigned team member avatars.
4.4.3 Activity Logging
- Event creation is logged in the Activity Tab with the following details:
- Activity type: "Event Created"
- User who created the event
- Timestamp of creation
- Event name
- Service addition is logged in the Activity Tab with the following details:
- Activity type: "Service Added"
- User who added the service
- Timestamp
- Service name and event name
- Deliverable creation is logged separately if a deliverable was created.
5. Field Details & Validations
5.1 Create New Event Modal Fields
Field
Type
Required
Validation Rules
Event Type
Dropdown
Yes
Must select one option from the list
Services
Multi-select Chips
Yes
At least one service must be selected
Event Stage
Dropdown
No
Defaults to "New Lead" if not changed
Event Date
Date Picker
Yes
Must be current date or future date; format DD/MM/YYYY
Event Time
Time Picker
No
12-hour format (hh:mm AM/PM)
Event End Date
Date Picker
Yes
Must be on or after Event Date; format DD/MM/YYYY
Event End Time
Time Picker
No
If same day as Event Date, must be after Event Time
Venue
Google Places Autocomplete
No
Must select from Google Places suggestions if entering a venue
Event Notes
Text Area
No
Max 250 characters
5.2 Add New Services Modal Fields
Field
Type
Required
Validation Rules
Choose Event
Dropdown
Yes
Must select one event from the project
Services
Multi-select Chips
Yes
At least one service must be selected; already assigned services are disabled
Coverage
Numeric Input
No
Numeric only; Min: 1, Max: 24
Min Amount of Photos
Numeric Input
No
Only visible if Photography selected; Numeric only; Min: 1, Max: 5,000
Number of Shooters
Numeric Input
No
Numeric only; Max: 4
5.3 Add Deliverables Modal Fields
Field
Type
Required
Validation Rules
Deliverable Name
Dropdown/Searchable Select
No
No validation; empty rows are ignored on save
Custom Deliverable Name
Text Input
No (if Custom selected)
Max 100 characters
Add Row (+) Button
Action Button
N/A
Adds new deliverable row below
Delete Row (Trash) Button
Action Button
N/A
Removes the deliverable row
6. Success Message Handling
Action
Success Message
Post-Success Behavior
Event Created (with deliverable)
"Event has been created"
Returns to Project Details; event appears in event cards
Event Created (without deliverable)
"Event has been created"
Returns to Project Details; event appears in event cards
Service Added (with deliverable)
"Service has been added"
Returns to Project Details
Service Added (without deliverable)
"Service has been added"
Returns to Project Details
7. Error Message Handling
Error Scenario
Error Message
Trigger Condition
Event Type not selected
"Please select an event type"
User clicks Next without selecting event type
No services selected
"Please select at least one service"
User clicks Next without selecting any service
Event Date not selected
"Please select an event date"
User clicks Next without selecting event date
Event End Date not selected
"Please select an event end date"
User clicks Next without selecting end date
End Date before Start Date
"End date cannot be before start date"
End Date is earlier than Event Date
End Time before Start Time (same day)
"End time cannot be before start time"
Same day event with End Time before Start Time
Event not selected (Add Service)
"Please select an event"
User clicks Next without selecting event in Add Service modal
No new services selected
"Please select at least one service"
User doesn't select any enabled service in Add Service modal
Coverage out of range
"Coverage must be between 1 and 24 hours"
Coverage value is less than 1 or greater than 24
Min Photos out of range
"Minimum photos must be between 1 and 5,000"
Value is less than 1 or greater than 5,000
Custom Deliverable Name too long
"Deliverable name cannot exceed 100 characters"
Custom deliverable name exceeds 100 characters
8. Edge Cases
Edge Case
System Behavior
Project has no events (Add Service flow)
Choose Event dropdown shows "No events available" message; user cannot proceed
All services already assigned to event
All service chips are disabled; user cannot proceed; message displayed: "All services are already assigned to this event"
No packages/line items configured
Deliverable Name dropdown only shows "Custom Deliverable (Manual Input)" option
User closes browser during modal
No data is saved; user must restart the process
Network error during save
Error toast displayed: "Failed to create event. Please try again."; user remains on modal
Event Type list is empty
Modal displays error state: "No event types configured. Please contact your administrator."
Very long event notes
Text area scrolls internally; truncation applied at 250 characters
Duplicate event names
System allows duplicate event names; events are differentiated by unique IDs
User navigates away during creation
Confirmation dialog: "Are you sure you want to leave? Your changes will be lost."
Same-day event with start time but no end time
Event is valid; end time is optional
Multi-year event (End Date in different year)
System allows; no restriction on date range
User adds same deliverable twice
Not possible; already selected deliverables are excluded from dropdown options
User leaves all deliverable rows empty
Event/service is created without any deliverables
User deletes all deliverable rows except default
Default empty row remains; event/service created without deliverables
User clicks Back on Add Deliverables modal
Returns to Step 1 modal with previously entered data preserved
User adds many deliverable rows
No limit; all deliverables are created with the event/service
9. Acceptance Criteria
9.1 Create Event Modal
- AC-1: Clicking "CREATE EVENT" in Project Details sidebar shall open the Create New Event modal.
- AC-2: Event Type dropdown shall display agency-configured event types.
- AC-3: Services shall be displayed as multi-select chips.
- AC-4: Event Stage shall default to "New Lead".
- AC-5: Event Date picker shall not allow past dates.
- AC-6: Event End Date must be on or after Event Date.
- AC-7: Venue field shall integrate with Google Places autocomplete.
- AC-8: Cancel button shall close modal without saving.
- AC-9: Next button shall validate fields before proceeding.
- AC-10: "Click here" link shall navigate to Create New Project flow.
9.2 Add Service Modal
- AC-11: Clicking "ADD SERVICE" in Project Details sidebar shall open the Add New Services modal.
- AC-12: Choose Event dropdown shall list all project events.
- AC-13: Services already assigned to the selected event shall be disabled.
- AC-14: Min Amount of Photos field shall only appear when Photography is selected.
- AC-15: Coverage field shall accept values between 1 and 24 only.
9.3 Add Deliverables Modal
- AC-16: Modal title shall display "Add Deliverables" with subtitle "Do you need to add any deliverables to this event?"
- AC-17: One empty deliverable row shall be displayed by default.
- AC-18: Deliverable Name dropdown shall include options from package line items and "Custom Deliverable" option.
- AC-19: User shall be able to add multiple deliverable rows using the "+" button.
- AC-20: User shall be able to remove deliverable rows using the trash icon.
- AC-21: Already selected deliverables shall be excluded from dropdown options in other rows.
- AC-22: Custom Deliverable Name shall have 100 character limit.
- AC-23: Info message "This step is optional..." shall always be displayed.
- AC-24: Reminder message about updating invoice shall always be displayed.
- AC-25: Back button shall return to Step 1 modal with data preserved.
- AC-26: Save button shall create event/service with any added deliverables.
- AC-27: Save button shall create event/service without deliverables if all rows are empty.
- AC-28: Empty deliverable rows shall be ignored when saving.
9.4 Post-Creation
- AC-29: Successful creation shall display toast message "Event has been created".
- AC-30: User shall be returned to Project Details page after creation.
- AC-31: Newly created event shall appear in event cards section.
- AC-32: Event creation shall be logged in Activity Tab.
- AC-33: Event shall be auto-assigned a color.
9.5 Permissions
- AC-34: Agency Owner shall be able to create events.
- AC-35: Admin shall be able to create events.
- AC-36: Project Manager shall be able to create events.
- AC-37: Client Portal users shall not have access to create events.
- AC-38: Contractor Portal users shall not have access to create events.
10. Dependencies
Dependency Type
Dependency Name
Description
Impact if Unavailable
Internal Module
Project Details
Parent page where Create Event is accessed
Cannot access Create Event
Internal Module
Event Types Configuration
Source for event type dropdown options
Event Type dropdown empty
Internal Module
Services Configuration
Source for services chips
Services chips empty
Internal Module
Packages Module
Source for deliverable type options
Only Custom Deliverable available
Internal Module
Activity Tab
Logs event creation activity
Activity not logged
External Service
Google Places API
Provides venue autocomplete
Venue search unavailable
Database
Events Table
Stores created event data
Event creation fails
Database
Deliverables Table
Stores created deliverable data
Deliverable creation fails
Database
Services Table
Stores service assignments
Service assignment fails
11. References
- Figma Link: [To be added]
Appendix A: Event Types Reference
A.1 Default Event Types
The following event types are available by default and can be customized by the agency:
Event Type
Category
Wedding
Ceremony
Engagement Photoshoot
Pre-wedding
Rehearsal Dinner
Pre-wedding
Elopement
Ceremony
Proposal
Pre-wedding
Newborn Photography
Portrait
Family Portraits
Portrait
Birthday Parties
Celebration
Maternity Shoot
Portrait
Corporate Shoot
Commercial
Graduation
Celebration
Anniversary
Celebration
Real Estate
Commercial
Music Video
Commercial
Product Photography
Commercial
Fashion Shoot
Commercial
Baby Shower
Celebration
Holiday Party
Celebration
Senior Portraits
Portrait
Bar Mitzvah
Ceremony
Bat Mitzvah
Ceremony
A.2 Event Stages Reference
Stage
Description
Order
New Lead
Initial inquiry received
1
Follow-up
Follow-up communication in progress
2
Proposal Sent
Proposal has been sent to client
3
Proposal Signed
Client has signed the proposal
4
Deposit Paid
Client has paid the deposit
5
Planning
Event is in planning phase
6
Post Production
Event completed, in post-production
7
Completed
All work completed
8
Archived
Event has been archived
9
No tickets linked — generate test cases directly from this FRD instead.