← FRD Management
6. Project Details Module
Pixally CRM

Project 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

  1. User navigates to Project Details.
  2. User locates the event card or event tab.
  3. User clicks the kebab menu (⋮) icon.
  4. System displays dropdown with options: "Edit Event" and "Cancel Event".

3.2 Edit Event Flow

  1. User clicks "Edit Event" from kebab menu.
  2. System displays Edit Event modal with pre-populated data.
  3. User modifies desired fields.
  4. User clicks "Save".
  5. 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).
  6. System saves changes and closes modal.
  7. 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:

  1. System performs availability check for all assigned contractors.
  2. If any contractor is unavailable, Update Event modal is displayed (same as Info Tab flow).
  3. 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:

  1. User saves date change.
  2. Contractor Availability Modal (if applicable).
  3. Payment Schedule Impact Pop-up (if applicable).
  4. 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

  1. 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
  2. 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
  3. 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

  1. 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
  2. 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
  3. 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

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

  1. 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
  2. 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
  3. 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

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

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

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

  1. Agency users must be able to access the "Send SNAPSHOT" button from the Event Details page within the Services tab area.
  2. The Send SNAPSHOT modal must display all contractors assigned to the current event with their profile photo, name, service type, role, and selection button.
  3. Contractors who have previously received the Snapshot must display a "Sent" status with the date and timestamp of the last send.
  4. Users must be able to select individual contractors or use the "Select All" functionality to select all contractors at once.
  5. The "Download PDFs" button must generate correctly named PDF files with personalized content for each selected contractor.
  6. The "Send to Contractors" button must successfully deliver emails with PDF attachments to all selected contractors with valid email addresses.
  7. The button label must change from "Send SNAPSHOT" to "Resend SNAPSHOT" after the first successful send to any contractor.
  8. A confirmation dialog must appear before resending Snapshots to prevent accidental resends.
  9. The Contractor Portal must display the "Download SNAPSHOT" button for contractors assigned to events.
  10. The download button on Contractor Portal must be disabled when the current date is more than 7 days before the event date.
  11. A tooltip must display the download restriction message when hovering over the disabled button.
  12. Contractors must be able to download their personalized Snapshot PDF when within the 7-day window before the event.
  13. The Snapshot PDF must contain all required sections: Header, Event Details, Services, Notes, Contacts, and Contractors.
  14. The PDF must display only the services that the specific contractor is assigned to, not all event services.
  15. The Contractors section must display all other contractors assigned to the event, excluding the recipient contractor.
  16. Only Public notes with the "Contractors" visibility checkbox selected must appear in the Snapshot.
  17. Only custom fields marked as "visible to contractors" must appear in the Snapshot.
  18. Clickable links for Timeline and Shooting Guide must work correctly within the PDF when documents are available.
  19. Empty states must be handled gracefully without breaking the PDF layout or displaying errors.
  20. The Settings page must include the auto-send toggle under Notifications > Company Settings with "Send automatically one day before events" label.
  21. The auto-send feature must trigger correctly one day before the event date when enabled.
  22. For multi-day events, auto-send must trigger one day before the first event date only.
  23. Success and error messages must display appropriately for all user actions as specified.
  24. File naming must follow the specified convention with spaces replaced by underscores and hyphens preserved.
  25. All PDF generation must fetch fresh data from the database to ensure accuracy.

Data Consistency Rules

  1. Resending a Snapshot must always fetch the latest project data including any contractor additions, removals, or data changes.
  2. The sent status timestamp must update each time a Snapshot is resent to a contractor.
  3. Auto-send must use the same data freshness logic as manual sends.
  4. Download restrictions must be calculated based on the first event date for multi-day events.
  5. 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

  1. Navigate to the Contractors Tab in the event management interface

  2. Filter by Service Category (Photography/Videography/Content Creation) tabs to view relevant roles according to the service

  3. Check availability: The user may click the Check Availability button to open the availability module before the contractor assignment

  4. Assign Contractors using the global "Assign Contractors" button, role-specific assignment buttons, or service-specific assignment buttons

  5. Monitor Assignment Status - View contractor details, pricing, and other status indicators

  6. 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

✅ 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

  1. Navigation: Studio owner/agency owner navigates to Project → Event Management → Contractors tab
  2. Button Access: "Assign Yourself" button is visible and clickable (only for studio owner/agency owner role)
  3. Pop-up Display: Click opens assignment pop-up with Services and Role fields
  4. Service Selection: Select the required service from dynamically populated options
  5. Role Selection: Select the required role from the predefined options
  6. Conflict Check: The system validates that no date conflicts exist
  7. Assignment: Click the "Assign" button to complete the assignment
  8. Confirmation: The system displays a success message and updates the contractor card
  9. 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

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

  1. Agency user navigates to Project Details → Events Tab → Contractors Tab
  2. User clicks "Assign Contractor" and selects a contractor
  3. The Assign Event Price pop-up opens
  4. If the contractor does not have a pay rate set up, system displays a confirmation popup (see Section 4.1 for popup logic)
  5. User enters $0.00 in the Amount field (or it defaults to $0 based on the unassigned rate)
  6. System validates: Amount >= $0 → passes validation
  7. User clicks Save/Assign
  8. System creates the contractor assignment record with amount = $0
  9. The contractor card displays $0.00 (not blank, not "--")
  10. All downstream modules (invoices, finance, calendar, portal) reflect the $0 price

Flow 2: Contractor Uploads Invoice for $0 Event

  1. Contractor is assigned at $0 event price
  2. Contractor navigates to Contractor Portal → Payments
  3. Contractor sees the event listed with "Event Price: $0.00"
  4. Contractor can upload an invoice for any amount — $0, $50 for parking, $100 for additional services, etc. — no permission from the agency is required
  5. Agency reviews the invoice in Finance → Contractor Invoices
  6. Agency can Pay or void the invoice.
  7. The invoice is not archived until the agency completes the review process

Flow 3: Agency Reviews Contractor's Invoice with Amount > Event Price

  1. Contractor uploads an invoice for $50 on a $0 event (e.g., for parking fees or additional services)
  2. Agency receives the invoice in Finance → Contractor Invoices
  3. Agency reviews the invoice and verifies the charges
  4. If the agency approves, the agency updates the event price via Update Event Price to match the invoiced amount
  5. Standard payment flow proceeds for the approved amount
  6. All downstream modules reflect the updated price

Flow 4: Agency Reduces Event Price (>$0 → $0)

  1. Agency navigates to Update Event Price and attempts to reduce the price
  2. System enforces the price floor rule — price cannot go below the amount already paid
  3. If no payment has been made, the agency can reduce the price to $0
  4. System sends a notification to the contractor about the price change to $0
  5. 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

  1. Entry Point Selection: The user selects one of four entry points based on the assignment scope
  2. 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
  3. Suggested Contractors Pop-up: Opens with default filters per entry point
  4. Apply Filters & Toggles: The user can modify filters and apply toggles as needed
  5. Browse & Select: Browse the contractor list (sorted nearest → farthest) and select the contractor
  6. Assign Contractor: Click Select → opens Assign Event Price pop-up
  7. 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

  1. **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
  2. **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
  3. **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
  4. **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
  5. **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
  6. **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
  7. **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
  8. **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
  9. **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
  10. **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
  11. **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
  12. **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

  1. Contractor selection: The user clicks "Select" on the chosen contractor
  2. Price pop-up opens: System fetches pricing based on the contractor's role configuration for the service in the event (hourly or fixed price)
  3. Price Display: Auto-calculates Event Price, Travel Fee, Final Price
  4. 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
  5. Final Validation: Ensures Final Price ≥ $0 and required fields are completed
  6. Assignment Commit: "Assign Now" creates an assignment of the contractor to the event with the final price
  7. 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

  1. Update Action: The user clicks the "Update Event Price" option on the contractor's card from the kebab menu

  2. **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

  1. **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

  1. **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

  1. **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

  1. **Final Validation:
    **
  • Ensures Final Price ≥ $0 and all required fields (Add Name, Amount) are valid.
  1. **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)

  1. **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

✅ 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

  1. User navigates to the Raw Media tab
  2. Before event completion: The Raw Media tab displays the message:
    1. “No Raw Media Available Yet” — “Contractors will upload raw deliverables here once the event concludes. Please check back later.”
  3. After the event completion:
    1. Contractors are displayed by role hierarchy (Lead Shooter > Second Shooter > Drone Operator > Assistant).
    2. If the contractor hasn’t submitted deliverables:
      1. When a contractor has not yet submitted any RAW Media, display the following information in a clear and informative manner:
        1. Role (with icon) assigned for the event (Lead Shooter, Second Shooter, Drone Operator, assistant) and follows the role hierarchy
        2. Contractor’s Avatar and Full Name
        3. Service specialization for the event (Photographer/Videographer/Content Creator)
        4. Text: “Nothing Here” Subtext: “This contractor is yet to provide RAW Media”
    3. If the contractor has submitted deliverables, show delivery by its methods submitted by the contractor (Digital Delivery, Hard Drive, Other)
    4. 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.

(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
  • (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

✅ 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:
    **

    1. User changes date and clicks Save
    2. System validates the date change
    3. If contractors assigned and date is future/past → Contractor Availability Modal (if any unavailable)
    4. If primary event and unpaid payments exist → Payment Schedule Impact Pop-up
    5. 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:

  1. User changes date and clicks Save
  2. System validates the date change
  3. If contractors assigned AND date is future/past (not TBD) → Contractor Availability Modal displayed first (if any unavailable)
  4. User completes contractor availability actions (keep/remove/replace)
  5. If primary event AND unpaid payments exist → Payment Schedule Impact Pop-up displayed
  6. User clicks "No Changes" or "Update Invoice(s)" / "Update to TBD"
  7. 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

  1. The Info Tab displays Event Info and Order Info sections in read-only mode by default upon navigation.

  2. The Event Name is displayed with the correct color dot indicator fetched from Agency Settings.

  3. Multi-day events display separate "Start Date & Time" and "End Date & Time" fields, and single-day events display a single "Event Date & Time" field.

  4. TBD events display "TBD" in the date and timezone fields, and "Venue not decided" is shown when no venue is set.

  5. The Time Zone dropdown is populated with the correct timezone options (EDT/EST, CDT/CST, MDT/MST, PDT/PST, MST, HST, AKDT/AKST).

  6. Clicking "Edit" on Event Info converts fields to inline editable inputs with "Save" and "Cancel" buttons.

  7. The Primary Venue field provides Google Maps API autocomplete suggestions during inline editing.

  8. Changing the event date with assigned contractors triggers the Update Event modal with accurate contractor availability status.

  9. Available contractors in the Update Event modal have disabled "Remove Contractor" and "Replace" buttons.

  10. Unavailable contractors in the Update Event modal have active "Remove Contractor" and "Replace" buttons.

  11. The Update Event modal displays payment information (Event Price, Amount Paid, Distance) for each contractor.

  12. Clicking "Replace" opens the Suggested Contractors modal pre-filtered by the new date, role, and service area.

  13. The Suggested Contractors modal displays contractor name, rate, travel fee, service area, rating, and "Select" action.

  14. Clicking "Discard Changes" displays a confirmation popup asking the user to confirm the discard action before reverting.

  15. Confirming "Yes, Discard" on the popup reverts the date back to the original, discards all contractor changes, and closes the modal.

  16. Clicking "Go Back" on the discard confirmation popup returns the user to the Update Event modal without discarding anything.

  17. "Save and Notify Contractors" sends email and in-app notifications to all affected contractors.

  18. Clicking "Save and Notify" with unresolved unavailable contractors shows the secondary warning popup with "Remove & Notify" option.

  19. Removed contractors are unassigned from the event, and the contractor card in the Update Event modal is replaced with the Unassigned state card.

  20. Clicking the "Assign [Role]" button on the Unassigned card opens the Suggested Contractors modal pre-filtered for that specific role.

  21. The event appears on the Dashboard > Unassigned Contractor List when contractors are removed.

  22. 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.

  23. Venue changes recalculate distance for existing contractors but do NOT recalculate travel fees.

  24. Venue changes trigger email and in-app notifications to all assigned contractors.

  25. New contractors assigned after a venue change have distance and travel fee calculated based on the new venue.

  26. 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.

  27. Changing the primary event date from future to past with unpaid payments displays the Payment Schedule Impact pop-up with payment schedule table.

  28. 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.

  29. Changing the primary event date from future to TBD with unpaid payments displays the Payment Schedule Impact pop-up with original payment dates.

  30. The Payment Schedule Impact pop-up displays a table with columns: Amount, Due Date, Status.

  31. The Payment Schedule Impact pop-up message includes "X out of Y payments are unpaid" count.

  32. The payment schedule table shows ALL payments (paid and unpaid) for full visibility.

  33. The payment schedule table is scrollable if there are many payments.

  34. For Future → Past scenario, payment dates remain as original future dates when "No Changes" is clicked.

  35. For TBD → Past scenario, payment dates are calculated from smart date configuration and displayed with Overdue status for past due dates.

  36. For Future → TBD scenario, buttons are "No Changes" and "Update to TBD" (not "Update Invoice").

  37. Clicking "No Changes" closes the pop-up and saves the date change with payment schedule behavior varying by scenario.

  38. Clicking "Update Invoice" closes the pop-up, saves the date change, and redirects to Finance Tab → Invoice.

  39. Clicking "Update to TBD" closes the pop-up, saves the date change, and updates payment dates to TBD.

  40. The Payment Schedule Impact pop-up is NOT displayed for non-primary events.

  41. The Payment Schedule Impact pop-up is NOT displayed when all invoice payments are already paid.

  42. Changing the event date to a past date does NOT trigger the contractor availability check modal.

  43. Changing the event date to TBD does NOT trigger the contractor availability check modal.

  44. 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

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

✅ 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

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

12. References

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:

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

  1. Navigate to Feature Location: Users navigate to Project Details > Specific Event > Events Tab > Side Panel OR Event Overview tab (side panel)
  2. 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
  3. 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
  4. 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
  5. Manual Venue Selection: User searches/selects from a dropdown of venues with any projects, and displays project information with deliverables or event dates
  6. 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
  7. Scroll Through Projects: User vertically scrolls through multiple projects if available
  8. 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

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

  1. Access Upload Timeline: User clicks the "Upload Timeline" button from the Project Management side menu
  2. Pop-Up Opens: The Upload Timeline pop-up displays with two tabs - "Upload New Timeline" (default) and "Uploaded Timelines"
  3. 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
  4. 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)
  1. Confirmation: User clicks "Confirm" to upload timeline
  2. Timeline Assignment: The System assigns the uploaded timeline to all selected services
  3. 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

  1. Switch to Uploaded Timelines Tab: User clicks "Uploaded Timelines" tab in the Upload Timeline pop-up
  2. Timeline Display: System displays all uploaded timelines grouped by event and service with visual indicators
  3. 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
  4. 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
  5. 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:
    1. Check if at least one service is selected
    2. Check if either link OR file is provided
    3. Check if BOTH the link AND the file are provided
    4. If both methods are detected, display an error message and prevent upload
    5. 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

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)

  1. User navigates to the Event details page or Overview tab
  2. User locates the side panel with project management options
  3. User clicks the "Add Service" button in the side panel
  4. 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
  5. System checks if any services remain available for the selected/current event
  6. If services are available, the "Add New Services" pop-up opens with service selection
  7. If no services are available, button remains disabled/inactive

Service Configuration

  1. 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)
  2. User selects one service type from available options (already added services are grayed out)
  3. Pop-up expands dynamically to show relevant configuration fields for selected service
  4. User completes all required fields for the selected service

Service Submission

  1. User completes all required fields for the selected service
  2. User clicks the "Add new services" button
  3. System validates all input fields
  4. If validation passes, system creates the new service
  5. Success toast message displays with dynamic service type name
  6. Pop-up closes and returns user to the services tab
  7. 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

  1. Initial Access: The user clicks the "CREATE EVENT" button from the Project Management panel
  2. 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"
  3. Form Display: If validation passes, the "Create new event" pop-up opens
  4. Event Configuration: User fills required fields (Event Type, Services, Service Area, Venue)
  5. Date/Time Setup: User configures event timing (single or multi-day)
  6. Venue Selection: The user selects a venue using Google Maps integration
  7. Submission: The user clicks "Create new event" to save
  8. 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:
    1. Current user ("You") - whether Project Owner, Admin, or Owner - displayed first
    2. Clients
    3. Contractors
    4. 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:

  1. Current user ("You") - Always displayed first, regardless of role
  2. Clients - All clients associated with the project
  3. Contractors - All contractors assigned to project events
  4. 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

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

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

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

Email

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)

  1. User navigates to Project Details and stays on the Overview tab.
  2. User opens the Project Management widget.
  3. User clicks the "Archive" button.
  4. System evaluates event count and primary event status.
  5. System displays the appropriate modal (Archive Project modal or blocking modal).
  6. User reviews impact notice, sets notification toggles, and optionally adds internal notes.
  7. User clicks "Confirm".
  8. Project is archived and moved to the Archived Projects page.
  9. Success toast is displayed.

3.2 Archiving an Event (Events Tab)

  1. User navigates to Project Details and switches to the Events tab.
  2. User selects the specific event.
  3. User opens the Project Management widget.
  4. The "Archive" button now applies to the selected event.
  5. User clicks the "Archive" button.
  6. System evaluates event count and primary event status.
  7. System displays the Archive Event modal or blocking modal.
  8. User reviews, sets toggles, adds notes, and clicks "Confirm".
  9. Event is archived and moved to the Archived Events list.
  10. Success toast is displayed.

3.3 Unarchiving a Project

  1. User navigates to the Archived Projects page (via trash icon on Projects listing).
  2. User clicks "View Details" on the archived project.
  3. User opens the Project Management widget.
  4. The button now shows "Unarchive".
  5. User clicks "Unarchive".
  6. System displays the Unarchive confirmation dialog.
  7. User sets notification toggles and clicks "Unarchive".
  8. Project is restored to its previous state (events restored to their pipeline stages).
  9. Success toast is displayed.

3.4 Unarchiving an Event

  1. User navigates to Project Details and switches to the Events tab.
  2. User selects the archived event.
  3. User opens the Project Management widget.
  4. The button shows "Unarchive".
  5. User clicks "Unarchive".
  6. System displays the Unarchive confirmation dialog.
  7. User sets notification toggles and clicks "Unarchive".
  8. Event is restored to its previous pipeline stage.
  9. 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

  1. User navigates to Project Details.
  2. User opens the Project Management widget.
  3. User locates the "Delete Project" button.
  4. If the project is eligible (all events in lead stage, nothing signed, nothing paid), the button is enabled.
  5. User clicks "Delete Project".
  6. System displays the Delete confirmation dialog.
  7. User reviews the warning, sets notification toggles.
  8. User clicks "Delete".
  9. Project and all associated data are permanently deleted.
  10. User is redirected to the Projects listing.
  11. Success toast is displayed.

3.2 Attempting to Delete an Ineligible Project

  1. User navigates to Project Details and opens the Project Management widget.
  2. The "Delete Project" button appears grayed out (disabled).
  3. User hovers over the disabled button.
  4. System displays a tooltip explaining why deletion is not available.
  5. 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)

  1. User navigates to Project Details and opens the Project Management widget.
  2. User clicks "Add Package".
  3. System displays the informational note modal ("Add a Package to This Project").
  4. User clicks "Continue".
  5. System displays the Package selection screen showing published package groups for the project's brand.
  6. User expands a group and selects one package.
  7. User clicks "Continue".
  8. System checks for conflicts. If none exist, the package is added directly.
  9. System displays the "Update the invoice" reminder pop-up.
  10. User clicks "Got It".
  11. Package events and services are added to the project.

3.2 Adding a Package (With Conflict)

  1. Steps 1–7 same as above.
  2. System detects one or more conflicts.
  3. System displays the "Conflicting Items" modal listing all conflicts.
  4. User resolves each actionable conflict (replace or keep/duplicate) via dropdowns.
  5. User reviews informational-only notices (existing event data, signed proposal).
  6. User clicks "Submit".
  7. System applies the user's choices.
  8. System displays the "Update the invoice" reminder pop-up.
  9. User clicks "Got It".
  10. 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

Linked tickets (0)

No tickets linked — generate test cases directly from this FRD instead.

—