23. Proposal Form
Pixally CRMProposal
Proposal Form
Functional Requirement Document
BA & Ideation: Deval Chauhan
Reviewed By: Keval Gajjar
Updated Date:16 December 2025
Status:
Version: 1.0
Proposal Module - FRD Summary
Module: Proposal Module | FRDs: 5 | Test Cases: 289 | Date: December 16, 2025
FRD #1: Proposal Listing
- Centralized template management interface under Templates → Proposals
- Columns: Name, Status (Draft/Published), Brand, Created Date, Actions
- Actions: Edit Template, Duplicate, Delete (with confirmation)
- Search: Real-time filtering by name/brand (case-insensitive)
- Sorting: All columns sortable; default = newest first
- Pagination: 10/25/50/100 rows per page
- Create Modal: Proposal Name + Brand (auto-select if single brand)
- Status Flow: Draft → Published (one-way, cannot revert)
- Only Published templates available for project assignment
- Duplicate creates "(Copy)" version in Draft status (naming convention TBD)
- Deleting Published template doesn't affect existing project proposals (snapshot model)
FRD #2: Proposal Builder
- 4 Sidebar Panels: Builder, Text Settings, Colors, Settings
- Mandatory Sections: Package Groups, Contract, Payment Terms
- Optional Sections: Header Image, Welcome Message, Thank You Message, Discount
- Header Image: 5MB max; JPG/PNG/GIF/WebP
- Package Groups: Multi-select from published groups (filtered by brand)
- Contract: Single selection only from published templates
- Payment Terms: Smart Date / Fixed Date (inherited from Invoice module)
- Payment Types: Custom amount, Percentage, Equal Payment
- Presets: Save and Apply payment term configurations
- Discount Types:
- Bundle Discount: Requires 2+ package groups; Apply to packages only OR packages + A La Carte
- Regular Discount: No conditions; applies to entire invoice
- Discount Values: Flat amount OR Percentage (max 100%, cannot exceed subtotal)
- Text Settings: Inherited from Invoice Builder module
- Colors: Body (text, input border, input bg), Button (text, color), Background + "Use Brand Colors" checkbox
- Settings Panel: Payment Options (Credit Card/ACH), Frequency (One-Time; others TBD), Tax (Auto/Manual), Expiration (days/weeks/months from send date)
- Preview: Desktop/Mobile toggle
- Publish: Enabled only when all mandatory sections complete
- Update: Changes to published template don't affect existing project proposals
FRD #3: Proposal Usage in Project
- Only published templates assignable to projects (filtered by brand)
- One active proposal per project until signed
- Assignment creates snapshot copy (template edits don't affect assigned proposals)
- Share Modal: Multi-recipient chips, optional subject/message, rich text editor, template dropdown
- Generate Link: Unique tokenized URL per recipient (https://www.pixally.com/document/v2?token=[token])
- Email Preview before sending
- Sent Confirmation: Green checkmark modal (auto-dismiss ~3 seconds)
- Status Tracking: Badge display + client cards with completion status
- Last Viewed: Most recent view timestamp (overall, not per-recipient)
- Information Collected (3 tabs, post-completion):
- Selected Items: Packages, A La Carte, subtotals, tax, discount, payment schedule, total
- Personal Details: Name, email, phone, address, event dates
- Contract Details: Smart field values (venue, dates, etc.)
- File Activity Log: Chronological audit trail (Created, Sent, Viewed, Completed, Resent)
- Download PDF: Available only when Completed
- Revised Proposal: Only if previous is unsigned AND unpaid; auto-expires previous version
- After Signing: No further proposals allowed; use invoices for additional services
- Link Expiration: Matches proposal expiration setting
- All recipients get automatic client portal access
FRD #4: Client-Side Interaction
- 6-Step Flow: Choose Packages → Personal Details → Price Summary → Event Dates → Sign Contract → Initial Payment
- Welcome Screen: Brand header/logo, welcome message, step overview, "Open Proposal" button
- Navigation: Bottom bar (Previous/Step Indicators/Next); completed steps show checkmarks
- Step 1 - Choose Packages:
- One package per group (mandatory)
- Horizontal scroll with progress bar for multiple packages
- "Show Details" modal for full package info
- Line items display as "Item x[qty]" when quantity > 1
- A La Carte: Before selection = common items; After selection = all available items
- Quantity input when enabled (cannot be 0)
- Skip Page: Only for multi-group; must return before completion
- All groups must have selection before proceeding
- Step 2 - Personal Details:
- All fields required except Address Line 2
- Auto-fill from client profile; changes sync back to Client Management
- Address required for tax calculation
- Step 3 - Price Summary:
- Left: Selected packages with add-ons
- Right: Subtotals, tax, discount, payment schedule, total
- Discount applied BEFORE tax
- Step 4 - Event Dates:
- Event cards with date picker
- "No definite date yet" toggle (available for ALL events including primary)
- All events must have date OR toggle enabled
- Step 5 - Sign Contract:
- Full scrollable contract
- Dynamic Section 7 (Events table) + Section 8 (Payment Details)
- E-signature pad (script font display)
- Certification checkbox required before signing
- Post-signing: Cannot go back; must contact agency for modifications
- Step 6 - Initial Payment:
- Amount due (first payment milestone)
- View Invoice link
- Payment tabs: Credit Card / Bank Account (if ACH enabled)
- Card fields with brand icons; Luhn validation
- ACH: Shows "In Progress" status
- Pay button with dynamic amount
- Payment Success Screen: Green checkmark, receipt/invoice numbers, payment method, Download Invoice/Receipt buttons, Finish button
- Expiration: Shows message, cannot proceed; must contact agency
- Save & Resume: TBD
- $0 Payment scenario: TBD
FRD #5: Impact on Project
- Automatic Event Creation:
- Events from selected packages create/update project event tabs
- Matching: NOT case-sensitive; proposal data overrides existing
- A La Carte "Event" type items also create events
- Event Mismatch Warning:
- Triggers when project has events not in proposal
- Warning icon (⚠️) on event tab with tooltip
- Orange/red banner in Services section
- Actions: "Delete Event" (permanent) or "Keep Event Active" (dismiss warning)
- Service Population:
- Services created from package line items grouped by service type
- Service cards with Assign Contractors / Edit / Delete options
- Deliverable Creation:
- Line items with Deliverable toggle ON create post-production tasks
- Due date = Event Date + configured days (TBD if event has no date)
- Client Profile Sync:
- Personal details (name, email, phone, address) sync to Client Management
- Overwrites existing values
- Automatic Invoice Generation:
- Triggered on proposal completion
- Status: Unpaid
- Matches proposal total with payment schedule
- Appears in Finance → Billing and Project → Invoices
- Pipeline Automation:
- Trigger: Contract signed + first payment received
- Action: Event status updates to next pipeline stage
- All linked events update simultaneously
- Configurable per agency
- Signed Proposal Access:
- Agency: Project Details → Files/Documents
- Client: Client Portal → Project → Documents
- Email delivery with attachments
- Post-Signing Rules:
- Proposal locked and uneditable
- No new proposals for same project
- Additional services via invoices only
- Contract legally binding; audit trail maintained
- Failed Payment Notifications: Client + Agency Owner notified; other roles TBD
- Multi-party Signing: Planned for V2
TBD Items (Requiring Future Clarification)
- Frequency options beyond One-Time
- Character limits for text fields
- Duplicate naming convention
- Save & Resume client functionality
- $0 Payment step behavior
- Stripe minimum charge amount
- Edit process after signing
- Notification roles for failed payments
- Duplicate event handling (same name from multiple packages)
Total: 5 FRDs | 12 Sections Each | 289 Test Cases | 121 Acceptance Criteria
I need to update the proposal FRD with some changes.
- The first point is -
- Primary Event Changes- If the Primary Event is changed, only future/unpaid payment milestones will be changed based on the new Primary Event date. Already-paid milestones remain untouched.3. Fully Paid (Completed) Invoices- Once an invoice is fully paid, it will not be editable. Refunds (partial or full) will remain available.- Any additional charges after full payment will require a new invoice. (This matches Honeybook's behavior as well.)4. Partially Paid Invoices- Invoices with any pending balance can still be edited.- If a new deliverable/charge is added after the event date has passed, the user must create a new payment schedule for that amount with a future date — past dates will not be allowed.5. New Invoices After the Primary Event Has Passed- Auto-applied payment schedule presets will not be applied; the user must set up the schedule manually.- The "before/after Event date" option will be greyed out (with appropriate messaging), since the event has already been completed.- Schedules can be set relative to the invoice date (e.g., net-30) or on specific current/future dates, preserving flexibility for payment plans.
✅ 1. Proposal Listing
Functional Requirements Document
FRD #1: Proposal Listing
Document Version: 1.1
Created Date: December 16, 2025
Last Updated: April 17, 2026 | 11:30 AM IST
Module: Proposal Listing (Templates → Proposals)
Platform: Pixally CRM - Agency Portal
Status: Draft
Change Log
Version
Date
Time
Author
Changes
1.1
April 17, 2026
11:30 AM IST
Claude AI
(1) Updated empty state per Figma screenshots; (2) Added clarification that template statuses (Draft/Published) are separate from proposal instance statuses (Pending/In Progress/Completed/Expired in FRD #3); (3) Duplicate naming convention set to "Copy of [Proposal Name]"
1.0
December 16, 2025
-
Claude AI
Initial FRD creation
Table of Contents
- Module Overview
- User Roles & Permissions
- User Flow
- Functional Logic
- Field Details & Validations
- Success Message Handling
- Error Message Handling
- Edge Cases
- Acceptance Criteria
- Manual Test Cases
- Dependencies
- References
1. Module Overview
1.1 Purpose
The Proposal Listing module provides agency users with a centralized interface to view, manage, and organize all proposal templates created within the Pixally CRM system. This module serves as the entry point for proposal template management, enabling users to create new templates, search existing ones, and perform essential actions such as duplication and deletion.
1.2 Business Goals
The Proposal Listing module aims to achieve the following business objectives:
- Provide agencies with an organized, filterable view of all proposal templates categorized by brand.
- Enable quick access to template creation, duplication, and deletion workflows to improve operational efficiency.
- Support efficient template management through robust search, sorting, and pagination capabilities.
- Maintain clear visibility of template statuses (Draft vs. Published) to streamline workflow management and prevent accidental use of incomplete templates.
- Ensure only published templates are available for assignment to client projects.
1.3 Scope
This FRD covers the following functionality:
- Proposal template listing page with tabular display
- Create new proposal template modal
- Search, filter, and sort functionality
- Pagination controls
- Template actions (Edit, Duplicate, Delete)
- Status management (Draft/Published display only; status change occurs in Builder)
1.4 Out of Scope
The following items are not covered in this FRD:
- Proposal Builder functionality (covered in FRD #2)
- Proposal assignment to projects (covered in FRD #3)
- Client-side proposal interaction (covered in FRD #4)
- Project integration and automation (covered in FRD #5)
2. User Roles & Permissions
2.1 Role-Based Access Matrix
Permission
Agency Owner
Agency Admin
Project Manager
Client
Contractor
View Proposal Listing
✅
✅
✅
❌
❌
Create New Template
✅
✅
✅
❌
❌
Edit Template (via Builder)
✅
✅
✅ (own only)
❌
❌
Duplicate Template
✅
✅
✅ (own only)
❌
❌
Delete Template
✅
✅
❌
❌
❌
Publish Template
✅
✅
❌
❌
❌
Search & Filter
✅
✅
✅
❌
❌
Change Rows Per Page
✅
✅
✅
❌
❌
2.2 Permission Notes
- Team Members can only edit and duplicate templates they have created. They cannot edit or duplicate templates created by other users.
- Only Agency Owner and Agency Admin can delete templates or publish templates (change status from Draft to Published).
- Clients and Contractors have no access to the Proposal Listing module; this is an agency-only feature.
- Published templates cannot be reverted to Draft status. If changes are needed, the template can be edited and updated while remaining Published.
3. User Flow
3.1 Accessing Proposal Listing
- User logs into Pixally CRM Agency Portal using valid credentials.
- User views the left sidebar navigation menu.
- User clicks on "Templates" to expand the submenu.
- User clicks on "Proposals" submenu item.
- System displays the Proposal Listing page with all templates for the agency.
- If no templates exist, system displays empty state with prompt to create first template.
3.2 Creating a New Proposal Template
- User is on the Proposal Listing page.
- User clicks the "+ Create New" button located in the top-right corner of the page.
- System displays the "Create a proposal" modal overlay with dimmed background.
- User enters the Proposal Name in the text input field.
- User selects a Brand from the dropdown menu.
- If the agency has only one brand, it is auto-selected and displayed.
- If the agency has multiple brands, user must select from available options.
- User clicks the "Create Proposal" button.
- System validates that both fields are completed.
- System creates the template with Draft status.
- System redirects user to the Proposal Builder (FRD #2) to configure the template.
3.3 Searching for Templates
- User is on the Proposal Listing page.
- User clicks on the search input field.
- User types search keywords (template name or brand name).
- System filters the listing in real-time as user types.
- System displays matching templates.
- If no matches found, system displays "No proposals found matching your search criteria" message.
- User can clear search by clicking the X icon or deleting the search text.
- System restores full listing when search is cleared.
3.4 Filtering Templates
- User is on the Proposal Listing page.
- User clicks the filter icon (funnel) to open filter options.
- System displays filter panel with available filter options.
- User selects filter criteria (e.g., Brand, Status).
- System applies filters and updates the listing.
- Active filters display a badge count on the filter icon.
- User can clear filters to restore full listing.
3.5 Sorting Templates
- User is on the Proposal Listing page.
- User clicks on a sortable column header (Name, Status, Brand, or Created).
- System sorts the listing by the selected column in ascending order.
- User clicks the same column header again.
- System toggles to descending order.
- Sort indicator arrow shows current sort direction.
3.6 Editing a Template
- User locates the desired template in the listing.
- User clicks the "Edit Template" button in the Actions column.
- System navigates to the Proposal Builder (FRD #2) for that template.
- User makes changes in the Builder.
- User saves/publishes changes in the Builder.
- User can return to listing via back navigation.
3.7 Duplicating a Template
- User locates the desired template in the listing.
- User clicks the three-dot menu (⋮) in the Actions column.
- System displays dropdown menu with options.
- User clicks "Duplicate" option.
- System creates an exact copy of the template.
- Duplicated template is named per naming convention (TBD).
- Duplicated template is set to Draft status regardless of original status.
- System redirects user to the Proposal Builder for the duplicated template.
3.8 Deleting a Template
- User locates the desired template in the listing.
- User clicks the three-dot menu (⋮) in the Actions column.
- System displays dropdown menu with options.
- User clicks "Delete" option.
- System displays confirmation dialog warning that this action cannot be undone.
- User clicks "Delete" to confirm or "Cancel" to abort.
- If confirmed, system permanently removes the template from the listing.
- System displays success message confirming deletion.
- Listing refreshes to reflect the removal.
3.9 Changing Pagination
- User is on the Proposal Listing page.
- User views the pagination controls at the bottom of the listing.
- User clicks the "Rows per page" dropdown.
- User selects desired option (10, 25, 50, or 100).
- System updates the listing to show the selected number of rows.
- User can navigate between pages using Previous (<) and Next (>) buttons.
4. Functional Logic
4.1 Empty State Behavior
When an agency has no proposal templates created, the listing page displays an empty state view with the following elements:
Visual Layout:
- Proposal/document icon displayed centered above the text
- Title: "No Proposal found"
- Subtitle: "Create and share proposals with clients"
- "Create" button (yellow/primary color) centered below the subtitle
- The "+ Create New" button in the top-right header also remains visible and functional
Behavior:
- Both the centered "Create" button and the header "+ Create New" button trigger the same Create Proposal modal
- The empty state should clearly guide users on how to begin using the module
- No default templates are provided; users must create their first template from scratch
4.2 Listing Table Structure
The proposal listing displays templates in a tabular format with the following columns:
Name Column: Displays the proposal template name exactly as entered during creation. Long names are truncated with ellipsis (...) and full name displays on hover via tooltip.
Status Column: Displays the template status as a badge. Draft status appears as a yellow/amber badge indicating the template is not ready for use. Published status appears as a green badge indicating the template is available for assignment to projects. These are the only two statuses for proposal templates.
Brand Column: Displays the brand name associated with the template. The brand owner's avatar may appear alongside the name for visual identification.
Created Column: Displays the creation date in "MMM DD, YYYY" format (e.g., "Jan 24, 2025"). This represents the date the template was initially created, not the last modified date.
Actions Column: Contains the "Edit Template" button and a three-dot menu (⋮) that reveals additional options: Duplicate and Delete.
4.3 Sorting Functionality
All column headers with a down arrow indicator (↓) support sorting. Clicking a column header toggles between ascending and descending order. Only one column can be sorted at a time. Default sorting is by Created date in descending order (newest templates first). Name column sorts alphabetically (A-Z ascending, Z-A descending). Status column sorts with Draft before Published in ascending order. Brand column sorts alphabetically by brand name. Created column sorts chronologically.
4.4 Search Functionality
The search bar is positioned above the listing table. Search filters templates by matching against template Name and Brand name. Search is case-insensitive, meaning "Wedding" matches "wedding" and "WEDDING". Search performs partial matching, so "Wed" matches "Wedding Package". Search results update in real-time as the user types with a reasonable debounce delay (300-500ms recommended). Clearing the search field restores the complete, unfiltered listing. Search works in conjunction with any active filters.
4.5 Filter Functionality
The filter icon (funnel/filter) opens a filter panel or dropdown. Users can filter by Brand using a dropdown containing all agency brands. Users can filter by Status with options for Draft, Published, or All. Multiple filter criteria can be applied simultaneously. Active filters display a badge count on the filter icon indicating how many filters are active. Filters persist during the session until explicitly cleared. Filter results combine with search results (AND logic).
4.6 Pagination
The listing displays a configurable number of rows per page. The default is 10 rows per page. Available options are 10, 25, 50, and 100 rows per page. The "Rows per page" dropdown allows users to change this setting. Pagination controls display the current range and total count (e.g., "1-10 of 45"). Previous (<) button navigates to the prior page and is disabled on the first page. Next (>) button navigates to the next page and is disabled on the last page. Changing rows per page resets to page 1.
4.7 Create New Modal Logic
The "Create a proposal" modal appears centered on the screen with a semi-transparent background overlay that prevents interaction with the underlying page.
Modal Header: Displays "Create a proposal" title with an X button to close.
Proposal Name Field: Text input field with placeholder "Proposal Name". This field is required and must contain at least 1 character. Character limit follows existing module conventions (TBD).
Brand Field: Dropdown selector for choosing the brand. This field is required. If the agency has only one brand configured, that brand is auto-selected and the dropdown may be disabled or simply show the selected brand. If the agency has multiple brands, the dropdown displays all brands the current user has access to.
Cancel Button: Closes the modal without creating a template. No data is saved.
Create Proposal Button: Validates both fields are complete, creates the template in Draft status, and redirects to the Proposal Builder. This button remains disabled until both required fields are populated.
Clicking outside the modal or pressing Escape also closes the modal without saving.
4.8 Edit Template Action
Clicking "Edit Template" navigates the user to the Proposal Builder (FRD #2) for the selected template. Both Draft and Published templates can be edited. For Published templates, changes are saved and the template remains Published. There is no "unpublish" action; once Published, a template cannot revert to Draft. Editing a Published template that has been previously assigned to projects does not affect those project proposals because projects retain a snapshot copy of the template at the time of assignment.
4.9 Duplicate Action
Clicking "Duplicate" from the three-dot menu initiates the duplication process. The system creates an exact copy of the template including all content, settings, package selections, contract selection, payment terms, discount configuration, and color settings. The duplicated template receives a new name following the naming convention (TBD). The duplicated template is always set to Draft status, even if the original was Published. The user is redirected to the Proposal Builder for the duplicated template to review and modify as needed. All duplications are logged in the system for audit purposes.
4.10 Delete Action
Clicking "Delete" from the three-dot menu triggers a confirmation dialog. The confirmation message clearly warns that this action is permanent and cannot be undone (e.g., "Are you sure you want to delete this proposal template? This action cannot be undone."). Published templates can be deleted even if they have been previously assigned to projects because projects retain their own snapshot copy and are not affected. Upon confirmation, the template is permanently removed from the database. The listing refreshes to reflect the deletion. If the user cancels, the dialog closes and no action is taken.
4.11 Status Logic
IMPORTANT: Proposal template statuses (Draft/Published) are different from proposal instance statuses used in projects. This section covers template statuses only.
Context
Statuses
Description
Template (this FRD)
Draft, Published
Template readiness for use
Project Instance (FRD #3)
Pending, In Progress, Completed, Expired
Client completion progress
Proposal templates have exactly two statuses: Draft and Published.
Draft Status: Indicates the template is in progress and not ready for use. Draft templates cannot be assigned to projects. Draft templates can be edited freely in the Builder. Draft status is assigned automatically when a template is created or duplicated.
Published Status: Indicates the template is complete and available for use. Published templates appear when users select a proposal template for project assignment. Published templates can still be edited; changes are saved while maintaining Published status. Published status is set via the "Publish" action in the Proposal Builder (not in the listing). Once Published, a template cannot be reverted to Draft.
4.12 Template Availability for Projects
Only Published templates appear in the template selection interface when users are assigning proposals to projects. This ensures that incomplete or draft templates are not accidentally used with clients.
4.13 No Default Templates
The system does not provide any pre-built default proposal templates. All templates must be created by agency users from scratch. This ensures complete customization and brand consistency for each agency.
5. Field Details & Validations
5.1 Create Proposal Modal Fields
Field Name
Field Type
Required
Default Value
Validation Rules
Error Message
Proposal Name
Text Input
Yes
Empty
Min 1 character; Max character limit TBD; Cannot be only whitespace; Special characters allowed
"Proposal name is required"
Brand
Dropdown
Yes
Auto-select if single brand; Empty if multiple
Must select from available brands
"Please select a brand"
5.2 Listing Table Display Fields
Field Name
Data Type
Sortable
Format
Notes
Name
String
Yes
Plain text; Truncate with ellipsis if >50 chars
Full name on hover tooltip
Status
Enum
Yes
Badge (Draft=Yellow, Published=Green)
Only two values possible
Brand
String
Yes
Text with optional avatar
Shows brand name
Created
DateTime
Yes
"MMM DD, YYYY" (e.g., "Jan 24, 2025")
Creation date only
Actions
N/A
No
Button + Menu
Edit Template button; Three-dot menu
5.3 Search Field
Field Name
Field Type
Required
Validation Rules
Notes
Search
Text Input
No
No minimum; Performs matching on 1+ characters
Case-insensitive; Partial match
5.4 Pagination Controls
Control
Type
Options
Default
Notes
Rows Per Page
Dropdown
10, 25, 50, 100
10
Persists during session
Page Navigation
Buttons
Previous, Next
N/A
Disabled at boundaries
Page Indicator
Display
Text
N/A
Shows "X-Y of Z" format
6. Success Message Handling
Action
Success Message
Display Type
Duration
Post-Success Behavior
Create Proposal
None (silent redirect)
N/A
N/A
Redirect to Proposal Builder
Duplicate Proposal
"Proposal template duplicated successfully"
Toast notification
3 seconds
Redirect to Proposal Builder for copy
Delete Proposal
"Proposal template deleted successfully"
Toast notification
3 seconds
Listing refreshes; Template removed
Copy Link (if applicable)
"Link copied to clipboard"
Toast notification
2 seconds
None
7. Error Message Handling
Error Scenario
Error Message
Display Type
Trigger Condition
User Action Required
Empty Proposal Name
"Proposal name is required"
Inline field error
Submit with empty name
Enter a valid proposal name
Whitespace-only Name
"Proposal name is required"
Inline field error
Submit with only spaces
Enter a valid proposal name
Name Exceeds Limit
"Proposal name cannot exceed [X] characters"
Inline field error
Name too long (TBD)
Shorten the proposal name
No Brand Selected
"Please select a brand"
Inline field error
Submit without brand
Select a brand from dropdown
No Brands Available
"No brands available. Please create a brand first."
Inline message
Agency has no brands
Navigate to Brand settings
Delete Failed
"Unable to delete proposal. Please try again."
Toast notification
Server error
Retry the delete action
Duplicate Failed
"Unable to duplicate proposal. Please try again."
Toast notification
Server error
Retry the duplicate action
Load Failed
"Unable to load proposals. Please refresh the page."
Inline message
Server/network error
Refresh the page
Network Error
"Connection error. Please check your internet connection."
Toast notification
Network failure
Check connection and retry
Session Expired
"Your session has expired. Please log in again."
Modal
Auth token expired
Re-authenticate
Permission Denied
"You don't have permission to perform this action."
Toast notification
Insufficient permissions
Contact admin
8. Edge Cases
Edge Case
System Behavior
User has no brands configured
Brand dropdown shows empty state with message "No brands available. Please create a brand first." Create Proposal button remains disabled. User must navigate to Brand settings to create a brand first.
Search returns no results
Display message "No proposals found matching your search criteria" with option to clear search. The "+ Create New" button remains visible in the header. This message is different from the empty state ("No Proposal found") which only appears when zero templates exist in the system.
User tries to delete while another user is editing
Allow deletion to proceed. The editing user will receive an error message "Template no longer exists" when they attempt to save.
Very long proposal name entered
Accept the input but truncate display in listing with ellipsis (...). Full name displays on hover via tooltip. Maximum character limit enforced at input (TBD).
User refreshes page during creation modal
Modal closes without saving. No template is created. User must restart the creation flow.
Concurrent duplicate by multiple users
Each user receives their own independent copy with unique ID. No conflicts occur.
Filter applied with no matching results
Display message "No proposals match the selected filters" with option to clear filters.
User's access revoked while viewing listing
On next action (click, navigation), redirect to dashboard with message "You no longer have access to this module."
Extremely large number of templates (1000+)
Pagination handles display. Consider implementing virtual scrolling or server-side pagination for performance.
User creates template with same name as existing
Allow duplicate names; templates are identified by unique ID internally. Display both in listing.
Browser back button after successful creation
Should return to listing page, not reopen modal. Template creation is already complete.
User attempts to edit template created by another user (Team Member)
Display permission error. Edit button may be hidden or disabled for templates not owned by the Team Member.
Special characters in template name
Allow special characters including: ! @ # $ % & * ( ) - _ = + [ ] { } ; : ' " , . / ?
Empty listing with active filters
Show "No proposals match the selected filters" rather than the empty state message ("No Proposal found"). The empty state with "Create" button only appears when zero templates exist in the entire system, not when filters return no results.
Page number exceeds total pages
Redirect to last available page. For example, if on page 10 and templates are deleted leaving only 5 pages, redirect to page 5.
9. Acceptance Criteria
- AC-PL-001: Users with appropriate permissions can view a listing of all proposal templates displaying Name, Status, Brand, and Created columns.
- AC-PL-002: Users can create a new proposal template by clicking "+ Create New", providing a name, and selecting a brand.
- AC-PL-003: The system auto-selects the brand in the Create modal if the agency has only one brand configured.
- AC-PL-004: Users can search templates by name with real-time filtering that is case-insensitive and supports partial matching.
- AC-PL-005: Users can sort the listing by any sortable column (Name, Status, Brand, Created) in ascending or descending order.
- AC-PL-006: Users can filter the listing by Brand and/or Status, with active filters indicated by a badge count.
- AC-PL-007: Users can duplicate any template they have permission to access, creating a Draft copy.
- AC-PL-008: Users with delete permission can delete templates with a confirmation prompt.
- AC-PL-009: Deleting a Published template does not affect projects that have already used that template.
- AC-PL-010: Pagination displays correct row counts and allows navigation between pages.
- AC-PL-011: Users can change rows per page using the dropdown (10, 25, 50, 100 options).
- AC-PL-012: Only Published templates are selectable when assigning proposals to projects.
- AC-PL-013: Draft templates display with yellow badge; Published templates display with green badge.
- AC-PL-014: Published templates cannot be reverted to Draft status.
- AC-PL-015: The system does not provide default templates; all templates must be created by users.
- AC-PL-016: Team Members can only edit and duplicate templates they created.
- AC-PL-017: Empty state displays "No Proposal found" title, "Create and share proposals with clients" subtitle, proposal icon, and centered "Create" button when no templates exist. Both the centered "Create" button and the header "+ Create New" button remain functional.
- AC-PL-018: Search and filter can be combined and work together with AND logic.
10. Manual Test Cases
Manual test cases for this module are provided in a separate Excel file:
📎 File: FRD_01_Proposal_Listing_Test_Cases.xlsx
The test cases cover:
- Functional logic verification
- Acceptance criteria validation
- Edge case testing
- Permission-based access testing
- UI/UX validation
11. Dependencies
11.1 Internal Dependencies
Dependency
Module/Feature
Type
Impact if Unavailable
Brands Management
Brand creation and configuration
Required
Cannot create proposals without at least one brand. Create modal Brand dropdown will be empty.
Proposal Builder
Template editing interface (FRD #2)
Required
Cannot edit or configure template content. Edit Template and Create Proposal redirects will fail.
User Authentication
Login and session management
Required
Cannot access listing or verify permissions. Redirect to login.
User Permissions
Role-based access control
Required
Cannot determine what actions user can perform. Default to read-only or deny access.
Project Management
Template assignment
Downstream
Published templates are used when assigning to projects.
11.2 External Dependencies
Dependency
Service
Type
Impact if Unavailable
Database Service
Data persistence
Required
Listing cannot load. Display error state with retry option.
Search Service
Search indexing
Optional
Search functionality unavailable. Basic listing still works. Consider client-side search fallback.
CDN/Asset Service
Image/icon delivery
Optional
UI may display without icons/images. Functionality unaffected.
12. References
12.1 Figma Designs
Screen
File Name
Description
Listing Page
1-listing.png
Main proposal template listing view
Create Modal
2-createnew.png
Create a proposal modal dialog
12.2 Related FRDs
FRD
Module
Relationship
FRD #2
Proposal Builder
Edit Template action navigates to Builder
FRD #3
Proposal Usage in Project
Published templates used for project assignment
Invoice Module FRD
Invoice Templates
Similar listing pattern; Text Settings inherited
Packages Module FRD
Package Groups
Referenced in Builder for selection
Brands Management FRD
Brand Configuration
Brand dropdown populated from this module
12.3 Source Documents
Document
Reference
Module Logic Explanation
Proposal Module Dec 15 2025.pdf (00:35 - 02:24)
Historical Context
Proposal-Module-185d8b98-5a32.json
Document Revision History
Version
Date
Author
Changes
1.1
April 17, 2026
Claude AI
Empty state update, status clarification, duplicate naming
1.0
December 16, 2025
Claude AI
Initial FRD creation
End of FRD #1: Proposal Listing
✅ 2. Proposal Builder
Functional Requirements Document
FRD #2: Proposal Builder
Document Version: 1.1
Created Date: December 16, 2025
Last Updated: April 17, 2026 | 11:25 AM IST
Module: Proposal Builder (Templates → Proposals → Builder)
Platform: Pixally CRM - Agency Portal
Status: Draft
Change Log
Version
Date
Time
Author
Changes
1.1
April 17, 2026
11:25 AM IST
Claude AI
(1) Added dynamic discount message preview in Builder; (2) Added reference to Contract template for multi-party signing configuration; (3) Clarified discount message format variations
1.0
December 16, 2025
-
Claude AI
Initial FRD creation
Table of Contents
- Module Overview
- User Roles & Permissions
- User Flow
- Functional Logic
- Field Details & Validations
- Success Message Handling
- Error Message Handling
- Edge Cases
- Acceptance Criteria
- Manual Test Cases
- Dependencies
- References
1. Module Overview
1.1 Purpose
The Proposal Builder is a comprehensive template editor that allows agency users to design and configure proposal templates within the Pixally CRM system. It provides a visual interface for adding content blocks, configuring payment terms, setting discounts, customizing appearance, and managing proposal settings. The Builder ensures that proposals sent to clients are professional, complete, and aligned with the agency's brand.
1.2 Business Goals
The Proposal Builder module aims to achieve the following business objectives:
- Enable agencies to create professional, branded proposal templates without requiring technical or coding knowledge.
- Provide flexible configuration options for packages, contracts, payment terms, and discounts to accommodate various business models.
- Ensure consistency across proposals through reusable templates and standardized sections.
- Support both immediate payment collection and scheduled payment workflows to meet diverse client needs.
- Integrate seamlessly with existing modules (Packages, Contracts, Invoice) to leverage pre-configured content.
- Enforce mandatory sections (Packages, Contract, Payment Terms) to ensure complete proposals.
1.3 Scope
This FRD covers the following functionality:
- Builder interface layout with four sidebar navigation panels
- Header image upload and management
- Welcome Message section (optional)
- Package Groups section (mandatory)
- Contract section (mandatory)
- Payment Terms section (mandatory)
- Discount section (optional)
- Thank You Message section (optional)
- Text Settings panel (inherited from Invoice Builder)
- Colors panel for customization
- Settings panel (Payment Options, Tax, Expiration)
- Preview functionality
- Publish and Update workflows
1.4 Out of Scope
The following items are not covered in this FRD:
- Proposal Listing functionality (covered in FRD #1)
- Proposal assignment to projects (covered in FRD #3)
- Client-side proposal interaction (covered in FRD #4)
- Package creation and management (covered in Packages Module FRD)
- Contract template creation (covered in Contracts Module FRD)
2. User Roles & Permissions
2.1 Role-Based Access Matrix
Permission
Agency Owner
Agency Admin
Team Member
Client
Contractor
Access Builder
✅
✅
✅
❌
❌
Edit Content Sections
✅
✅
✅ (own templates)
❌
❌
Configure Settings
✅
✅
✅ (own templates)
❌
❌
Customize Colors
✅
✅
✅ (own templates)
❌
❌
Configure Text Settings
✅
✅
✅ (own templates)
❌
❌
Add Package Groups
✅
✅
✅ (own templates)
❌
❌
Add Contract
✅
✅
✅ (own templates)
❌
❌
Configure Payment Terms
✅
✅
✅ (own templates)
❌
❌
Configure Discounts
✅
✅
✅ (own templates)
❌
❌
Preview Proposal
✅
✅
✅
❌
❌
Save Template
✅
✅
✅ (own templates)
❌
❌
Publish Template
✅
✅
❌
❌
❌
Update Published Template
✅
✅
❌
❌
❌
2.2 Permission Notes
- Team Members can access and edit the Builder only for templates they have created.
- Only Agency Owner and Agency Admin can publish templates or update already-published templates.
- Team Members can save changes to their own Draft templates but cannot publish them.
- Clients and Contractors have no access to the Proposal Builder.
3. User Flow
3.1 Accessing the Proposal Builder
- User creates a new proposal from the listing (FRD #1) OR clicks "Edit Template" on an existing proposal.
- System loads the Proposal Builder interface.
- System displays the template content in the main area.
- System shows the left sidebar with four navigation icons.
- Builder icon (1st) is selected by default, showing the content editor.
3.2 Adding a Header Image
- User views the header image placeholder at the top of the content area.
- User clicks "Edit" button on the placeholder.
- System opens file upload dialog.
- User selects an image file (JPG, PNG, GIF, or WebP).
- System uploads and displays the image.
- User can click "X" to remove the header image if needed.
3.3 Adding a Welcome Message
- User locates the Welcome Message section in the Builder.
- User clicks "+ Add Custom Welcome Message" button.
- System displays the Welcome Message popup modal.
- User enters a Title in the text field.
- User enters Message Text in the rich text area.
- User clicks "Save Message" button.
- System closes the popup and displays the welcome message in the section.
- User can delete the message by clicking the trash icon.
3.4 Adding Package Groups
- User locates the Package Groups section (mandatory).
- User clicks "+ Add Package Group" button.
- System displays the "Add Package Group(s)" popup modal.
- System shows list of published package groups filtered by the proposal's brand.
- User selects one or more package groups using checkboxes.
- User clicks "Add to Proposal" button.
- System closes the popup and displays selected groups in the section.
- User can customize the Group Heading text for each group.
- User can expand groups to view packages and A La Carte items.
- User can delete groups by clicking the trash icon.
3.5 Adding a Contract
- User locates the Contract section (mandatory).
- User clicks "+ Add From Template" button.
- System displays popup with published contract templates for the brand.
- User selects exactly one contract template (single selection only).
- User clicks "Add to Proposal" or similar confirmation.
- System closes the popup and displays the selected contract.
- User can preview the contract or delete and select a different one.
3.6 Configuring Payment Terms
- User locates the Payment Terms section (mandatory).
- User sees the payment terms table with columns: Amount, Due Date, Payment Date, Payment ID, Status.
- User clicks "+ Add Payment" to add a payment milestone.
- System displays the "Set Payment Terms" popup.
- User selects Date Type (Smart Date or Fixed Date - inherited from Invoice module).
- For Smart Date, user configures: Number, Unit (Days/Weeks/Months), Timing (before/after project date).
- User selects Payment Type: Custom, Percentage, or Equal Payment.
- User enters the amount or percentage as required.
- User clicks "Save" to add the payment term.
- System adds the row to the payment terms table.
- User can add multiple payment terms.
- User can click "Save as Preset" to save the configuration for reuse.
- User can click "Apply Preset" to load a previously saved preset.
3.7 Enabling and Configuring Discounts
- User locates the Discount section (optional).
- User toggles the Discount switch to ON.
- System displays discount configuration options.
- User selects discount type: Bundle Discount or Regular Discount.
- For Bundle Discount (only available with 2+ package groups):
- User selects apply scope: "Packages only" OR "Packages and A La Carte items"
- User selects value type: Flat ($) or Percentage (%).
- User enters the discount value.
- System validates the discount does not exceed limits.
3.8 Adding a Thank You Message
- User locates the Thank You Message section (optional).
- User clicks to add a thank you message.
- System displays popup similar to Welcome Message.
- User enters Title and Message Text.
- User clicks "Save Message".
- System displays the thank you message in the section.
3.9 Configuring Settings (4th Sidebar Icon)
- User clicks the Settings icon (4th) in the left sidebar.
- System displays the Settings panel.
- User configures Payment Options by selecting Credit Card and/or ACH Payment.
- User configures Frequency (One-Time; other options TBD).
- User configures Tax Details:
- Selects "Auto-Calculate Sales Tax" (Stripe integration) OR
- Selects "Manual Sales Tax" and enters percentage amount.
- User configures Expiration Date:
- Toggles "Turn On File Expiration" to ON.
- Enters expiration duration number.
- Selects unit: Days, Weeks, or Months.
- User clicks "Save" to apply settings.
3.10 Customizing Colors (3rd Sidebar Icon)
- User clicks the Colors icon (3rd) in the left sidebar.
- System displays the Colors panel.
- User customizes Body colors: Text Color, Input Border, Input Background.
- User customizes Button colors: Button Text, Button Color.
- User customizes Background Color.
- Alternatively, user checks "Use Brand Colors" to apply brand color scheme.
- Changes are applied in real-time to the preview.
3.11 Configuring Text Settings (2nd Sidebar Icon)
- User clicks the Text Settings icon (2nd) in the left sidebar.
- System displays the Text Settings panel (same as Invoice Builder).
- User configures font family, sizes, and other typography options.
- Changes are applied to proposal text elements.
3.12 Previewing the Proposal
- User clicks "Preview" button in the header.
- System opens a preview modal or new tab.
- Preview displays the proposal exactly as clients will see it.
- User can toggle between desktop and mobile preview using device icons.
- User closes preview to return to editing.
3.13 Publishing a Template
- User completes all mandatory sections (Packages, Contract, Payment Terms).
- User clicks "Publish" button in the header.
- System validates all mandatory sections are complete.
- If validation passes, system changes status from Draft to Published.
- System displays success message.
- Template is now available for assignment to projects.
3.14 Updating a Published Template
- User opens a Published template in the Builder.
- User sees "Update" button instead of "Publish".
- User makes desired changes.
- User clicks "Update" button.
- System saves changes while maintaining Published status.
- Existing project proposals are not affected (they retain snapshots).
4. Functional Logic
4.1 Builder Interface Structure
4.1.1 Left Sidebar Navigation
The left sidebar contains four icon buttons arranged vertically for accessing different configuration panels:
Icon 1 - Builder (Default): Main proposal content editor. This panel displays all content sections where users add packages, contracts, messages, etc. This is the default view when entering the Builder.
Icon 2 - Text Settings: Typography configuration panel. This panel inherits its design and functionality from the Invoice Builder module. Users can configure font family, font sizes, and other text styling options.
Icon 3 - Colors: Color scheme customization panel. Users can customize colors for body text, inputs, buttons, and background. A "Use Brand Colors" option allows automatic application of brand colors.
Icon 4 - Settings: Proposal settings panel. Contains configuration for payment options, tax calculation, and expiration date settings.
4.1.2 Header Area
The header area displays the proposal template name with status badge (Draft shown as yellow badge, Published shown as green badge). A back arrow (←) returns to the Proposal Listing page. Device preview icons allow toggling between desktop and mobile preview modes. The "Preview" button opens a full preview of the proposal. The "Publish" button (yellow) publishes a Draft template. For already-published templates, "Update" button appears instead.
4.2 Content Sections
4.2.1 Section Order
Content sections display in a fixed order and cannot be reordered. The down-arrow icons between sections are visual separators only, not reordering controls. The fixed order is: Header Image → Proposal Title → Welcome Message → Package Groups → Contract → Payment Terms → Discount → Thank You Message.
4.2.2 Mandatory vs Optional Sections
Section
Required
Notes
Header Image
No
Optional branding element
Welcome Message
No
Optional introduction
Package Groups
Yes
At least one group required
Contract
Yes
Exactly one contract required
Payment Terms
Yes
At least one payment term required
Discount
No
Optional pricing adjustment
Thank You Message
No
Optional closing message
4.3 Header Image Section
The header image section displays at the top of the proposal content. A placeholder is shown when no image is uploaded. The "Edit" button opens a file upload dialog. Supported image formats are JPG, PNG, GIF, and WebP. Maximum file size is 5MB (or as configured). The "X" button removes the uploaded image and reverts to placeholder. Recommended dimensions should be displayed to guide users.
4.4 Welcome Message Section
This section displays instructional helper text: "Add a welcome message for your client on what to expect during the proposal process." Clicking "+ Add Custom Welcome Message" opens the Welcome Message popup.
Welcome Message Popup:
- Modal title: "Welcome Message"
- Title field: Text input with placeholder "Welcome Message"
- Message Text field: Rich text area for the message body
- Cancel button: Closes without saving
- Save Message button (yellow): Saves and closes
The section is optional, but if the user chooses to add it, both Title and Message Text fields become mandatory. Once saved, the welcome message displays in the section with a delete (trash) icon to remove it.
4.5 Package Groups Section
This section displays instructional helper text: "Specify which package(s) groups your client can choose from during the proposal." This is a mandatory section; at least one package group must be added before publishing.
Add Package Group(s) Popup:
- Modal title: "Add Package Group(s)"
- List of published package groups filtered by the proposal's brand
- Each row shows: Checkbox, Package group name, Package count (e.g., "3 packages")
- Multi-select is allowed; users can select multiple groups
- Cancel button: Closes without adding
- Add to Proposal button (yellow): Adds selected groups
Package Group Display in Builder:
- Each added group displays in a collapsible card
- Card shows: Group heading (editable text input), Package group name, Package count, Preview icon (eye), Delete icon (trash)
- Group heading defaults to a descriptive text like "Choose a Photo/Video Package" and can be customized
- Expanding the group reveals package cards displayed horizontally
- Each package card shows: Service type badges, Package name, Description, Event sections with line items, Price
- Below packages, A La Carte Items display as chips showing item names and prices
- Users cannot edit package content within the Builder; edits must be made in the Packages module
Package Selection Rules:
- Users can add multiple package groups from different groups
- Only published package groups appear in the selection
- Groups are sorted with newest created first
- Scrolling is enabled for long lists (not pagination)
4.6 Contract Section
This section displays instructional helper text: "Add a contract template for clients to review and sign." This is a mandatory section; exactly one contract must be selected.
Contract Selection Popup:
- Similar format to package group selection
- Lists published contract templates for the proposal's brand
- Single selection only (radio buttons or single-select behavior)
- Cancel and confirmation buttons
Contract Display in Builder:
- Selected contract displays with contract name
- Preview icon (eye) to view contract content
- Delete icon (trash) to remove and select a different contract
- Only one contract can be attached per proposal
Multi-Party Signing Note: Multi-party signing configuration (multiple signers, mandatory signatures) is managed in the Contract Template itself, not in the Proposal Builder. When a contract template with multi-party signing is selected:
- The proposal inherits the signing configuration from the contract
- All configured signers will be required to sign during client-side completion (FRD #4)
- Agency countersign configuration is also inherited from the contract template
- See Contract Module FRD for details on configuring multi-party signing
4.7 Payment Terms Section
This section displays instructional helper text: "Specify when and how you will be paid." This is a mandatory section; at least one payment term must be configured.
Payment Terms Table:
- Columns: Amount, Due Date, Payment Date, Payment ID, Status
- Initial state shows placeholder row with $0.00
- "+ Add Payment" button adds new payment milestones
- "Save as Preset" button saves current configuration as a reusable preset
- "Apply Preset" dropdown loads a previously saved preset
Set Payment Terms Popup:
Date Type Selection:
- Dropdown with options: Smart Date, Fixed Date (inherited from Invoice module)
Smart Date Configuration (when Smart Date selected):
- Number input field (e.g., "4")
- Unit dropdown: Days, Weeks, Months
- Timing dropdown: "before project date", "after project date", "after booking date"
Fixed Date Configuration (when Fixed Date selected):
- Date picker for selecting specific calendar date
Payment Type Selection (Tabs):
- Custom: User enters a fixed dollar amount. Info text: "Total custom payments can be up to $[total]"
- Percentage: User enters a percentage value. Info text: "The percentage amount takes proportional part of your full payment"
- Equal Payment: No amount field needed; system auto-divides remaining balance equally among Equal Payment terms
Buttons:
- Cancel: Closes without saving
- Save (yellow): Saves the payment term
Payment Terms Validation:
- Sum of all payment term amounts must equal the proposal total
- System validates and warns if amounts don't match
- Percentage values must be between 1-100
- Custom amounts cannot exceed remaining balance
4.8 Discount Section
This section is optional. A toggle switch enables/disables the discount. When disabled, the section is collapsed and inactive.
Discount Types:
Bundle Discount:
- Only available when 2+ package groups are added to the proposal
- If only one package group exists, Bundle Discount option is hidden or disabled with tooltip
- Apply scope options:
- "Packages only" - discount applies only to package prices
- "Packages and A La Carte items" - discount applies to packages plus add-ons
- Value type: Flat ($) or Percentage (%)
Regular Discount:
- Available regardless of package group count
- Applies to the entire invoice without conditions
- Value type: Flat ($) or Percentage (%)
Discount Validation:
- Percentage cannot exceed 100%
- Flat amount cannot exceed the subtotal (invoice cannot go negative)
- System displays error if discount exceeds limits
Calculation Order: The discount is applied before tax calculation: (Subtotal - Discount) + Tax = Total
Dynamic Discount Message Preview:
The Builder preview displays a yellow/cream info banner showing the discount configuration that clients will see:
Discount Type
Application Scope
Preview Message
Bundle
Percentage + Packages only
"10% Discount applied to packages only"
Bundle
Percentage + Both
"10% Discount applied to packages and a la carte"
Bundle
Flat + Packages only
"$50 Discount applied to packages only"
Bundle
Flat + Both
"$50 Discount applied to packages and a la carte"
Regular
Percentage + Packages only
"10% Discount applied to packages only"
Regular
Percentage + Both
"10% Discount applied to packages and a la carte"
Regular
Flat + Packages only
"$50 Discount applied to packages only"
Regular
Flat + Both
"$50 Discount applied to packages and a la carte"
This message appears in the Price Summary section of the preview and in the client-side view (FRD #4).
4.9 Thank You Message Section
This section displays instructional helper text: "Instructions for what's next after booking is complete." The section is optional. Clicking opens a popup identical to Welcome Message format with Title and Message Text fields. If added, both fields are mandatory. Once saved, displays with delete option.
4.10 Settings Panel (4th Sidebar Icon)
4.10.1 Payment Options Configuration
Set Payment Options Header
Payment Options dropdown/checkboxes:
- Credit Card (checkbox)
- ACH Payment (checkbox)
- At least one option must be selected
- Both can be selected to offer clients a choice
Frequency Setting:
- Dropdown with "One-Time" as the current option
- Other options: TBD (may include recurring payment options in future)
4.10.2 Tax Details Configuration
Add Tax Details Header
Radio button options:
- Auto-Calculate Sales Tax (Default): Uses Stripe's tax calculation integration based on client's location. Info tooltip: "Enable this to automatically calculate sales tax using Stripe's integration, based on the client's location. Pixally relies on Stripe for accuracy and is not liable for errors — consult your accountant if unsure."
- Manual Sales Tax: When selected, displays "Percentage Amount" input field for user to enter a fixed tax rate.
Tax is applied only to line items marked as "Taxable" in the package configuration. This respects the taxable settings from the Packages module.
4.10.3 Expiration Date Configuration
Set Expiration Date Header
"Turn On File Expiration" toggle switch:
- When OFF: No expiration; proposal remains valid indefinitely
- When ON: Displays expiration configuration fields
Expiration Configuration:
- "Expires in" label
- Number input field (e.g., "10")
- Unit dropdown: Days, Weeks, Months
- Calculated expiration date displays below (e.g., "Expiration date: June 30, 2025")
Important: The expiration date shown in the Builder is a placeholder. The actual expiration is calculated from the date the proposal is sent to each client, not from the template creation date.
4.10.4 Save Button
Yellow "Save" button at the bottom saves all settings configurations.
4.11 Colors Panel (3rd Sidebar Icon)
4.11.1 Body Colors Section
- Text Color: Color picker for main body text
- Input Border: Color picker for form input field borders
- Input Background: Color picker for form input field backgrounds
4.11.2 Button Colors Section
- Button Text: Color picker for button label text
- Button Color: Color picker for button background
4.11.3 Background Section
- Background Color: Color picker for overall proposal background
4.11.4 Brand Colors Option
- Use Brand Colors: Checkbox to apply the brand's predefined color scheme
- When checked, individual color pickers are disabled
- Brand colors from Brand Management module are applied automatically
4.12 Text Settings Panel (2nd Sidebar Icon)
The Text Settings panel inherits its structure and functionality from the Invoice Builder module. It provides typography configuration options including font family selection, font size settings for different text elements (headings, body, labels), and other text styling options. Refer to the Invoice Builder FRD for complete details on this panel.
4.13 Preview Functionality
Clicking the "Preview" button opens a preview of the proposal. The preview shows the proposal exactly as clients will see it, with all styling, colors, and content applied. Device toggle icons in the header allow switching between desktop and mobile preview modes. The preview reflects all current configurations including unsaved changes. Preview can be closed to return to editing.
4.14 Publish Logic
The "Publish" button is only enabled when all mandatory sections are complete:
- At least one Package Group is added
- One Contract template is selected
- At least one Payment Term is configured
Clicking "Publish" performs validation of all mandatory sections. If validation passes, the template status changes from Draft to Published. A success message confirms the publication. The template becomes available for selection when assigning proposals to projects. Published templates cannot be reverted to Draft status.
4.15 Update Logic
For templates that are already Published, the "Publish" button is replaced with "Update". Clicking "Update" saves all changes while maintaining the Published status. Existing project proposals that used this template are not affected; they retain their snapshot copy from the time of assignment. A success message confirms the update.
4.16 Auto-Save Behavior
Changes in the Builder are not automatically saved. Users must explicitly save or publish changes. If the user navigates away without saving, unsaved changes are lost. A confirmation prompt should warn users about unsaved changes before navigation. (Implementation detail: TBD)
5. Field Details & Validations
5.1 Welcome/Thank You Message Fields
Field Name
Field Type
Required
Validation Rules
Error Message
Title
Text Input
Yes (if section added)
Min 1 character; Max TBD (follow existing modules)
"Title is required"
Message Text
Rich Text Area
Yes (if section added)
Min 1 character; Max TBD
"Message text is required"
5.2 Package Group Configuration
Field Name
Field Type
Required
Validation Rules
Error Message
Package Group Selection
Multi-checkbox
Yes (at least one)
Must select at least one published group
"Please add at least one package group"
Group Heading
Text Input
No
Editable; defaults to descriptive text
N/A
5.3 Contract Selection
Field Name
Field Type
Required
Validation Rules
Error Message
Contract Template
Single-select
Yes
Must select exactly one published contract
"Please add a contract template"
5.4 Payment Terms Fields
Field Name
Field Type
Required
Validation Rules
Error Message
Date Type
Dropdown
Yes
Must select Smart Date or Fixed Date
"Please select a date type"
Duration Number
Number Input
Yes (Smart Date)
Positive integer, 1-365
"Please enter a valid number"
Duration Unit
Dropdown
Yes (Smart Date)
Days, Weeks, or Months
"Please select a unit"
Timing
Dropdown
Yes (Smart Date)
before/after project date, after booking date
"Please select timing"
Fixed Date
Date Picker
Yes (Fixed Date)
Must be valid date
"Please select a date"
Payment Type
Tab Selection
Yes
Custom, Percentage, or Equal Payment
N/A
Custom Amount
Currency Input
Yes (if Custom)
Positive number; ≤ remaining balance
"Amount exceeds remaining balance"
Percentage Amount
Number Input
Yes (if Percentage)
1-100
"Percentage must be between 1 and 100"
5.5 Discount Fields
Field Name
Field Type
Required
Validation Rules
Error Message
Discount Toggle
Toggle Switch
No
Enables/disables discount
N/A
Discount Type
Radio Buttons
Yes (if enabled)
Bundle Discount or Regular Discount
"Please select discount type"
Apply To
Radio Buttons
Yes (Bundle only)
Packages only OR Packages + A La Carte
"Please select application scope"
Value Type
Toggle
Yes (if enabled)
Flat ($) or Percentage (%)
N/A
Flat Amount
Currency Input
Yes (if Flat)
Positive; ≤ subtotal
"Discount cannot exceed subtotal"
Percentage Value
Number Input
Yes (if Percentage)
1-100
"Percentage cannot exceed 100%"
5.6 Settings Panel Fields
Field Name
Field Type
Required
Validation Rules
Error Message
Payment Options
Multi-checkbox
Yes
At least one selected
"Please select at least one payment option"
Frequency
Dropdown
Yes
Default: One-Time; Options TBD
N/A
Tax Calculation
Radio Buttons
Yes
Auto-Calculate or Manual
N/A
Manual Tax Rate
Number Input
Yes (if Manual)
0-100 percentage
"Tax rate must be between 0 and 100"
Expiration Toggle
Toggle Switch
No
Enables/disables expiration
N/A
Expiration Number
Number Input
Yes (if enabled)
Positive integer
"Please enter a valid number"
Expiration Unit
Dropdown
Yes (if enabled)
Days, Weeks, or Months
"Please select a unit"
5.7 Color Settings Fields
Field Name
Field Type
Required
Default Value
Text Color
Color Picker
No
#000000 (Black)
Input Border
Color Picker
No
#CCCCCC (Gray)
Input Background
Color Picker
No
#FFFFFF (White)
Button Text
Color Picker
No
#000000 (Black)
Button Color
Color Picker
No
#F5C518 (Yellow)
Background Color
Color Picker
No
#FFFFFF (White)
Use Brand Colors
Checkbox
No
Unchecked
5.8 Header Image
Field Name
Field Type
Required
Validation Rules
Error Message
Header Image
File Upload
No
Formats: JPG, PNG, GIF, WebP; Max size: 5MB
"Image must be JPG, PNG, GIF, or WebP" / "Image size must be under 5MB"
6. Success Message Handling
Action
Success Message
Display Type
Duration
Post-Success Behavior
Add Package Group(s)
None (UI updates immediately)
N/A
N/A
Popup closes; groups appear in section
Add Contract
None (UI updates immediately)
N/A
N/A
Popup closes; contract appears in section
Save Welcome Message
None (UI updates immediately)
N/A
N/A
Popup closes; message displays in section
Save Thank You Message
None (UI updates immediately)
N/A
N/A
Popup closes; message displays in section
Save Payment Term
None (UI updates immediately)
N/A
N/A
Popup closes; row added/updated in table
Delete Item (any section)
None (UI updates immediately)
N/A
N/A
Item removed from section
Save Settings
"Settings saved successfully"
Toast notification
3 seconds
Settings panel remains open
Save Colors
None (UI updates immediately)
N/A
N/A
Colors applied to preview
Save as Preset (Payment)
"Payment preset saved successfully"
Toast notification
3 seconds
Preset available in Apply Preset dropdown
Apply Preset
None (UI updates immediately)
N/A
N/A
Payment terms populated from preset
Upload Header Image
None (UI updates immediately)
N/A
N/A
Image displays in header area
Publish Template
"Proposal template published successfully"
Toast notification
3 seconds
Status badge changes to Published (green)
Update Template
"Proposal template updated successfully"
Toast notification
3 seconds
Changes saved; status remains Published
7. Error Message Handling
Error Scenario
Error Message
Display Type
Trigger Condition
User Action Required
Publish without Packages
"Please add at least one package group to publish this proposal."
Toast/Inline
Publish clicked with no packages
Add package group
Publish without Contract
"Please add a contract template to publish this proposal."
Toast/Inline
Publish clicked with no contract
Add contract template
Publish without Payment Terms
"Please configure at least one payment term to publish this proposal."
Toast/Inline
Publish clicked with no payments
Configure payment terms
Discount exceeds subtotal
"Discount amount cannot exceed the invoice subtotal."
Inline field error
Flat discount > subtotal
Reduce discount amount
Percentage over 100
"Percentage cannot exceed 100%."
Inline field error
Percentage > 100 entered
Enter valid percentage (1-100)
Payment terms mismatch
"Payment terms total must equal the invoice amount. Current total: $X, Required: $Y"
Toast notification
Sum of payments ≠ invoice total
Adjust payment amounts
No payment option selected
"Please select at least one payment option."
Inline error
All payment options unchecked
Select Credit Card or ACH
Invalid expiration number
"Please enter a valid expiration duration."
Inline field error
Non-numeric or negative value
Enter positive number
Header image too large
"Image file size must be under 5MB."
Toast notification
File > 5MB uploaded
Upload smaller image
Unsupported image format
"Please upload a JPG, PNG, GIF, or WebP image."
Toast notification
Unsupported format uploaded
Upload supported format
No published packages available
"No published package groups available for this brand. Please create and publish a package group first."
Inline in popup
No packages exist for brand
Create packages in Packages module
No published contracts available
"No published contract templates available for this brand. Please create and publish a contract template first."
Inline in popup
No contracts exist for brand
Create contract in Contracts module
Welcome/Thank You Title empty
"Title is required"
Inline field error
Save clicked with empty title
Enter a title
Welcome/Thank You Message empty
"Message text is required"
Inline field error
Save clicked with empty message
Enter message text
Network/Save error
"Unable to save changes. Please try again."
Toast notification
Server error during save
Retry save action
Session expired
"Your session has expired. Please log in again."
Modal
Auth token expired
Re-authenticate
8. Edge Cases
Edge Case
System Behavior
No published package groups exist for brand
Package selection popup shows message "No published package groups available. Please create and publish a package group first." User cannot add packages until groups exist in Packages module.
No published contract templates exist for brand
Contract selection popup shows message "No published contract templates available. Please create and publish a contract template first." User cannot add contract until templates exist.
User removes all package groups after adding
Publish/Update button becomes disabled. Validation error shown if user attempts to publish.
Bundle Discount selected with only one package group
System hides Bundle Discount option OR shows tooltip "Bundle discount requires selecting packages from 2+ package groups." User must add more groups or select Regular Discount.
User enables discount then disables it
Discount values are cleared. Section collapses. No discount applied to calculations.
Equal Payment selected with $0 invoice total
System prevents saving with message "Cannot configure equal payments with $0 total." User must add priced packages first.
Browser closes during editing
Unsaved changes are lost. Template retains last explicitly saved state.
Two users edit same template simultaneously
Last save wins. No merge or conflict resolution. Second user's save overwrites first user's changes.
Very large number of package groups (50+)
Scrolling enabled in selection popup. Performance may degrade; consider lazy loading.
Payment preset applied then manually edited
Preset is "unapplied"; configuration treated as custom. Preset dropdown resets to none.
User tries to add same package group twice
System prevents duplicate selection. Already-added groups shown as disabled or selected in popup.
Discount makes payment terms invalid
If discount is increased after payment terms are set, validation error appears indicating mismatch. User must adjust payments or discount.
Expiration set to 0
Validation error: "Expiration must be at least 1 [unit]."
Very long group heading entered
Text truncates in display with ellipsis. Full text visible on edit.
All payment terms deleted
Publish button disabled. Validation requires at least one payment term.
User unchecks all package groups in popup
"Add to Proposal" button disabled. At least one must be selected.
Color picker value invalid
System rejects invalid hex codes. Reverts to previous valid color.
Manual tax rate entered as negative
Validation error: "Tax rate must be between 0 and 100."
User navigates away with unsaved changes
Confirmation prompt: "You have unsaved changes. Are you sure you want to leave?" (TBD implementation)
9. Acceptance Criteria
- AC-PB-001: Users can access the Proposal Builder with four sidebar navigation options (Builder, Text Settings, Colors, Settings).
- AC-PB-002: Users can upload a custom header image in JPG, PNG, GIF, or WebP format up to 5MB.
- AC-PB-003: Users can remove an uploaded header image and revert to placeholder.
- AC-PB-004: Users can add an optional Welcome Message with Title and Message Text fields; both are mandatory if section is added.
- AC-PB-005: Users can add multiple Package Groups from published groups filtered by the proposal's brand.
- AC-PB-006: Users can customize the Group Heading text for each package group.
- AC-PB-007: Users can add exactly one Contract template from published contracts for the brand.
- AC-PB-008: Users can configure Payment Terms with Smart Date or Fixed Date options (inherited from Invoice module).
- AC-PB-009: Payment Terms support Custom (fixed amount), Percentage, and Equal Payment types.
- AC-PB-010: Users can save Payment Term configurations as presets and apply saved presets.
- AC-PB-011: Users can enable Discount section with Bundle Discount or Regular Discount types.
- AC-PB-012: Bundle Discount option is only available when 2+ package groups are added.
- AC-PB-013: Discount validation prevents percentage >100% and amounts exceeding subtotal.
- AC-PB-014: Users can add an optional Thank You Message with Title and Message Text fields.
- AC-PB-015: Users can configure Payment Options (Credit Card, ACH, or both) in Settings.
- AC-PB-016: Users can set Tax calculation method (Auto via Stripe or Manual percentage).
- AC-PB-017: Auto tax calculation applies only to line items marked as Taxable in packages.
- AC-PB-018: Users can enable and configure Proposal Expiration (number + days/weeks/months).
- AC-PB-019: Expiration is calculated from proposal send date, not template creation date.
- AC-PB-020: Users can customize colors for body, buttons, and background in Colors panel.
- AC-PB-021: "Use Brand Colors" checkbox applies brand color scheme and disables individual pickers.
- AC-PB-022: Text Settings panel matches Invoice Builder functionality.
- AC-PB-023: Preview function shows proposal exactly as clients will see it.
- AC-PB-024: Preview supports desktop and mobile view modes.
- AC-PB-025: Publish button is only enabled when all mandatory sections are complete.
- AC-PB-026: Publishing changes template status from Draft to Published.
- AC-PB-027: Published templates cannot be reverted to Draft status.
- AC-PB-028: Updating a Published template saves changes without affecting existing project proposals.
- AC-PB-029: Section order is fixed and cannot be reordered (visual separators only).
- AC-PB-030: Package content cannot be edited within Builder; must use Packages module.
10. Manual Test Cases
Manual test cases for this module are provided in a separate Excel file:
📎 File: FRD_02_Proposal_Builder_Test_Cases.xlsx
The test cases cover:
- Builder interface and navigation
- All content section functionality
- Settings panel configuration
- Colors panel customization
- Payment terms configuration
- Discount logic and validation
- Publish and Update workflows
- All acceptance criteria validation
- Edge case testing
- Permission-based scenarios
11. Dependencies
11.1 Internal Dependencies
Dependency
Module/Feature
Type
Impact if Unavailable
Proposal Listing
Template list and creation
Required
Cannot access Builder without creating/selecting template
Packages Module
Package groups and items
Required
Cannot add packages; mandatory section incomplete
Contracts Module
Contract templates
Required
Cannot add contract; mandatory section incomplete
Invoice Module
Payment terms logic, presets, text settings
Required
Payment terms and text settings unavailable
Brands Management
Brand configuration and colors
Required
Cannot filter by brand; brand colors unavailable
User Authentication
Session management
Required
Cannot save changes or verify permissions
11.2 External Dependencies
Dependency
Service
Type
Impact if Unavailable
Stripe API
Tax calculation
Optional
Auto tax calculation fails; must use manual rate
Image Upload Service
CDN/Storage
Required
Cannot upload header images
Database Service
Data persistence
Required
Cannot save template configurations
File Storage
Preset storage
Required
Cannot save or load payment presets
12. References
12.1 Figma Designs
Screen
File Name
Description
Builder Main View
3-builderstep1.png
Main builder interface with sidebar
Package Groups
3-builderstep2.png, 3-builderstep2-1.png
Package section display
All Sections
3-builderstep3.png - 3-builderstep3-3.png
Complete builder with all sections
Settings Panel
4-builderstngstep1.png series
Settings configuration
Colors Panel
4-builderstngstep2.png
Color customization
Edit Mode Header
4-builderstngstep2-1.png
Update button for published templates
Welcome Message Popup
5-builderpopup.png
Message entry modal
Package Selection Popup
5-builderpopup1.png
Package group selection
Payment Terms Popups
5-builderpopup2.png - 5-builderpopup4.png
Payment configuration modals
12.2 Related FRDs
FRD
Module
Relationship
FRD #1
Proposal Listing
Entry point to Builder
FRD #3
Proposal Usage in Project
Published templates used here
FRD #4
Client-Side Interaction
What clients see from Builder configuration
Invoice Module FRD
Invoice Templates
Payment terms, text settings inherited
Packages Module FRD
Package Groups
Package content source
Contracts Module FRD
Contract Templates
Contract content source
12.3 Source Documents
Document
Reference
Module Logic Explanation
Proposal Module Dec 15 2025.pdf (02:24 - 19:20)
Historical Context
Proposal-Module-185d8b98-5a32.json
Document Revision History
Version
Date
Author
Changes
1.1
April 17, 2026
Claude AI
Discount message preview, multi-party signing reference
1.0
December 16, 2025
Claude AI
Initial FRD creation
End of FRD #2: Proposal Builder
✅ 3. Proposal Usage in Project
Functional Requirements Document
FRD #3: Proposal Usage in Project
Document Version: 1.6
Created Date: December 16, 2025
Last Updated: April 17, 2026 | 04:45 PM IST
Module: Proposal Usage in Project (Projects → Project Details → Proposal)
Platform: Pixally CRM - Agency Portal
Status: Draft
Change Log
Version
Date
Time
Author
Changes
1.2
April 17, 2026
12:30 PM IST
Claude AI
(1) Invoice generated after signatures, BEFORE payment; (2) Invoice appears in Files and Finance → Billing; (3) TBD format: "TBD - 3 days before event"; (4) Countersign available after signatures (before payment); (5) Payment not mandatory - agency can mark paid manually; (6) Invoice naming: [BRAND_INITIALS]-INV-[UNIX_TIMESTAMP]; (7) Receipt via email only, not in Files
1.1
April 17, 2026
11:15 AM IST
Claude AI
Updated statuses, multi-party signing, countersign flow, discount message, Payment Schedule TBD
1.0
December 16, 2025
-
Claude AI
Initial FRD creation
Table of Contents
- Module Overview
- User Roles & Permissions
- User Flow
- Functional Logic
- Field Details & Validations
- Success Message Handling
- Error Message Handling
- Edge Cases
- Acceptance Criteria
- Manual Test Cases
- Dependencies
- References
1. Module Overview
1.1 Purpose
The Proposal Usage in Project module defines how proposal templates are assigned to client projects, how proposals are shared with clients, and how agency users track proposal status and view collected information after client completion. This module serves as the bridge between proposal templates created in the Builder and actual client interactions.
1.2 Business Goals
The Proposal Usage in Project module aims to achieve the following business objectives:
- Enable seamless assignment of published proposal templates to client projects.
- Provide agencies with visibility into proposal status and client engagement through comprehensive tracking.
- Support multiple sharing methods (email, direct link) to accommodate different client preferences.
- Capture and display all client responses for agency review and project setup.
- Maintain a complete audit trail of all proposal-related activities.
- Enforce business rules around proposal revisions and signing to maintain contract integrity.
1.3 Scope
This FRD covers the following functionality:
- Proposal template assignment to projects
- Share Proposal modal and email functionality
- Generate Link and unique recipient links
- Proposal status tracking and display
- Information Collected section with three tabs
- File Activity log
- Download PDF functionality
- Revised proposal logic and restrictions
1.4 Out of Scope
The following items are not covered in this FRD:
- Proposal template creation (covered in FRD #1 and #2)
- Client-side proposal completion flow (covered in FRD #4)
- Project creation and automatic updates (covered in FRD #5)
- Invoice generation details (covered in Invoice Module FRD)
2. User Roles & Permissions
2.1 Role-Based Access Matrix
Permission
Agency Owner
Agency Admin
Team Member
Client
Contractor
View Project Proposal Section
✅
✅
✅ (assigned projects)
❌
❌
Assign Proposal Template
✅
✅
✅ (assigned projects)
❌
❌
Share Proposal (Email)
✅
✅
✅ (assigned projects)
❌
❌
Generate Share Link
✅
✅
✅ (assigned projects)
❌
❌
View Proposal Status
✅
✅
✅ (assigned projects)
❌
❌
View Information Collected
✅
✅
✅ (assigned projects)
❌
❌
View File Activity
✅
✅
✅ (assigned projects)
❌
❌
Download PDF
✅
✅
✅ (assigned projects)
❌
❌
Send Revised Proposal
✅
✅
❌
❌
❌
Resend Proposal
✅
✅
✅ (assigned projects)
❌
❌
2.2 Permission Notes
- Team Members can only access proposals for projects they are assigned to.
- Only Agency Owner and Agency Admin can send revised proposals (which voids previous versions).
- Clients access proposals through the Client Portal (covered in FRD #4), not the agency interface.
- Contractors have no access to proposal management.
- Proposal status in Project Details is handled separately (TBD per project detail dependency).
3. User Flow
3.1 Assigning Proposal to Project
- User navigates to Projects in the left sidebar.
- User selects a project to open Project Details.
- User locates the Proposal section within the project.
- User clicks to select/assign a proposal template.
- System displays list of Published proposal templates filtered by project's brand.
- User selects a template.
- System creates a proposal instance linked to the project (snapshot copy of template).
- Proposal status is set to Draft (not yet shared).
3.2 Sharing Proposal via Email
- User locates the assigned proposal in Project Details.
- User clicks "Share" or similar action button.
- System displays the "Share Proposal" modal.
- System auto-populates recipient(s) from project's client list.
- User can add additional recipients using the + button.
- User can modify the subject line (optional).
- User can customize the message body using the rich text editor.
- User can select an email template from the Template dropdown.
- User clicks "Preview" to review the email before sending.
- User clicks "Send" to deliver the email.
- System sends email with proposal link to all recipients.
- Proposal status updates to "Sent".
- System logs the activity in File Activity.
3.3 Sharing Proposal via Link
- User is in the Share Proposal modal.
- User clicks "Copy Link" or "Generate Link" button.
- System displays confirmation: "Your file will then become accessible to all members who are actively involved in the project."
- User clicks "Generate Link" to confirm.
- System generates unique tokenized URLs for each recipient.
- System displays "Share Link" modal with individual links.
- User can copy each link using the "Copy Link" button.
- User clicks "Done" to close the modal.
- Links can be shared manually via any channel.
3.4 Previewing Email Before Sending
- User is in the Share Proposal modal with content entered.
- User clicks "Preview" button.
- System displays email preview showing: To (recipients), Subject, Message body, "Get Started" CTA button.
- User reviews the email content.
- User closes preview to make edits OR proceeds to send.
3.5 Tracking Proposal Status
- User navigates to the project's Proposal section.
- System displays the proposal header with current status badge.
- User views the client card showing client name, completion status, and last viewed time.
- User scrolls to view the Information Collected section (empty until client completes).
- User views the File Activity log showing all proposal events.
3.6 Viewing Collected Information (After Completion)
- Client completes all 6 steps of the proposal (FRD #4).
- Proposal status changes to "Completed".
- User opens the project's Proposal section.
- User sees "Information Collected" section with three tabs.
- User clicks "Selected Items" tab to view packages and pricing.
- User clicks "Personal Details" tab to view client information.
- User clicks "Contract Details" tab to view contract-specific data.
- User can click "Download PDF" to export the completed proposal.
3.7 Resending Proposal
- User has previously sent a proposal that client hasn't completed.
- User opens Share Proposal modal.
- User makes any desired changes to recipients/message.
- User clicks "Send" to resend.
- System sends new email with the same proposal link.
- Activity is logged in File Activity.
3.8 Sending Revised Proposal (Admin/Owner Only)
- Previous proposal is unsigned and unpaid.
- Agency Owner/Admin opens Share Proposal modal.
- User modifies proposal details or selects new template.
- User sends the revised proposal.
- System automatically expires/voids the previous proposal version.
- New proposal becomes the active version.
- Client can only complete the latest version.
4. Functional Logic
4.1 Proposal Assignment Rules
Only published proposal templates can be assigned to projects. Templates are filtered by the project's brand, so only templates matching the brand appear in selection. Only one active proposal can exist per project phase until signed or paid. When a proposal is assigned, the system creates a snapshot copy of the template, meaning subsequent template edits do not affect assigned proposals. The assigned proposal inherits all configurations from the template including packages, contract, payment terms, discounts, colors, and settings.
4.2 Proposal Status Lifecycle
Proposal status in Project Details follows a defined lifecycle:
Status
Description
Visual
Trigger
Pending
Shared but not opened
Gray/neutral badge
Email sent or link generated, client has not accessed
In Progress
Client has started
Yellow/amber badge
Client opened and completed at least one step (partial completion)
Completed
All steps finished
Green badge
Payment successful OR agency manually marks complete
Expired
Past expiration date
Red/gray badge
System date check shows expiration passed
Status Transitions:
- Pending → In Progress: Client opens the proposal and completes at least one step
- In Progress → Completed: Client completes payment OR agency manually marks complete (for cash payments or separate invoices)
- Any Status → Expired: System automatically updates when expiration date passes
- Note: "Sent" and "Viewed" statuses have been replaced with "Pending" and "In Progress" for clarity
4.3 One Proposal Per Project Rule
Only one active proposal can exist per project until the proposal is signed and payment is received. This prevents conflicting agreements and ensures clarity for both agency and client. Agencies can update/revise the proposal for negotiation purposes before the client signs. Once signed, no further proposals can be sent for that project phase. Additional services after signing should be added via invoices, not new proposals.
4.4 Share Proposal Modal
4.4.1 Modal Structure
The Share Proposal modal provides a comprehensive interface for sending proposals to clients:
Header: "Share Proposal" title with X close button.
Email To Field:
- Displays selected recipient(s) as removable chips
- Each chip shows recipient name with X to remove
- Plus (+) button opens dropdown to add recipients
- Dropdown lists project clients and contacts
- Users can search/filter the dropdown
- Multiple recipients supported
- All invites include client portal access automatically
Subject Field:
- Text input with placeholder "Enter the subject"
- Optional customization; may have default value
- Maximum length TBD (follow existing patterns)
Message Body:
- Rich text area with placeholder "Type your message"
- "Get Started" button preview embedded in composer
- Supports basic formatting (bold, italic, links)
Formatting Toolbar:
- Template dropdown: Select pre-defined email templates
- Text formatting icon (A): Font styling options
- Link icon: Insert hyperlinks
- Person/mention icon: Insert recipient names dynamically
- Additional formatting options
Action Buttons:
- "Copy Link" / "Generate Link": Creates shareable URLs
- "Preview": Opens email preview before sending
- "Send": Sends email to recipients (may have dropdown for additional options)
4.4.2 Generate Link Flow
When user clicks "Generate Link":
- **Confirmation Dialog:
**- Message: "Your file will then become accessible to all members who are actively involved in the project."
- Cancel button: Closes without generating
- Generate Link button: Proceeds with generation
- **Share Link Modal:
**- Title: "Share Link"
- Security notice: "Links are unique for each recipient. Make sure that the intended recipients/signers are the only ones accessing the document through their link."
- Individual Links section listing each recipient
- Each row shows: Avatar, Name, Email, Unique URL field, "Copy Link" button
- URL format: https://www.pixally.com/document/v2?token=\[unique\_token\]
- Done button: Closes the modal
4.4.3 Email Preview
The Preview modal shows exactly what recipients will receive:
- To: List of recipient names (comma-separated)
- Subject: The subject line entered
- Body: Message content with formatting
- CTA: "Get Started" button that will link to proposal
User can close preview and make edits before sending.
4.5 Sent Confirmation
After successful send:
- Success modal displays with green checkmark icon
- Message: "Proposal Sent"
- Modal auto-closes after short delay or user dismisses
- Proposal status updates to "Sent"
- Activity logged in File Activity
4.6 Proposal Tracking Display
4.6.1 Header Section
- Proposal title with project name
- Status badge showing current state
- "Download PDF" button (visible only when status is Completed)
4.6.2 Client Card
- Client avatar image
- Client name
- Completion status with timestamp (e.g., "Completed (17 Dec 2024 at 1:31 PM)")
- Not viewed / Viewed indicator
- Last viewed date and time (if viewed)
4.6.3 View Tracking
View tracking is recorded per mandatory signatory. Each mandatory signatory has their own "Last viewed" timestamp that updates when that specific signatory opens the proposal (e.g., Aaron Ramsdale — 17 Dec 2024 at 1:31 PM; Jadon Sanches — 18 Dec 2024 at 2:10 PM). Only mandatory signatories are tracked in this listing; see §4.8 for the full Activity Listing rules.
4.7 Information Collected Section
4.7.1 Before Completion (Empty State)
When proposal is not yet completed:
- Section displays empty state message
- Message: "No information collected yet. Wait until your client complete proposal."
- Tabs are not shown or are disabled
4.7.2 After Completion (Three Tabs)
Tab 1: Selected Items
Displays all packages and add-ons selected by the client:
Package Cards:
- Package name and description
- Service type badges
- Event sections with line items
- "Show Details" button for expanded view
- Individual package price
A La Carte Items Section:
- List of selected add-on items
- Each shows: Item name, Event association, Price
- Subtotal for A La Carte items
Total Summary Card:
- Packages Subtotal
- A La Carte Items Subtotal
- Discount (percentage badge and amount shown in green/teal)
- Dynamic Discount Message (yellow info banner, e.g., "10% Discount applied to packages only")
- Taxes (calculated amount)
- Net Total
- Payment Schedule (list of dates/conditions and amounts)
- Total (final amount, same as Net Total)
Payment Schedule Display:
- If event date was set: Shows actual calculated dates (e.g., "June 18, 2025")
- If event date was TBD: Shows "TBD - [X] [unit] before event" (e.g., "TBD - 3 days before event")
- If custom/fixed date: Shows exact date defined by agency (no TBD prefix)
Invoice File:
- Appears in Project → Files and Documents listing after all signatures complete
- Also visible in Finance → Billing → Invoices
- Same file linked from "View Invoice" in client payment step
Tab 2: Personal Details
Displays client contact information and event dates entered during proposal completion:
IMPORTANT: This data is specific to this proposal only. Changes made by the client during proposal completion do NOT sync to their Client Management profile.
Contact Information:
- First Name
- Last Name
- Email address
- Contact Number (with country code)
- Address (full formatted address)
Event Dates:
- Each event from selected packages listed
- Event name (with "Primary Event" label if applicable)
- Date entered by client OR "There is no definite date yet"
Tab 3: Contract Details
Displays smart field values from the contract template:
Common Fields (may vary by contract):
- Venue name
- Venue Address
- Contact Number
- Event Date
- Other custom smart fields defined in contract
These are dynamic fields that were filled by the client during the contract signing step.
4.8 File Activity Log
The File Activity section maintains a chronological audit trail of all proposal events:
Activity Entry Format:
- Icon indicating activity type
- Description text with actor name highlighted
- Timestamp (date and time)
Activity Types:
Activity
Description Format
Created
"Proposal has been successfully created by [User Name] (You)"
Sent
"Proposal has been successfully sent by [User Name] (You)"
Viewed
"Proposal has been viewed by [Client Name]"
Signed
"Contract has been signed by [Client Name]"
Countersigned
"Contract has been countersigned by [Agency User Name]"
Completed
"Proposal has been completed by [Client Name]"
Resent
"Proposal has been resent by [User Name]"
Expired
"Proposal has expired"
Activity Listing (Mandatory Signatories Only):
The Activity Listing displays ONLY recipients who are marked as mandatory signatories — not all recipients, and not all who were added for signature.
Element
Format
Mandatory signatory who signed
"[Client Name] - Signed ([Date] at [Time])"
Mandatory signatory pending
"[Client Name] - In progress"
Last viewed (per signatory)
"Last viewed: [Date] at [Time]"
Agency countersign
"[Agency User] (You) - In progress" with "Countersign" button
Who Appears / Who Doesn't:
Recipient Type
In Activity Listing?
Marked as mandatory signatory
✅ Yes
Added for signature but NOT marked mandatory
❌ No (unless they make a payment)
Non-signatory (view-only)
❌ No (unless they make a payment)
Example: If 5 clients are added and only 2 are marked as mandatory signatories, only those 2 appear in the Activity Listing. The remaining 3 do NOT appear — and neither does their activity — unless they make a payment.
Per-Signatory Tracking: Each mandatory signatory has their OWN "Last viewed" timestamp (e.g., Aaron Ramsdale — 17 Dec 2024 at 1:31 PM; Jadon Sanches — 18 Dec 2024 at 2:10 PM).
File Activity Log (All Actions):
The File Activity section tracks actions from ALL recipients regardless of signatory status:
Activity
Who Appears
Created
Agency user
Sent
Agency user
Viewed
Mandatory signatories only
Signed
Mandatory signatories only
Edited selections
Any recipient (including non-mandatory and non-signatories)
Payment made
Any recipient (including non-mandatory and non-signatories)
Countersigned
Agency user
Note: Non-mandatory recipients (whether added for signature or view-only) appear in File Activity ONLY if they make edits or payment.
Activities are displayed newest first (reverse chronological order).
4.8.1 Agency Countersign
After all client signatures are complete (payment NOT required):
- Invoice is automatically generated with status "Unpaid"
- Invoice appears in Project → Files and Documents AND Finance → Billing
- Agency user sees all signer statuses in the activity section
- "Countersign" button (yellow) appears next to the agency user's entry
- Agency user clicks to countersign the contract
- Activity logs the countersign event
- Client can then proceed to payment (Step 6) OR agency can mark as paid manually (for cash payments)
Countersign Requirements:
- All mandatory client signatures must be complete
- Payment is NOT required before countersign
- Only available for proposals with multi-party signing configured in Contract template
Invoice Generation:
- Triggered when all mandatory signatures complete
- Invoice naming convention: [BRAND_INITIALS]-INV-[UNIX_TIMESTAMP] (e.g., ZEN-INV-1769593092)
- Initial status: Unpaid
- Single invoice with all payment milestones
- Payment terms show "TBD - [X] days before event" when event date not set
- Invoice auto-updates with actual dates once agency sets event date in Project
4.9 Revised Proposal Logic
Agencies can send revised proposals under specific conditions:
Conditions for Revised Proposal:
- Previous proposal must be unsigned AND unpaid
- Agency Owner or Agency Admin permission required
- Project must be in pre-contract phase
When Revised Proposal is Sent:
- Previous proposal version is automatically expired/voided
- Client can no longer access or complete old version
- New proposal becomes the active version
- Activity is logged for both expiration and new send
Restrictions After Signing:
- Once a proposal is signed, no further proposals can be sent for that project phase
- Additional services must be added via invoices
- Invoice does not alter the signed proposal
4.10 Download PDF
The "Download PDF" button is only available when proposal status is "Completed". The PDF includes:
- All proposal content (welcome message, packages, contract, etc.)
- Client's selected packages and add-ons
- Signed contract with e-signature
- Payment details and schedule
- All collected information
File naming convention: "[Project Name] - Proposal - [Date].pdf"
4.11 Link Expiration
Share links expire along with the proposal expiration. If proposal expiration is set (e.g., 14 days), the links become invalid after that period. Expired links show an expiration message to the client. Agency must send a new proposal if client needs access after expiration.
4.12 Recipient Access
All recipients invited via the Share Proposal modal automatically receive client portal access. If a recipient doesn't have an existing Pixally account, one is created for them. Recipients can access the proposal through the emailed link or via their client portal.
4.13 Proposal Access Methods & Email Verification
Clients can access a proposal in two ways, with different authentication behavior:
4.13.1 Access via Email Link (from Share Modal)
Client Status
Behavior
Logged into portal
Direct access to the proposal (no verification)
Not logged in
Email verification popup is displayed
4.13.2 Access via Generated Link
Client Status
Behavior
Logged into portal
Email verification popup is displayed
Not logged in
Email verification popup is displayed
Note: Generated links ALWAYS require email verification, regardless of login status.
4.13.3 Email Verification Popup
Element
Description
Brand Logo
Agency brand logo at top
Title
"Provide your email"
Subtitle
"Enter the same email address you used to contact [Brand Name] to view your [Proposal Name]."
Input
Email field (placeholder: "Your email: eg demo@gmail.com")
Button
"Submit" (yellow/primary)
Close
X button
Verification Logic:
- Entered email is checked against the recipient list (signatory or non-signatory)
- Match → proposal loads
- No match → redirects to 404 error page
- Multiple retry attempts allowed
4.14 Recipient Types & Permissions
Recipients can be added as signatories or non-signatories (view-only). Among signatories, some may be marked as mandatory (required to sign before payment).
Permission
Mandatory Signatory
Non-Mandatory Signatory
Non-Signatory
View all steps
✅
✅
✅
Edit selections (Steps 1-4)
✅
✅
✅
Signature field interaction
✅ Own block
✅ Own block
👁️ View-only
Make payment
✅ (after mandatory signs)
✅ (after mandatory signs)
✅ (after mandatory signs)
Appear in Activity Listing
✅
❌ (unless pays)
❌ (unless pays)
Appear in File Activity
✅ Always
✅ Only for edits/payment
✅ Only for edits/payment
Notes:
- Only mandatory signatures block the progression to payment
- Only mandatory signatories appear in the Activity Listing
- Non-mandatory recipients (signatory or not) appear in File Activity only when they make edits or payment
- Blocking popup applies to all recipients: "To continue, the contract must be signed by: [Name(s)]"
4.15 Add New Document Modal & Re-Send Restriction
Users can add documents to a project via "Add New Document" in Project Details → Files.
Modal Tabs: Local File, Invoice, Proposal, Client Contract, Service Agreement, Questionnaire.
4.15.1 Proposal Tab — Normal State
- Lists all published proposal templates for the project's brand
- Each template shows a "Review & Send" button (yellow)
4.15.2 Proposal Tab — Restricted State (After Signing)
Once a proposal has been signed for the project:
Element
State
Message Banner
Shown at top of listing
Message Text
"Proposal for this project has already been shared and booked. To make changes, add packages or events manually."
All Templates
Visible but disabled
"Review & Send" Buttons
Greyed out for ALL templates
Restriction Logic:
- Triggered when: client has signed (regardless of payment status)
- NOT triggered when: client has only viewed but not signed
- Applies to: ALL proposal templates in the list
- Workaround: add packages/events manually to the project
5. Field Details & Validations
5.1 Share Proposal Modal Fields
Field Name
Field Type
Required
Validation Rules
Error Message
Email To
Multi-select chips
Yes
At least one recipient; Valid email format
"Please select at least one recipient"
Subject
Text Input
No
Max length TBD
N/A
Message
Rich Text
No
Max length TBD
N/A
Template
Dropdown
No
Select from available templates
N/A
5.2 Proposal Status Display
Field
Data Type
Display Condition
Status Badge
Enum
Always visible
Last Viewed
DateTime
After first client view
Completion Date
DateTime
When status is Completed
Download PDF Button
Action
Only when Completed
5.3 Information Collected - Selected Items
Field
Data Type
Source
Package Name
String
Client selection
Package Price
Currency
Package configuration
A La Carte Items
Array
Client selection
Packages Subtotal
Currency
Calculated
A La Carte Subtotal
Currency
Calculated
Taxes
Currency
Calculated per settings
Discount
Currency + %
Proposal configuration
Payment Schedule
Array
Proposal configuration
Total
Currency
Calculated
5.4 Information Collected - Personal Details
Field
Data Type
Source
First Name
String
Client input
Last Name
String
Client input
Email Address
Client input
Contact Number
Phone
Client input
Address
String
Client input (formatted)
Event Dates
Array
Client input per event
5.5 Information Collected - Contract Details
Field
Data Type
Source
Venue
String
Contract smart field
Venue Address
String
Contract smart field
Contact Number
Phone
Contract smart field
Event Date
Date
Contract smart field
(Additional fields)
Varies
Contract template
6. Success Message Handling
Action
Success Message
Display Type
Duration
Post-Success Behavior
Proposal Sent
"Proposal Sent" (modal with checkmark)
Modal
Auto-dismiss 3s
Status updates to Sent; Activity logged
Link Generated
None
N/A
N/A
Share Link modal displays
Link Copied
"Link copied to clipboard"
Toast notification
2 seconds
Clipboard contains URL
PDF Downloaded
None
N/A
N/A
File download initiates
Proposal Resent
"Proposal resent successfully"
Toast notification
3 seconds
Activity logged
7. Error Message Handling
Error Scenario
Error Message
Display Type
Trigger Condition
User Action Required
No recipient selected
"Please select at least one recipient"
Inline error
Send clicked with empty recipients
Add at least one recipient
Invalid email format
"Please enter a valid email address"
Inline error
Invalid email in recipient field
Correct email format
Send failed
"Failed to send proposal. Please try again."
Toast notification
Server/network error
Retry sending
Link generation failed
"Unable to generate link. Please try again."
Toast notification
Server error
Retry generation
PDF generation failed
"Unable to generate PDF. Please try again."
Toast notification
Server/timeout error
Retry download
Proposal already signed
"Cannot send new proposal. A signed proposal already exists for this project."
Toast notification
Attempt to send when signed
Use invoices for additions
Template unavailable
"Selected template is no longer available."
Toast notification
Template deleted
Select different template
Proposal expired
"This proposal has expired. Please create a new proposal."
Inline message
Expiration date passed
Create and send new proposal
No published templates
"No published proposal templates available for this brand."
Inline message
No templates for brand
Create template in Builder
Network error
"Connection error. Please check your internet connection."
Toast notification
Network failure
Check connection and retry
8. Edge Cases
Edge Case
System Behavior
Mandatory signatory opens proposal multiple times
That signatory's "Last viewed" timestamp updates to their most recent view; per-signatory tracking retained.
Multiple recipients - one completes
Proposal marked complete when any recipient completes all steps; Others can no longer complete.
Client partially completes then stops
Status remains "Viewed" or "In Progress"; Incomplete data not saved to Information Collected; Client can resume if not expired.
Proposal expires while client is completing
Client sees expiration message; Cannot proceed; Agency must send new proposal.
Client loses link
Agency can resend the proposal email with the same link or generate new link.
Client email bounces
Activity log should show bounce event (TBD); Agency notified to use alternative contact.
Very long proposal with many packages
PDF generation may take longer; Loading indicator shown; Consider async generation for large files.
Agency resends before client views
Multiple "Sent" activities logged; Client receives multiple emails; Same proposal link.
Template deleted after assignment
Assigned proposal retains snapshot; Template deletion doesn't affect project proposals.
Project deleted with active proposal
Proposal becomes orphaned; Cleanup process handles (TBD).
Simultaneous view by multiple signatories
Each mandatory signatory's own "Last viewed" timestamp is tracked independently.
Generate link without sending email
Links are valid; Status may remain Draft until email sent (TBD behavior).
9. Acceptance Criteria
- AC-PU-001: Users can assign published proposal templates to projects filtered by brand.
- AC-PU-002: Only one active proposal can exist per project until signed and paid.
- AC-PU-003: Users can share proposals via email with customizable subject and message.
- AC-PU-004: Users can select email templates for proposal sharing.
- AC-PU-005: Users can add multiple recipients to a single proposal send.
- AC-PU-006: All recipients automatically receive client portal access.
- AC-PU-007: Users can generate unique shareable links for each recipient.
- AC-PU-008: Generated links are tokenized and unique per recipient.
- AC-PU-009: Share links expire with proposal expiration.
- AC-PU-010: Users can preview email content before sending.
- AC-PU-011: System displays proposal status: Pending, In Progress, Completed, or Expired.
- AC-PU-012: "Last viewed" shows a per-signatory timestamp for each mandatory signatory.
- AC-PU-013: File Activity log shows all proposal events with timestamps.
- AC-PU-014: After completion, "Information Collected" displays three tabs of client data.
- AC-PU-015: Selected Items tab shows packages, A La Carte items, and pricing summary.
- AC-PU-016: Personal Details tab shows client contact info and event dates.
- AC-PU-017: Contract Details tab shows smart field values from the contract.
- AC-PU-018: Download PDF is available only for completed proposals.
- AC-PU-019: Revised proposals can only be sent if previous is unsigned and unpaid.
- AC-PU-020: Sending revised proposal auto-expires previous version.
- AC-PU-021: No proposals can be sent after one is signed (for same project phase).
- AC-PU-022: Users can resend the same proposal multiple times.
- AC-PU-023: Empty state displays when no information is collected yet.
- AC-PU-024: Multi-party signing activity shows each signer's status with timestamp.
- AC-PU-025: Countersign button appears after all client signatures and payment complete.
- AC-PU-026: Dynamic discount message displays in Information Collected (e.g., "10% Discount applied to packages only").
- AC-PU-027: Payment Schedule shows actual dates when event date is set, or condition text when TBD.
- AC-PU-028: Personal Details in Information Collected reflects proposal-only data (no sync to Client Management).
- AC-PU-029: Email link access: logged-in users get direct access; not logged-in users see verification popup.
- AC-PU-030: Generated link access: ALL users see verification popup regardless of login status.
- AC-PU-031: Email verification checks against recipient list; invalid email redirects to 404.
- AC-PU-032: Generate Link creates unique link per recipient with copy button for each.
- AC-PU-033: Activity Listing shows MANDATORY signatories only; non-mandatory recipients are hidden unless they pay.
- AC-PU-034: Non-mandatory recipients (signatory or not) appear in File Activity only when they make edits or payment.
- AC-PU-039: Each mandatory signatory has their own per-signatory "Last viewed" timestamp.
- AC-PU-035: Add New Document modal shows Proposal tab with template list.
- AC-PU-036: Once proposal is signed, all proposal templates are disabled with message.
- AC-PU-037: Restriction message: "Proposal for this project has already been shared and booked. To make changes, add packages or events manually."
- AC-PU-038: Proposal restriction is triggered by signing, not by viewing.
10. Manual Test Cases
Manual test cases for this module are provided in a separate Excel file:
📎 File: FRD_03_Proposal_Usage_Test_Cases.xlsx
The test cases cover:
- Proposal assignment to projects
- Share modal functionality
- Email sending and preview
- Link generation and copying
- Status tracking and display
- Information Collected tabs
- File Activity verification
- PDF download
- Revised proposal logic
- All acceptance criteria validation
- Edge case testing
11. Dependencies
11.1 Internal Dependencies
Dependency
Module/Feature
Type
Impact if Unavailable
Proposal Builder
Published templates
Required
No templates available to assign
Project Management
Project context and client list
Required
Cannot access project or recipients
Client Management
Client profiles and contacts
Required
Cannot retrieve client info for recipients
Email Templates
Pre-defined email templates
Optional
Cannot use templates; manual entry only
Brands Management
Brand filtering
Required
Cannot filter templates by brand
Project Detail
Status management
TBD
Status tracking may be incomplete
11.2 External Dependencies
Dependency
Service
Type
Impact if Unavailable
Email Service
SendGrid/similar
Required
Cannot send proposal emails
PDF Generation
PDF service
Required
Cannot download completed proposals
Link Tokenization
Token service
Required
Cannot generate secure share links
Client Portal
Portal access
Required
Recipients cannot access proposals
12. References
12.1 Figma Designs
Screen
File Name
Description
Share Modal
8-share.png
Share Proposal main modal
Recipient Selection
8-share1.png
Adding recipients dropdown
Email Preview
8-share2.png
Preview before sending
Send Confirmation
8-share3.png
Proposal Sent success
Share Contract
8-share4.png
Similar modal for contracts
Generate Link Confirm
8-share5.png
Link generation confirmation
Share Link Modal
8-share6.png
Individual recipient links
Share Modal Alt
8-share7.png
Alternative view
Proposal Sent Status
7-propusage.png
Project detail - Sent state
Proposal Completed
7-propusage1.png - 7-propusage2.png
Completed with data
Personal Details Tab
7-propusage3.png
Personal info display
Contract Details Tab
7-propusage4.png
Contract smart fields
12.2 Related FRDs
FRD
Module
Relationship
FRD #1
Proposal Listing
Source of templates
FRD #2
Proposal Builder
Template configuration
FRD #4
Client-Side Interaction
What clients see after receiving
FRD #5
Impact on Project
What happens after completion
Project Management FRD
Project Details
Host module for proposals
Email Center FRD
Email functionality
Email template integration
12.3 Source Documents
Document
Reference
Module Logic Explanation
Proposal Module Dec 15 2025.pdf (19:20 - 47:00)
Historical Context
Proposal-Module-185d8b98-5a32.json
Document Revision History
Version
Date
Author
Changes
1.2
April 17, 2026
Claude AI
Invoice generation timing, TBD format, countersign before payment
1.1
April 17, 2026
Claude AI
Statuses, multi-party signing, countersign, discount display
1.0
December 16, 2025
Claude AI
Initial FRD creation
End of FRD #3: Proposal Usage in Project
✅ 4. Client-Side Interaction
Functional Requirements Document
FRD #4: Client-Side Interaction
Document Version: 1.3
Created Date: December 16, 2025
Last Updated: April 17, 2026 | 02:00 PM IST
Module: Client-Side Proposal Interaction (Client Portal)
Platform: Pixally CRM - Client Portal
Status: Draft
Change Log
Version
Date
Time
Author
Changes
1.3
April 17, 2026
02:00 PM IST
Claude AI
(1) Email vs Generated Link access flow; (2) Email verification popup details; (3) Signatory vs Non-Signatory permissions; (4) Non-signatories: view-only for signatures, can edit/pay; (5) Blocking message applies to both signatory and non-signatory
1.2
April 17, 2026
12:30 PM IST
Claude AI
TBD format, invoice timing, countersign before payment, receipt handling
1.1
April 17, 2026
10:45 AM IST
Claude AI
Step order, multi-party signing, no client sync, sub-pages
1.0
December 16, 2025
-
Claude AI
Initial FRD creation
Table of Contents
- Module Overview
- User Roles & Permissions
- User Flow
- Functional Logic
- Field Details & Validations
- Success Message Handling
- Error Message Handling
- Edge Cases
- Acceptance Criteria
- Manual Test Cases
- Dependencies
- References
1. Module Overview
1.1 Purpose
The Client-Side Interaction module defines the complete client experience when viewing and completing a proposal. Clients navigate through a structured six-step process including package selection, personal information entry, event date configuration, pricing review, contract signing with e-signature (including multi-party signing), and initial payment collection.
1.2 Business Goals
The Client-Side Interaction module aims to achieve the following business objectives:
- Provide clients with a guided, intuitive proposal completion experience that minimizes abandonment.
- Capture all necessary client information required for project setup and service delivery.
- Facilitate legally binding contract signing with compliant e-signature functionality, supporting both single and multi-party signing.
- Enable secure payment collection through integrated Stripe payment processing.
- Support both immediate payment and deferred payment collection based on agency configuration.
- Allow agencies to countersign contracts after client signatures for complete contract execution.
1.3 Scope
This FRD covers the following functionality:
- Welcome screen with step overview
- Step 1: Package Selection (with A La Carte items and sub-page navigation)
- Step 2: Personal Details entry
- Step 3: Event Dates configuration
- Step 4: Price Summary review (with dynamic discount display)
- Step 5: Contract Signing with e-signature (single and multi-party)
- Step 6: Initial Payment collection
- Navigation controls and progress indicators
- Multi-party signing flow with agency countersign
- Success screens and confirmations
1.4 Out of Scope
The following items are not covered in this FRD:
- Agency-side proposal configuration (covered in FRD #2)
- Proposal assignment and sharing (covered in FRD #3)
- Post-completion project updates (covered in FRD #5)
- Client Portal general functionality (covered in Client Portal FRD)
2. User Roles & Permissions
2.1 Role-Based Access Matrix
Permission
Client (Primary)
Client (Secondary)
Agency User (Preview)
Access Proposal via Link
✅
✅
✅
View Welcome Screen
✅
✅
✅
Select Packages
✅
✅
❌
Enter Personal Details
✅
✅ (own details)
❌
Enter Event Dates
✅
✅
❌
View Price Summary
✅
✅
✅
Sign Contract
✅
✅ (own signature block)
❌
Make Payment
✅
❌
❌
Download Invoice/Receipt
✅
✅
❌
Countersign Contract
❌
❌
✅ (after all client signatures)
2.2 Permission Notes
- Primary Client is the main recipient whose information is pre-filled from the project.
- Secondary Client(s) can be included for multi-party signing scenarios.
- Each client can only edit their own signature block; other blocks are visible but read-only.
- Both primary and secondary clients can edit package selections and other steps UNTIL all mandatory signatures are complete.
- Agency Users can preview proposals but cannot interact with actual proposal instances.
- Agency countersign is required after all client signatures for contract completion.
- All recipients automatically receive client portal access when proposal is shared.
2.3 Signatory vs Non-Signatory Permissions
Recipients can be designated as signatories or non-signatories:
Permission
Signatory
Non-Signatory
Access proposal
✅
✅
View all steps (1-6)
✅
✅
Edit package selections (Step 1)
✅
✅
Edit personal details (Step 2)
✅
✅
Edit event dates (Step 3)
✅
✅
View price summary (Step 4)
✅
✅
View contract (Step 5)
✅
✅
Interact with signature field
✅ Own block only
❌ View-only
Make payment (Step 6)
✅ After all signs
✅ After all signs
Appear in Activity Listing
✅
❌
Appear in File Activity
✅ Always
✅ Only for edits/payment
Non-Signatory Behavior:
- Can view the entire proposal including contract
- Can make edits to selections in Steps 1-4
- Cannot click or interact with ANY signature field (view-only)
- Can proceed to payment ONLY after all mandatory signatures are complete
- If attempting to proceed before signatures complete, sees blocking popup message
3. User Flow
3.1 Accessing the Proposal
Clients can access proposals through two methods with different authentication requirements:
Access via Email Link (from Share Modal)
Client Status
Behavior
Logged into portal
Direct access to proposal
Not logged into portal
Email verification popup displayed
Flow (Direct Access):
- Client clicks link in email.
- System detects client is logged in.
- Proposal loads directly to Welcome Message screen.
Flow (Verification Required):
- Client clicks link in email.
- System detects client is not logged in.
- Email verification popup displayed.
- Client enters email and clicks "Submit".
- System validates email against recipient list.
- If valid: Proposal loads to Welcome Message screen.
- If invalid: Redirects to 404 error page.
Access via Generated Link
Client Status
Behavior
Logged into portal
Email verification popup displayed
Not logged into portal
Email verification popup displayed
Note: Generated links ALWAYS require email verification regardless of login status.
Flow:
- Client clicks generated link.
- Email verification popup displayed.
- Client enters email and clicks "Submit".
- System validates email against recipient list.
- If valid: Proposal loads to Welcome Message screen.
- If invalid: Redirects to 404 error page.
Email Verification Popup
Element
Description
Brand Logo
Agency brand logo centered at top
Title
"Provide your email"
Subtitle
"Enter the same email address you used to contact [Brand Name] to view your [Proposal Name]."
Input Field
Email address input (placeholder: "Your email: eg demo@gmail.com")
Submit Button
"Submit" (yellow/primary button)
Close Button
X button in top-right corner
Verification Rules:
- Email must match a recipient (signatory OR non-signatory)
- Multiple retry attempts allowed
- Invalid email redirects to 404 page (no specific error message)
Post-Verification Flow
- System loads the proposal and displays the Welcome Message screen.
- Client reviews the welcome message and step overview.
- Client clicks "Open Proposal" to begin the completion flow.
3.2 Step 1: Choose Packages
- System displays the first package group with available packages.
- If multiple package groups exist, header shows "STEP 1 — CHOOSE PACKAGES (HAS [X] SUB-PAGES)".
- Progress bar displays "Packages: [current]/[total]" (e.g., "1/3").
- Client views package cards with details (name, description, events, price).
- Client clicks "Select" on desired package (one per group).
- Selected package shows "Selected" state with checkmark.
- Client optionally selects A La Carte items below packages.
- If multiple package groups exist, client navigates through each group using "Next Step".
- Client can use "Skip Page" to temporarily skip a package group.
- Client must select at least ONE package total across all groups before completing Step 1.
- Client clicks "Next Step" to proceed to Personal Details.
3.3 Step 2: Personal Details
- System displays Personal Details form.
- Fields pre-populate from Primary Client data in the project.
- Client reviews/updates personal information fields.
- Client enters address information (required for tax calculation).
- Note: Changes made here are saved ONLY for this proposal and do NOT sync to Client Management.
- Client clicks "Next Step" to proceed to Event Dates.
3.4 Step 3: Event Dates
- System displays event cards for each event in selected packages.
- Client enters dates for each event using date picker.
- Client can toggle "There is no definite date yet" for any event (including primary).
- Primary event date is used for payment schedule calculations.
- Client clicks "Next Step" to proceed to Price Summary.
3.5 Step 4: Price Summary
- System displays all selected packages and add-ons.
- Client reviews itemized pricing on the left panel.
- Client reviews summary calculations on the right panel.
- Dynamic discount message displays (e.g., "10% Discount applied to packages only").
- Payment schedule shows actual dates OR condition text if event date is TBD.
- Client clicks "Next Step" to proceed to Sign Contract.
3.6 Step 5: Sign Contract
- System displays the full contract document.
- Client scrolls through and reads contract terms.
- Client views dynamic sections populated with their specific details.
- All signature blocks are visible (own + other parties if multi-party).
- Client can only edit their own signature block.
- Client provides e-signature in their signature pad area.
- Client checks the certification checkbox.
- Client clicks "Sign Contract" button.
- If multi-party signing:
- If other required signatures are pending, client sees error popup when clicking "Next Step": "To continue, the contract must be signed by: [Name(s)]".
- Client cannot proceed to Step 6 until all mandatory signatures are complete.
- Client can still go back and edit Steps 1-4 while waiting for other signatures.
- Once all signatures complete, client clicks "Next Step" to proceed to Initial Payment.
3.7 Step 6: Initial Payment
Pre-Conditions:
- All mandatory signatures are complete
- Invoice has been generated (status: Unpaid)
- Agency countersign may already be complete (countersign happens BEFORE payment)
Flow:
- System displays payment amount due (first payment milestone).
- Client can click "View Invoice" to see full invoice details (same file as in Files and Documents).
- Client enters payment information (Credit Card or ACH).
- Client clicks "Pay $[amount]" button.
- System processes payment through Stripe.
- System displays Payment Successful screen with receipt details.
- Client can download Invoice (Receipt is emailed, not downloadable here).
- Client clicks "Finish" to complete the flow.
Alternative Flow - Cash Payment:
- Client does not complete Step 6 online
- Agency manually marks invoice as "Paid" in Finance → Billing
- Proposal status updated to "Completed" by agency
4. Functional Logic
4.1 Welcome Message Screen
The Welcome screen serves as the introduction to the proposal flow:
Display Elements:
- Brand header image from proposal template
- Brand logo (centered)
- Welcome message title (from template or default)
- Welcome message body text (from template)
- Step overview showing 6 steps with icons:
- Choose Packages
- Personal Details
- Event Dates
- Price Summary
- Sign Contract
- Initial Payment
- "Open Proposal" button (primary CTA)
Behavior:
- Steps display as horizontal timeline with icons
- All steps shown as upcoming (not started)
- Clicking "Open Proposal" advances to Step 1
4.2 Navigation Controls
Bottom Navigation Bar:
- "Previous Step" button (left): Returns to prior step; Hidden on Step 1
- Step indicators (center): Numbered circles (1-6) showing progress
- "Next Step" button (right): Advances to next step; "Finish" on final step
Step Indicators:
- Current step: Highlighted/active state
- Completed steps: Checkmark icon replaces number
- Future steps: Number with inactive state
Sub-Page Navigation (for Multiple Package Groups):
- When proposal has multiple package groups, Step 1 has sub-pages
- Header displays: "STEP 1 — CHOOSE PACKAGES (HAS [X] SUB-PAGES)"
- Progress bar shows: "Packages: [current]/[total]" (e.g., "Packages: 1/3")
- Step indicators remain as 1, 2, 3, 4, 5, 6 (sub-pages don't add new step numbers)
- Progress bar updates as client navigates through sub-pages
Skip Page Button:
- Displays in top-right corner ONLY on package selection sub-pages
- Allows temporary skip to next package group
- Does NOT appear on Price Summary or other steps
- Client must select at least ONE package total before completing Step 1
- All 6 major steps are mandatory; skip only applies within package selection
4.3 Step 1: Choose Packages
4.3.1 Package Group Display
Page Header:
- If single group: "Choose a [Group Heading]" (e.g., "Choose a Photo/Video Package")
- If multiple groups: "STEP 1 — CHOOSE PACKAGES (HAS [X] SUB-PAGES)" with progress bar
- Subtitle: "Select a main package for your event(s)."
Package Cards (Horizontal Layout): Each package displays as a card containing:
- Service type badges (e.g., "Photography", "Videography")
- Package cover image
- Package name
- Package description
- Event sections (e.g., "Wedding", "Rehearsal Dinner") with line items
- Price (e.g., "$350.00 USD")
- "Select" button
- "Show Details" button
Horizontal Scrolling:
- If packages exceed horizontal space, scroll arrows appear
- Progress bar shows scroll position
- Last partially visible package shows fade effect indicating more content
Line Item Quantity Display:
- If line item has quantity > 1, displays as "Item Name x[quantity]"
- Example: "Basic Retouch x2"
4.3.2 Package Selection Rules
- Client can select only ONE package per package group
- Selecting a package changes button from "Select" to "Selected" (blue with checkmark)
- Card border highlights to indicate selection
- Selecting different package deselects previous selection
- Client must select at least ONE package total across all groups
- If using "Skip Page", client can skip individual groups but must complete at least one selection
4.3.3 Show Details Modal
Clicking "Show Details" opens a modal with:
- Package image
- Service type badge
- Package name
- Description
- Event-by-event breakdown with all line items and descriptions
- Total package price
- Close (X) button to dismiss
4.3.4 A La Carte Items Section
Section Header:
- Title: "Choose A La Carte Items"
- Subtitle: "Additional items to enhance your experience"
Item Display:
- Items shown in grid format with checkboxes
- Each item shows: Checkbox, Item name, Event association, Price (+$XX.00), "MORE INFO" link
A La Carte Display Logic:
- Before package selection: Shows items COMMON to all packages in the group
- After package selection: Shows all items available for the selected package
- Items dynamically update when package selection changes
Quantity Selection:
- When item is selected (checkbox checked), quantity selector appears
- Quantity selector shows "— [qty] +" controls
- Minimum quantity: 1 (cannot go below 1 while selected)
- Maximum quantity: 99
- To deselect item: Uncheck the checkbox (not by reducing quantity to 0)
4.3.5 Multi-Group Navigation
When proposal has multiple package groups:
- Header shows "STEP 1 — CHOOSE PACKAGES (HAS [X] SUB-PAGES)"
- Progress bar: "Packages: 1/3" → "Packages: 2/3" → "Packages: 3/3"
- Client sees pages for each group sequentially
- "Skip Page" button allows skipping to next group temporarily
- Step indicators show standard 1-6 (no sub-step numbering like 1.1, 1.2)
- Client must select at least ONE package total before completing Step 1
- Can navigate back to previous groups using "Previous Step"
4.4 Step 2: Personal Details
4.4.1 Form Structure
Page Header:
- "Personal Details"
- Subtitle: "Add your contact information in the form below."
Personal Information Section:
- First Name (text input)
- Last Name (text input)
- Email address (email input)
- Contact Number (phone input with country code selector)
Address Section:
- Address line 1 (text input)
- Address line 2 (text input, optional)
- City (text input)
- State (text input)
- Postal Code (text input)
- Country (dropdown)
4.4.2 Data Pre-Fill (IMPORTANT CHANGE)
Data Source:
- Fields pre-populate from the Primary Client associated with the project in Client Management.
Data Persistence:
- Changes made by the client are saved ONLY for this proposal.
- Changes do NOT sync back to Client Management.
- No new client record is created based on these changes.
- Data is displayed in the agency's "Information Collected → Personal Details" tab.
If Client Info is Incorrect:
- Client can edit the fields for this proposal.
- To update their master profile, client must update via their Client Portal settings.
4.4.3 Address Purpose
Address is required primarily for tax calculation:
- Used by Stripe Tax for auto-calculation (if enabled)
- Used for invoice billing address
- Required fields: Address line 1, City, State, Postal Code, Country
4.5 Step 3: Event Dates (MOVED FROM STEP 4)
4.5.1 Page Structure
Page Header:
- "Event Dates"
- Subtitle: "Select a additional event dates"
Event Cards: Each event from selected packages displays as a card:
- Event name (e.g., "Wedding")
- "(Primary Event)" label for main event
- "Event Date" label with date picker
- Toggle: "There is no definite date yet"
4.5.2 Date Entry Logic
- Date picker opens calendar for selection
- Date format displayed per locale settings
- Primary event can also have "no definite date" toggle enabled
- When toggle enabled, date picker is disabled/cleared
- All events must either have date entered OR "no definite date" toggled
4.5.3 Event Population
Events are dynamically populated based on selected packages:
- Each unique event type in selected packages gets a card
- If package covers Wedding + Rehearsal Dinner, both appear
- Primary event identified from package configuration
4.5.4 Impact on Payment Schedule
- Primary event date is used for all Smart Date payment schedule calculations
- If primary event date is set: Payment Schedule shows calculated dates (e.g., "June 18, 2025")
- If primary event date is TBD: Payment Schedule shows condition text (e.g., "TBD - 3 days before event")
4.6 Step 4: Price Summary (MOVED FROM STEP 3)
4.6.1 Left Panel - Selected Items
Displays each selected package:
- Service type badge(s)
- Package name
- Description text
- Price
- "SELECTED ADD-ONS" section showing chips with item name and price
If multiple packages selected (from different groups), each displays as separate card.
4.6.2 Right Panel - Summary
Line Item
Value
Packages Subtotal
Sum of package prices
A La Carte Items Subtotal
Sum of add-on prices
Discount
Percentage badge and amount (negative, in green/teal)
Dynamic Discount Message
Yellow info banner (see 4.6.4)
Taxes
Calculated tax amount
Net Total
Subtotal - Discount + Tax
Payment Schedule
List of dates/conditions and amounts
Total
Final amount (same as Net Total)
4.6.3 Calculation Formula
Packages Subtotal = SUM(Selected Package Prices)
A La Carte Subtotal = SUM(Selected Items × Quantities)
Subtotal = Packages Subtotal + A La Carte Subtotal
Discount Amount = Subtotal × Discount% (or Flat Amount)
Taxable Amount = (Subtotal - Discount) [only taxable items]
Tax = Taxable Amount × Tax Rate
Total = Subtotal - Discount + Tax
Note: Discount is applied BEFORE tax calculation.
4.6.4 Dynamic Discount Message
A yellow/cream colored info banner displays below the Discount line showing the discount configuration:
Message Format Variations:
Discount Type
Application
Format
Bundle - Percentage - Packages Only
"10% Discount applied to packages only"
Bundle - Percentage - Both
"10% Discount applied to packages and a la carte"
Bundle - Flat - Packages Only
"$50 Discount applied to packages only"
Bundle - Flat - Both
"$50 Discount applied to packages and a la carte"
Regular - Percentage - Packages Only
"10% Discount applied to packages only"
Regular - Percentage - Both
"10% Discount applied to packages and a la carte"
Regular - Flat - Packages Only
"$50 Discount applied to packages only"
Regular - Flat - Both
"$50 Discount applied to packages and a la carte"
This message also appears in:
- Proposal Builder preview (agency side)
- Information Collected view (agency side, after completion)
4.6.5 Payment Schedule Display
When Primary Event Date is SET:
Payment Schedule
Amount
June 18, 2025
$200.00
September 28, 2026
$260.22
December 21, 2026
$260.22
When Primary Event Date is TBD:
Payment Schedule
Amount
TBD - 3 days before event
$200.00
TBD - 30 days after event
$260.22
TBD - 60 days after event
$260.22
When Custom/Fixed Date is Set:
Payment Schedule
Amount
June 18, 2025
$200.00
September 28, 2026
$260.22
The TBD prefix only appears when event date is not set. Fixed/custom dates show exact date without TBD prefix.
4.7 Step 5: Sign Contract
4.7.1 Contract Display
Page Header:
- "Sign Contract"
- Subtitle text
Contract Content:
- Full contract document in scrollable container
- Contract text from selected contract template
- Numbered sections (1, 2, 3, etc.)
- Standard legal language
4.7.2 Dynamic Sections
The contract includes dynamic sections populated with client-specific data:
Section 7 - Event and Dates:
- Table showing event names and dates
- Primary event with date or "There is no definite date yet"
- Additional events with dates
Section 8 - Payment Details:
- Packages Subtotal
- A La Carte Items Subtotal
- Taxes
- Discount (percentage and amount)
- Payment Schedule (dates/conditions and amounts)
- Total
4.7.3 Signature Section - Single Party
Signature Pad:
- Drawing area for e-signature
- Client draws or types signature
- Signature renders in script font below pad
- Date auto-populated (current date)
Certification Checkbox:
- Text: "I certify that I have read and agree to the terms and conditions mentioned in this contract."
- Must be checked to enable Sign Contract button
Sign Contract Button:
- Disabled until checkbox is checked
- Clicking locks the signature and records contract signing
- Timestamp captured for audit trail
4.7.4 Signature Section - Multi-Party
When proposal has multiple signers configured (in Contract Template):
Display:
- ALL signature blocks are visible to all parties
- Each party sees their own block as editable
- Other parties' blocks show as read-only (empty if not signed, signature if signed)
Signing Logic:
- No specific signing order; whoever opens the proposal first can sign first
- Each client can only edit their own signature block
- After signing, that client's signature is locked
- Other clients' blocks remain editable for those clients
Mandatory vs Optional Signatures:
- If agency marks signatures as mandatory (in Contract Template), ALL signatures required
- If not all mandatory signatures complete, "Next Step" shows error popup
4.7.5 Multi-Party Signing - Blocking Logic
When ANY client (signatory OR non-signatory) clicks "Next Step" to proceed to payment but mandatory signatures are pending:
Error Popup:
- Icon: Warning triangle (⚠️)
- Message: "To continue, the contract must be signed by: [Name(s)]"
- Example: "To continue, the contract must be signed by: Sehal Maheswari"
- If multiple names: "To continue, the contract must be signed by: Sehal Maheswari, John Smith"
- Close (X) button to dismiss
This blocking applies to:
- Signatories who have signed but others haven't
- Signatories who haven't signed yet
- Non-signatories attempting to proceed to payment
Client Experience After Signing (Signatories):
- Client can still navigate back to Steps 1-4 and make changes
- Client cannot proceed to Step 6 until all mandatory signatures complete
- Changes to package selections do NOT invalidate existing signatures
- Client can return later to check if other parties have signed
Non-Signatory Experience:
- Can navigate through Steps 1-5 and view/edit as permitted
- Cannot interact with signature fields (view-only)
- Cannot proceed to Step 6 until all mandatory signatures complete
- Sees same blocking popup if attempting to proceed early
4.7.6 Non-Signatory Signature View
When a non-signatory views Step 5 (Sign Contract):
- All signature blocks are visible
- All blocks are in view-only mode (cannot click or interact)
- Signed blocks show the signature
- Unsigned blocks show empty state
- No signature pad or certification checkbox available to non-signatories
- Non-signatory can scroll and read the entire contract
4.7.6 Editing Before All Signatures Complete
IMPORTANT: All steps (1-4) remain editable by any party until ALL mandatory signatures are complete.
- Both/all clients can edit package selections, personal details, and event dates
- Signatures already made remain valid even if selections change
- Once ALL signatures complete, Steps 1-4 become locked (read-only)
4.7.7 Post-All-Signatures Rules
- Once all mandatory signatures complete, client can proceed to Step 6
- Steps 1-4 become locked; client cannot go back to make changes
- For any modifications after this point, client must contact agency (TBD process)
- Contract data sent to agency's system
4.8 Step 6: Initial Payment
4.8.1 Payment Information Display
Page Header:
- "Initial Payment"
- Subtitle: "Make your initial payment and we'll take it from here."
Amount Section:
- "Amount due" label
- Dollar amount (first payment milestone)
- "View Invoice" link
4.8.2 Payment Form
Email Address:
- Pre-filled from Personal Details
- Receipt sent to this email
Payment Tabs:
- "Debit or credit card" (tab 1)
- "Bank account" (tab 2, if ACH enabled)
Credit Card Fields:
- Card Number (with card brand icons: Visa, Mastercard, Amex, JCB)
- Expiration Date (MM/YY)
- Security Code (CVC)
- Name on Card
- Country (dropdown)
ACH Fields (if enabled):
- Bank Account Number
- Routing Number
- Account Type (Checking/Savings)
- "In Progress" status indicator for ACH processing
Pay Button:
- "Pay $[amount]" (e.g., "Pay $200.00")
- Button color matches proposal theme
- Disabled until valid payment info entered
4.8.3 Payment Processing Logic
Immediate Payment:
- If first payment is due immediately per proposal settings
- Payment is charged when Pay button clicked
- Success screen shown upon completion
Deferred/Scheduled Payment:
- Payment info collected and saved securely (via Stripe)
- Actual charge occurs on scheduled date
- Success screen still shown for confirmation
Stripe Integration:
- Card validation via Stripe
- PCI-compliant - no sensitive data stored in Pixally
- Stripe minimum charge: TBD
4.9 Payment Success Screen
Display Elements:
- Green checkmark icon
- "Payment Successful" heading
- Message: "You have been successfully charged for this transaction. A receipt for this purchase has been sent to your email."
Receipt Details:
Field
Value
Receipt number
e.g., 2593-0995
Invoice number
e.g., ZEN-INV-1769593092
Payment method
e.g., VISA - 4242
Action Buttons:
- "Download Invoice" - Downloads invoice PDF (same file as in Files and Documents)
Note: Receipt is sent via email only and is NOT available for download on this screen or in Files and Documents.
Navigation:
- "Finish" button completes the flow
- Returns client to client portal or confirmation page
4.10 Agency Countersign
After all client signatures AND payment complete:
Agency View (in Project Details → Files):
- Shows all signers with status
- Format: "[Client Name] - Signed ([Date] at [Time])" for completed
- Format: "[Client Name] (You) - In progress" for agency pending
- "Countersign" button (yellow) appears for agency user
Countersign Flow:
- All client signatures must be complete
- Payment must be complete (or agency manually marks complete for cash/separate invoice scenarios)
- "Countersign" button appears for agency user
- Agency clicks to countersign
- Proposal status changes to "Completed"
Activity Tracking:
- Each signer's name, status, and "Last viewed" timestamp displayed
- Example: "Signed (17 Dec 2024 at 1:31 PM)" / "Last viewed: 17 Dec 2024 at 1:31 PM"
4.11 Proposal Expiration Handling
If proposal has expiration enabled and date has passed:
- Client sees expiration message instead of proposal content
- Message indicates proposal has expired
- Client cannot proceed with completion
- Instructions to contact agency for new proposal
- Status changes to "Expired"
4.12 Save and Resume (TBD)
The ability for clients to save progress mid-flow and resume later is TBD. Current behavior:
- Progress may be lost if client closes browser
- Client must restart from beginning
- Future enhancement may include auto-save functionality
5. Field Details & Validations
5.1 Personal Details Fields
Field Name
Field Type
Required
Validation Rules
Error Message
First Name
Text Input
Yes
1-50 chars; Letters, spaces, hyphens, apostrophes
"First name is required"
Last Name
Text Input
Yes
1-50 chars; Letters, spaces, hyphens, apostrophes
"Last name is required"
Email Address
Email Input
Yes
Valid email format (RFC 5322)
"Please enter a valid email address"
Contact Number
Phone Input
Yes
Valid phone with country code
"Please enter a valid phone number"
Address Line 1
Text Input
Yes
1-100 chars
"Address is required"
Address Line 2
Text Input
No
0-100 chars
N/A
City
Text Input
Yes
1-50 chars
"City is required"
State
Text Input
Yes
1-50 chars
"State is required"
Postal Code
Text Input
Yes
Valid format for country
"Please enter a valid postal code"
Country
Dropdown
Yes
Must select from list
"Please select a country"
5.2 Event Date Fields
Field Name
Field Type
Required
Validation Rules
Error Message
Event Date
Date Picker
Conditional
Required unless toggle is on; Valid date
"Please select a date or indicate date is not set"
No Definite Date Toggle
Toggle
No
When ON, date field optional
N/A
5.3 A La Carte Quantity Fields
Field Name
Field Type
Required
Validation Rules
Error Message
Quantity
Number Input
Yes (if item selected)
Min: 1, Max: 99; Integer only
"Quantity must be between 1 and 99"
5.4 Payment Fields - Credit Card
Field Name
Field Type
Required
Validation Rules
Error Message
Card Number
Number Input
Yes
Valid card (Luhn); 13-19 digits
"Please enter a valid card number"
Expiration Date
Date Input
Yes
MM/YY format; Future date
"Card has expired"
Security Code
Number Input
Yes
3-4 digits
"Invalid security code"
Name on Card
Text Input
Yes
1-100 chars
"Name on card is required"
Country
Dropdown
Yes
Must select
"Please select a country"
5.5 Payment Fields - ACH (if enabled)
Field Name
Field Type
Required
Validation Rules
Error Message
Account Number
Number Input
Yes
Valid account number
"Invalid account number"
Routing Number
Number Input
Yes
9 digits; Valid ABA
"Invalid routing number"
Account Type
Radio
Yes
Checking or Savings
"Please select account type"
5.6 Contract Signature Fields
Field Name
Field Type
Required
Validation Rules
Error Message
E-Signature
Signature Pad
Yes
Must have content
"Please provide your signature"
Certification Checkbox
Checkbox
Yes
Must be checked
"Please confirm you agree to the terms"
6. Success Message Handling
Action
Success Message
Display Type
Duration
Post-Success Behavior
Package Selected
None (UI updates)
Visual state change
N/A
"Select" → "Selected" with checkmark
A La Carte Selected
None (UI updates)
Checkbox checked
N/A
Item added to selection
Step Completed
None (auto-advance)
N/A
N/A
Next step loads
Contract Signed
None (button state)
Button disabled
N/A
If multi-party pending, show info; else proceed enabled
Payment Successful
"Payment Successful" + details
Full screen
Persistent
Shows receipt info and download options
Proposal Completed
None
N/A
N/A
Redirect to portal or confirmation
7. Error Message Handling
Error Scenario
Error Message
Display Type
Trigger Condition
User Action Required
No package selected
"Please select a package to continue"
Inline/Toast
Next clicked without any selection
Select at least one package
Required field empty
"[Field name] is required"
Inline field error
Next clicked with empty field
Fill required field
Invalid email
"Please enter a valid email address"
Inline field error
Invalid format
Correct email
Invalid phone
"Please enter a valid phone number"
Inline field error
Invalid format
Correct phone
Invalid postal code
"Please enter a valid postal code"
Inline field error
Format mismatch
Correct postal code
Card declined
"Payment declined. Please check your card details or try a different card."
Toast/Inline
Stripe decline
Use different card
Card expired
"This card has expired. Please use a different card."
Inline field error
Past expiration
Use valid card
Invalid CVC
"Invalid security code"
Inline field error
CVC validation fail
Enter correct CVC
Insufficient funds
"Insufficient funds. Please try a different payment method."
Toast
Bank decline
Different payment
Signature required
"Please provide your signature"
Inline error
Proceed without signing
Sign in pad
Checkbox not checked
"Please confirm you agree to the terms"
Inline error
Proceed without checking
Check the box
Multi-party signature pending
"To continue, the contract must be signed by: [Name(s)]"
Popup modal
Next clicked with pending signatures
Wait for other signatures
Proposal expired
"This proposal has expired. Please contact [Agency] for a new proposal."
Full page
Expiration passed
Contact agency
Network error
"Connection error. Please check your internet and try again."
Toast
Network failure
Retry
A La Carte quantity invalid
"Quantity must be between 1 and 99"
Inline error
Quantity outside range
Enter valid quantity
8. Edge Cases
Edge Case
System Behavior
Client refreshes page mid-flow
Progress may be lost (TBD save/resume); Client restarts or resumes from last saved point.
Client closes browser then returns
If within session/token validity, may resume; Otherwise restarts. TBD implementation.
Client completes on mobile
Responsive design adapts; Signature pad works with touch input.
Multiple events with same name
Display both; Differentiated by event ID internally.
Client selects then deselects package
A La Carte display reverts to common items; Selection state clears.
Client enters past date for event
Calendar may allow it; Agency responsibility to validate business logic.
Tax calculation fails (Stripe error)
Fall back to manual rate if configured; Otherwise show error.
Payment amount is $0
Step 6 behavior TBD; May skip payment or show $0 confirmation.
Client's country not supported by Stripe
Payment fails; Message to contact agency for alternative payment.
Very long contract document
Scrollable container; May impact mobile experience.
Client disputes signature later
Timestamp and IP logged for legal audit trail.
ACH payment processing delay
Show "In Progress" status; Client informed of delay.
All events marked "no definite date"
Allowed; Events created as TBD in project; Payment Schedule shows condition text.
Client tries to go back after all signatures complete
Navigation to Steps 1-4 blocked; Must contact agency.
Client abandons at payment step
Contract signed but not paid; Agency follows up; Agency can manually mark complete for cash payments.
Multi-party: One client signed, other changes selections
Signatures remain valid; Changes do not invalidate existing signatures.
Multi-party: Client A signed, waiting for Client B
Client A can still edit Steps 1-4; Cannot proceed to Step 6.
Multi-party: Both clients open proposal simultaneously
Both can make selections; Last save wins for shared fields; Each signs own block.
Client tries to skip all package groups
Must select at least one package total; Error shown if trying to proceed with zero selections.
Primary event TBD but secondary has date
Payment Schedule uses condition text (based on primary); Secondary event date saved normally.
9. Acceptance Criteria
- AC-CI-001: Clients can access proposals via emailed link or client portal.
- AC-CI-002: Welcome screen displays agency's welcome message and 6-step overview with correct order: Packages, Personal Details, Event Dates, Price Summary, Sign Contract, Initial Payment.
- AC-CI-003: Clients can select one package per package group.
- AC-CI-004: Package selection updates available A La Carte items dynamically.
- AC-CI-005: Clients can select multiple A La Carte items.
- AC-CI-006: A La Carte quantity selection shows min 1, max 99; deselect via checkbox.
- AC-CI-007: When multiple package groups exist, header shows "STEP 1 — CHOOSE PACKAGES (HAS [X] SUB-PAGES)" with progress bar.
- AC-CI-008: Skip Page button only appears on package selection sub-pages, not on Price Summary or other steps.
- AC-CI-009: Client must select at least one package total; can skip individual groups but not all.
- AC-CI-010: Personal details pre-fill from Primary Client in project.
- AC-CI-011: Changes to Personal Details are saved ONLY for this proposal and do NOT sync to Client Management.
- AC-CI-012: Event Dates appear as Step 3 before Price Summary.
- AC-CI-013: Primary event date is used for payment schedule calculations.
- AC-CI-014: Payment Schedule shows actual dates when primary event date is set, or condition text when TBD.
- AC-CI-015: Price Summary appears as Step 4 after Event Dates.
- AC-CI-016: Dynamic discount message displays in yellow banner (e.g., "10% Discount applied to packages only").
- AC-CI-017: Discount is applied before tax calculation.
- AC-CI-018: Contract displays with dynamic sections for events and payment.
- AC-CI-019: For multi-party signing, all signature blocks are visible; each client edits only their own.
- AC-CI-020: When multi-party signatures pending, error popup shows: "To continue, the contract must be signed by: [Name(s)]".
- AC-CI-021: All steps (1-4) remain editable until ALL mandatory signatures complete.
- AC-CI-022: Signatures remain valid even if another party changes package selections.
- AC-CI-023: Payment step (Step 6) is blocked until all mandatory signatures complete.
- AC-CI-024: Client cannot go back to Steps 1-4 after all signatures complete.
- AC-CI-025: Agency countersign is required after all client signatures and payment.
- AC-CI-026: Proposal status shows as Pending (sent, not opened), In Progress (opened, partially complete), Completed (payment done or agency marked), or Expired.
- AC-CI-027: ACH payments show "In Progress" status.
- AC-CI-028: Payment success screen shows receipt with download options.
- AC-CI-029: Expired proposals show expiration message and prevent completion.
- AC-CI-030: Email link access: logged-in users get direct access; not logged-in see verification popup.
- AC-CI-031: Generated link access: ALL users see verification popup regardless of login status.
- AC-CI-032: Verification popup shows brand logo, title, email input, and Submit button.
- AC-CI-033: Invalid email verification redirects to 404 page.
- AC-CI-034: Non-signatories can view all steps but cannot interact with signature fields.
- AC-CI-035: Non-signatories can make edits to Steps 1-4 and payment after all signatures.
- AC-CI-036: Blocking popup applies to both signatories and non-signatories when signatures incomplete.
10. Manual Test Cases
Manual test cases for this module are provided in a separate Excel file:
📎 File: FRD_04_Client_Side_Interaction_Test_Cases.xlsx
The test cases cover:
- Welcome screen display with correct step order
- Package selection (single and multi-group with sub-pages)
- A La Carte item selection and quantity (min 1, max 99)
- Skip Page functionality (only on package pages)
- Personal Details entry (no sync to Client Management)
- Event Dates entry (Step 3)
- Price Summary with dynamic discount message (Step 4)
- Payment Schedule with TBD condition text
- Multi-party signing flow
- Signature blocking when other signatures pending
- Editing before all signatures complete
- Agency countersign
- Payment processing (Card and ACH)
- Success screens
- Error handling
- All acceptance criteria
- Edge cases
11. Dependencies
11.1 Internal Dependencies
Dependency
Module/Feature
Type
Impact if Unavailable
Proposal Builder
Template configuration
Required
Proposal content unavailable
Packages Module
Package and pricing data
Required
Package display fails
Contracts Module
Contract template content (including multi-party config)
Required
Contract section fails
Client Management
Profile pre-fill (read-only source)
Required
Pre-fill unavailable
Invoice Module
Payment schedule, invoice data
Required
Pricing may be incomplete
11.2 External Dependencies
Dependency
Service
Type
Impact if Unavailable
Stripe API
Payment processing
Required
Cannot collect payments
Stripe Tax
Tax calculation
Optional
Use manual rate fallback
E-Signature Service
Signature capture
Required
Cannot sign contracts
PDF Generation
Invoice/Receipt download
Required
Downloads unavailable
Client Portal
Access and navigation
Required
Cannot access proposals
12. References
12.1 Figma Designs
Screen
File Name
Description
Welcome Screen
6-clientside.png
Initial welcome with steps
Package Selection
6-clientside1.png
Package cards view
Package Sub-Pages
(new)
Multi-group navigation
Package Scroll
6-clientside1-1.png
Horizontal scrolling
Package Selected
6-clientside1-2.png
Selection state
Package Details
6-clientside1-3.png
Show Details modal
Personal Details
6-clientside2.png
Contact form
Event Dates
(Step 3)
Date entry
Price Summary
(Step 4)
Pricing display with discount banner
Sign Contract
6-clientside5.png - 6-clientside5-3.png
Contract and signature
Multi-Party Signing
(new)
Multiple signature blocks
Initial Payment
6-clientside6.png
Payment form
Payment Success
6-clientside6-1.png
Success screen
12.2 Related FRDs
FRD
Module
Relationship
FRD #2
Proposal Builder
Template source, discount config
FRD #3
Proposal Usage
How proposal is shared, status tracking
FRD #5
Impact on Project
Post-completion updates (no client sync)
Packages Module FRD
Packages
Package content source
Invoice Module FRD
Invoices
Payment terms source
Contract Module FRD
Contracts
Multi-party signing config
Client Portal FRD
Portal
Access and navigation
12.3 Source Documents
Document
Reference
Module Logic Explanation
Proposal Module Dec 15 2025.pdf (21:00 - 38:00)
Historical Context
Proposal-Module-185d8b98-5a32.json
Update Screenshots
April 2026 screenshots showing Event Dates step order, multi-party signing
End of FRD #4: Client-Side Interaction
✅ 5. Impact on Project
Functional Requirements Document
FRD #5: Impact on Project
Document Version: 1.7
Created Date: December 16, 2025
Last Updated: April 17, 2026 | 04:30 PM IST
Module: Proposal Impact on Project (Project Management Integration)
Platform: Pixally CRM - Agency Portal
Status: Draft
Change Log
Version
Date
Time
Author
Changes
1.7
April 17, 2026
04:30 PM IST
Claude AI
(1) Override boundary changed from stage-based to payment-based: override allowed through "Proposal Signed" (unpaid), stops at "Deposit Paid"; (2) Full 9-stage pipeline documented; (3) Added Rule 4 Primary Event override (package primary replaces existing); (4) Manual events follow same rules, default to Lead
1.6
April 17, 2026
04:00 PM IST
Claude AI
FIX: Added missing Event Override Rules (§4.1.4), Override Scenarios A-F (§4.1.5), Naming Convention (§4.1.6), Additional Scenarios (§4.1.7) that failed to save in prior versions; fixed duplicate §4.1.3 numbering; removed duplicate acceptance criteria
1.5
April 17, 2026
03:30 PM IST
Claude AI
(1) Detailed event mismatch warning with exact message text; (2) Warning location: Event tab indicator + Services tab banner; (3) Clarified scenarios for existing events with suffix + new proposal; (4) Multiple mismatched events each show warning
1.4
April 17, 2026
03:00 PM IST
Claude AI
Primary Event date change, fully paid invoices locked, partially paid editable, new invoices after event passed
1.3
April 17, 2026
01:15 PM IST
Claude AI
Event override logic, multi-package naming, pipeline stages
1.2
April 17, 2026
12:30 PM IST
Claude AI
Invoice timing, naming, TBD format, countersign before payment
1.1
April 17, 2026
11:20 AM IST
Claude AI
No client sync, countersign requirement, event date edits
1.0
December 16, 2025
-
Claude AI
Initial FRD creation
Table of Contents
- Module Overview
- User Roles & Permissions
- User Flow
- Functional Logic
- Field Details & Validations
- Success Message Handling
- Error Message Handling
- Edge Cases
- Acceptance Criteria
- Manual Test Cases
- Dependencies
- References
1. Module Overview
1.1 Purpose
The Impact on Project module defines how completed proposals affect project records within the Pixally CRM system. This includes automatic event creation, data population from proposal selections, deliverable generation from package line items, client profile synchronization, invoice generation, and pipeline automation triggers.
1.2 Business Goals
The Impact on Project module aims to achieve the following business objectives:
- Automate project setup based on client's proposal selections to reduce manual data entry.
- Ensure accurate event and service creation from proposal data for efficient project management.
- Maintain data integrity between proposal selections and project configuration throughout the project lifecycle.
- Support workflow automation through pipeline status updates triggered by proposal milestones.
- Provide clear handling of event mismatches between proposals and existing project data.
- Enable seamless transition from signed proposal to active project execution.
1.3 Scope
This FRD covers the following functionality:
- Automatic event creation from proposal
- Event matching and override logic
- Event mismatch warnings and resolution
- Service population from packages
- Deliverable creation from line items
- Client profile synchronization
- Automatic invoice generation
- Pipeline automation triggers
- Signed proposal access and storage
1.4 Out of Scope
The following items are not covered in this FRD:
- Proposal template creation (covered in FRD #1 and #2)
- Proposal sharing and tracking (covered in FRD #3)
- Client-side completion flow (covered in FRD #4)
- General Project Management functionality (covered in Project Management FRD)
- Invoice management details (covered in Invoice Module FRD)
2. User Roles & Permissions
2.1 Role-Based Access Matrix
Permission
Agency Owner
Agency Admin
Team Member
Client
Contractor
View Project Events
✅
✅
✅ (assigned)
❌
✅ (assigned)
Manage Events (Create/Edit)
✅
✅
✅ (assigned)
❌
❌
Delete Events
✅
✅
❌
❌
❌
Keep Event Active
✅
✅
✅ (assigned)
❌
❌
View Signed Proposal
✅
✅
✅ (assigned)
✅
❌
Download Signed Proposal
✅
✅
✅ (assigned)
✅
❌
Override Proposal Data
✅
✅
❌
❌
❌
View Auto-Generated Invoice
✅
✅
✅ (assigned)
✅
❌
2.2 Permission Notes
- Team Members can view and manage events for projects they are assigned to but cannot delete events.
- Only Agency Owner and Agency Admin can delete events or override proposal data.
- Clients can view and download their signed proposal and invoice through the Client Portal.
- Contractors can view project events they are assigned to but cannot modify proposal-generated data.
3. User Flow
3.1 Proposal Completion Triggers Project Updates
- Client completes all 6 steps of the proposal (FRD #4).
- System marks proposal as "Completed".
- System automatically processes proposal data.
- System creates/updates events in Project Details based on selected packages.
- System creates services within events from package line items.
- System creates deliverables from line items marked as deliverable.
- System stores personal details entered (proposal-specific, NOT synced to Client Management).
- System generates invoice matching proposal amounts.
- If pipeline automation enabled, system updates event statuses.
- Agency user can view all updates in Project Details.
3.2 Handling Event Mismatch Warning
- Agency user navigates to Project Details after proposal completion.
- System identifies events in project that don't exist in signed proposal.
- System displays warning indicator on affected event tab.
- User clicks on the event tab.
- System displays warning banner in Services section.
- User reads the warning message explaining the mismatch.
- User decides to either:
- Click "Delete Event" to remove the orphaned event, OR
- Click "Keep Event Active" to dismiss warning and retain the event.
3.3 Viewing Signed Proposal in Project
- Agency user navigates to Project Details.
- User clicks on Files/Documents tab.
- User locates the signed proposal document.
- User can view or download the PDF.
- Signed contract is also available in this location.
3.4 Client Accessing Signed Proposal
- Client logs into Client Portal.
- Client navigates to their project.
- Client accesses Documents section.
- Client views or downloads signed proposal and contract.
4. Functional Logic
4.1 Automatic Event Creation
4.1.1 Event Source
Events are created based on the packages selected by the client during proposal completion. Each unique event type defined in the selected packages generates a corresponding event in Project Details.
4.1.2 Pipeline Stages & Override Boundary
The system organizes events into three stage groups. Override eligibility is determined by payment, not the stage group alone — override is allowed as long as NO payment has been made (through the "Proposal Signed" stage). Once any payment is made ("Deposit Paid" onward), a new event is created instead.
Stage Group
Sub-Stage
Override Behavior
New Lead
New Lead
✅ Override
New Lead
Follow-up
✅ Override
New Lead
Proposal Sent
✅ Override
Booked
Proposal Signed (unpaid)
✅ Override
Booked
Deposit Paid
❌ Create new
Booked
Planning
❌ Create new
Post-Event
Post Production
❌ Create new
Post-Event
Completed
❌ Create new
Post-Event
Archived
❌ Create new
Override Boundary Rule: Override is permitted up to and including "Proposal Signed" (signed but unpaid). The boundary is crossed at "Deposit Paid" — once any payment (even partial/deposit) is made, the event is no longer overridden.
4.1.3 Event Matching Logic
The system compares proposal events with existing project events:
Scenario
System Behavior
Proposal event matches existing event AND no payment made
Proposal data overrides existing event
Proposal event matches existing event BUT payment made
New event created with numbered suffix
Proposal has event not in project
System creates new event tab in Project Details
Project has event not in proposal
Warning displayed to user with options (keep/delete)
A La Carte "Event" type item selected
Creates new event if not already existing
Name Matching: Event matching is NOT case-sensitive. "Wedding" matches "wedding" and "WEDDING".
Manual vs Auto Events: Manually-created events follow the SAME override rules as lead-form auto-created events. Manual events default to the "Lead" stage.
4.1.4 Event Override Rules
Rule 1 — Matching Event, No Payment Made (Override)
- Applies when existing event is in New Lead stages OR "Proposal Signed" (unpaid)
- Proposal event data OVERRIDES the existing event completely
- Event details (date, services, etc.) are updated from the proposal
- No new event is created
Rule 2 — Matching Event, Payment Made (Create New)
- Applies when existing event is at "Deposit Paid" or later (any payment made)
- Existing event is NOT overridden (remains unchanged)
- A new event is created with a numbered suffix: " (2)", " (3)", etc.
Rule 3 — Same Event in Multiple Packages (within same proposal)
- If the client selects the same event type in 2+ packages, multiple events are created
- First: "Wedding"; Second: "Wedding (2)"; Third: "Wedding (3)"
Rule 4 — Primary Event Override
- The package's designated primary event always becomes the project's Primary Event
- This replaces any existing Primary Event flag (old primary becomes non-primary)
- When creating packages, the user marks one event as primary; selecting that package makes it the project primary
- If multiple packages are selected, the client can choose which event is primary
4.1.5 Event Override Scenarios
#
Existing Event
State
Proposal Selection
Result
A
Wedding
Unpaid (Lead / Proposal Signed)
Wedding (1 package)
Override existing → Wedding (1 event)
B
Wedding
Paid (Deposit Paid+)
Wedding (1 package)
Keep + Create → Wedding, Wedding (2)
C
Wedding
Post-Event
Wedding (1 package)
Keep + Create → Wedding, Wedding (2)
D
None
N/A
Wedding (2 packages)
Create both → Wedding, Wedding (2)
E
Wedding
Unpaid
Wedding (2 packages)
Override + Create → Wedding, Wedding (2)
F
Wedding
Paid
Wedding (2 packages)
Keep + Create 2 → Wedding, Wedding (2), Wedding (3)
4.1.6 Event Naming Convention
When multiple events of the same type exist:
First event: Wedding
Second event: Wedding (2)
Third event: Wedding (3)
Fourth event: Wedding (4)
Notes:
- The first event does NOT have a number suffix
- Numbering starts at (2) for the second instance
- Numbers are sequential regardless of which packages they come from
4.1.7 Additional Override Scenarios
Existing "Wedding" + "Wedding (2)" + Proposal adds Wedding:
Existing Events State
Proposal Adds
Result
Both unpaid
Wedding
Override one → Wedding, Wedding (2)
Both paid
Wedding
Create new → Wedding, Wedding (2), Wedding (3)
Multiple Events in Different States (each follows its own rule):
Existing Event
State
Proposal Has Same?
Result
Wedding
Unpaid
Yes
Override Wedding
Rehearsal Dinner
Paid
Yes
Keep + Create "Rehearsal Dinner (2)"
4.1.8 Event Data Population
When events are created or updated from proposal:
Field
Source
Event Name
Package event configuration
Event Date
Client input from Step 4 (or "TBD" if no definite date)
Primary Event Flag
Package configuration
Services
Package line items grouped by service type
4.2 Event Mismatch Warning
4.2.1 Warning Trigger
The warning appears when the project contains events that do not appear in the signed proposal. This typically occurs when:
- Lead form created default events based on inquiry
- Client selected packages that don't include those events
- Manual events were added before proposal completion
4.2.2 Warning Display Location
- Event Tab: Warning icon (⚠️) appears next to event name in tab bar
- Tab Tooltip: "This event may no longer be needed. Please check message inside Services tab."
- Services Section: Full warning banner displayed within the event's Services tab
4.2.3 Warning Banner Content
Visual: Orange/red bordered card with warning icon (⚠️)
Title: "This event may no longer be needed."
Body Text: "This [Event Name] 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."
Action Buttons:
- "Delete Event" (red/orange button): Permanently removes the event
- "Keep Event Active" (outline/white button): Dismisses warning, keeps event
4.2.4 Delete Event Action
When user clicks "Delete Event":
- Confirmation prompt may appear (TBD)
- Event is permanently removed from project
- All associated data is deleted: Services, Files, Documents, Notes
- Warning is removed from project
- Action is logged in project activity
Important Advisory: Warning message advises user to copy any important notes or files to another event before deletion.
4.2.5 Keep Event Active Action
When user clicks "Keep Event Active":
- Warning banner is dismissed
- Warning icon removed from event tab
- Event remains in project
- No data is modified
- User's decision is recorded (for audit)
4.3 Service Population
4.3.1 Service Creation Logic
Services are created within events based on selected package line items:
- Each service type in the package (Photography, Videography, etc.) creates a service entry
- Services are grouped under the appropriate event
- Line items from packages populate the service details
4.3.2 Service Display
Services Tab Structure:
- "Services +" header with add button for manual additions
- Service cards for each service type:
- Service type name (e.g., "Photography")
- "Assign Contractors" button
- "Edit Service" button
- Delete icon (for Admin/Owner only)
- Service-specific line items and details
4.4 Deliverable Creation
4.4.1 Deliverable Logic
Line items in packages that have the "Deliverable" toggle enabled create post-production tasks:
Line Item Setting
Result
Deliverable: ON
Creates deliverable task
Deliverable: OFF
No deliverable created
4.4.2 Deliverable Data
Each deliverable includes:
- Name: Line item name (e.g., "Basic Retouch")
- Description: Line item description
- Quantity: From line item quantity setting
- Due Date: Calculated as Event Date + configured days
4.4.3 Due Date Calculation
Deliverable Due Date = Event Date + [Due Days from Line Item]
Example:
- Line item: "Basic Retouch" with Due: 10 Days after event
- Event Date: August 25, 2025
- Deliverable Due Date: September 4, 2025
If event has "no definite date", deliverable due date is TBD until event date is set.
4.5 Client Profile Data Handling (IMPORTANT CHANGE)
4.5.1 NO Automatic Sync to Client Management
IMPORTANT: Personal details entered by the client during proposal completion are NOT synced to Client Management. This is a deliberate design decision.
Proposal Field
Client Management
Behavior
First Name
❌ NOT synced
Proposal-only
Last Name
❌ NOT synced
Proposal-only
Email address
❌ NOT synced
Proposal-only
Contact Number
❌ NOT synced
Proposal-only
Address (full)
❌ NOT synced
Proposal-only
4.5.2 Data Storage Rules
- Personal Details entered during proposal are stored only with that proposal
- The client's master profile in Client Management remains unchanged
- No new client record is created from proposal data
- Data is displayed in "Information Collected → Personal Details" tab for agency reference
- If client needs to update their master profile, they must do so through Client Portal settings
4.5.3 Rationale
This approach:
- Prevents accidental overwrites of verified client data
- Allows clients to enter proposal-specific contact info (e.g., different address)
- Maintains data integrity in Client Management
- Gives agencies control over when client profiles are updated
4.6 Automatic Invoice Generation
4.6.1 Invoice Creation Trigger
Invoice is automatically generated when all mandatory client signatures are complete (BEFORE payment, BEFORE countersign).
Trigger: All mandatory signatures complete on proposal NOT triggered by: Payment or agency countersign
4.6.2 Invoice Properties
Property
Value
Naming Convention
[BRAND_INITIALS]-INV-[UNIX_TIMESTAMP]
Example
ZEN-INV-1769593092
Status
Unpaid (initial status)
Structure
Single invoice with all payment milestones
Project Link
Same project as proposal
Total Amount
Matches proposal total
Payment Schedule
From proposal payment terms
4.6.3 Invoice Content
The auto-generated invoice includes:
- Line items from selected packages
- A La Carte items selected by client
- Tax amount (calculated per proposal settings)
- Discount amount (if applied)
- Payment schedule with dates or TBD conditions
Payment Schedule Display:
- If event date set: Shows actual calculated dates (e.g., "June 18, 2025")
- If event date TBD: Shows "TBD - [X] [unit] before event" (e.g., "TBD - 3 days before event")
- If custom/fixed date: Shows exact date (no TBD prefix)
4.6.4 Invoice Location
Invoice appears in:
- Project Details → Files and Documents (primary location)
- Finance → Billing → Invoices (agency view)
- Client Portal → Invoices (client view)
- Linked from "View Invoice" in proposal Step 6
4.6.5 Primary Event Date Changes & Invoice Impact
When the Primary Event date is changed (via Project Details or proposal override):
Recalculation Rules:
Milestone Status
Behavior
Paid milestones
❌ NOT changed (remain as-is)
Unpaid/Future milestones
✅ Recalculated based on new date
Example:
- Original Event: June 15, 2025
- Payment Schedule: $200 (paid), $300 (30 days before event - unpaid)
- Event changed to: July 20, 2025
- Result: $200 remains unchanged; $300 recalculates to June 20, 2025
Notification:
- Client is notified via email AND in-app notification when milestone dates change
- Notification includes old dates and new dates
4.7 Invoice Edit Rules
4.7.1 Fully Paid (Completed) Invoices
Once an invoice is fully paid:
Action
Allowed?
Edit line items
❌ No
Edit payment schedule
❌ No
Delete invoice
❌ No
Partial refund
✅ Yes
Full refund
✅ Yes
Add new charges
❌ No (create new invoice)
Refund Process:
- Available from Invoice view and Finance → Billing
- Refund processed based on original payment method
- Follows payment schedule (if multiple milestones)
Additional Charges After Full Payment:
- Requires creating a NEW invoice manually
- Cannot modify the completed invoice
4.7.2 Partially Paid Invoices
Invoices with any pending balance can still be edited:
Action
Allowed?
Edit unpaid line items
✅ Yes
Add new line items
✅ Yes
Remove unpaid items
✅ Yes
Change unpaid payment schedule
✅ Yes
Modify paid portions
❌ No
Adding Charges After Event Date Passed:
If a new deliverable/charge is added after the event date has passed:
Scenario
Behavior
Payment date in past
❌ Error: "Payment date cannot be in the past. Please select a current or future date."
Payment date current/future
✅ Allowed
User must create a new payment schedule entry with a future date for the new charge.
4.7.3 New Invoices After Primary Event Passed
When creating a new invoice after the Primary Event has already occurred:
Auto-Applied Presets:
- Payment schedule presets (from templates) are NOT auto-applied
- User must set up the schedule manually
"Before/After Event Date" Option:
- This option is greyed out (disabled)
- Tooltip/Message: "Event has already passed. Please select a specific date or use invoice date options."
Available Payment Schedule Options:
Option
Available?
Before Event Date
❌ Greyed out
After Event Date
❌ Greyed out
On Event Date
❌ Greyed out
Specific Date (current/future)
✅ Available
Relative to Invoice Date (e.g., Net-30)
✅ Available
Custom Payment Plan
✅ Available
Invoice Date Relative Options:
- Net-15 (15 days from invoice date)
- Net-30 (30 days from invoice date)
- Net-60 (60 days from invoice date)
- Custom (user-defined days)
4.7.4 Client Notification on Invoice Changes
When an invoice is edited (for partially paid invoices):
Notification Type
Triggered?
Email notification
✅ Yes
In-app notification
✅ Yes
Notification Content:
- Invoice has been updated
- Summary of changes (if applicable)
- Link to view updated invoice
Client View:
- "View Invoice" immediately shows the updated version
- No cached/old version displayed
4.6.6 Receipt Handling
After payment is completed:
- Receipt is generated automatically
- Receipt is sent to client via email only
- Receipt does NOT appear in Project → Files and Documents
- Only invoice file remains in Files listing
4.7 Pipeline Automation
4.7.1 Automation Trigger
When pipeline automation is enabled in agency settings, proposal milestones trigger automatic status updates.
Trigger Condition: Proposal Signed + First Payment Received
4.7.2 Automation Actions
Trigger
Action
Contract signed AND first payment received
Event status updates to next pipeline stage
Multiple events in project
All linked events update simultaneously
4.7.3 Pipeline Stage Update
The specific stage transition depends on agency's pipeline configuration:
- Example: "Inquiry" → "Booked"
- Example: "Proposal Sent" → "Contracted"
Exact stages are configurable per agency.
4.7.4 Notification Recipients
When pipeline automation executes:
- Client is notified: Confirmed
- Agency Owner is notified: Confirmed
- Other roles: TBD
4.8 Signed Proposal Access
4.8.1 Agency Access
Location: Project Details → Files/Documents tab
Available Documents:
- Signed Proposal PDF
- Signed Contract PDF
- Invoice(s)
Actions: View, Download, Share
4.8.2 Client Access
Location: Client Portal → Project → Documents
Available Documents:
- Signed Proposal PDF
- Signed Contract PDF
- Invoice(s)
- Receipts
Actions: View, Download
4.8.3 Email Delivery
Upon completion, system sends to client:
- Confirmation email
- Signed proposal PDF attachment (or link)
- Signed contract PDF attachment (or link)
- Receipt for payment
4.9 Post-Signing Rules
4.9.1 Countersign Requirement
After all client signatures are complete (payment NOT required):
- Invoice is automatically generated (Unpaid status)
- Agency countersign is required for full contract execution
- "Countersign" button appears in Project Details → Files activity section immediately
- Agency user clicks to complete the countersign
- Client can then proceed to payment (Step 6)
- Contract is fully executed after countersign
Key Point: Agency can countersign BEFORE client makes payment. Payment is not a prerequisite for countersign.
Alternative - Cash Payment:
- Client may pay in cash or via separate arrangement
- Agency marks invoice as "Paid" manually in Finance → Billing
- Proposal status updated to "Completed"
4.9.2 Proposal Lock
Once signed, the proposal cannot be edited or modified. The proposal data becomes a permanent record. Status remains "Completed" permanently.
Exception - Event Dates: Agency CAN edit event dates in Project Details after proposal completion. This allows for date changes that may occur after booking.
4.9.2 Adding Additional Services
After proposal is signed:
- New proposals cannot be sent for the same project phase
- Additional services must be added via new invoices
- New invoices do not alter the signed proposal
- Services added via invoice appear in Project Details
- Original proposal record remains unchanged
4.9.3 Contract Integrity
The signed contract is legally binding and preserved:
- E-signature with timestamp retained
- Contract content immutable
- Available for legal reference
- Audit trail maintained
4.10 A La Carte Event Creation
If client selects an A La Carte item that is of type "Event":
- System checks if that event already exists in project
- If not exists, system creates the event
- If exists, event information may be updated
- This follows the same matching logic as package events
5. Field Details & Validations
5.1 Event Warning Display
Field
Type
Description
Warning Icon
Icon (⚠️)
Displays on event tab
Warning Banner
Card
Orange/red bordered container
Event Name
Dynamic Text
Inserted into warning message
Delete Event Button
Action Button
Red/orange styling
Keep Event Active Button
Action Button
Outline/white styling
5.2 Auto-Created Event Fields
Field
Source
Notes
Event Name
Package Configuration
As defined in package
Event Date
Client Input (Step 4)
Or "TBD" if no definite date
Primary Event Flag
Package Configuration
Boolean
Services
Package Line Items
Grouped by service type
5.3 Auto-Generated Invoice Fields
Field
Source
Notes
Invoice Number
System Generated
Unique identifier
Invoice Date
Completion Date
Date proposal completed
Due Dates
Payment Schedule
From proposal terms
Line Items
Selected Packages + Add-ons
Itemized list
Subtotal
Calculated
Sum of items
Discount
Proposal Settings
Amount and percentage
Tax
Proposal Settings
Calculated amount
Total
Calculated
Final amount
Status
System
Initially "Unpaid"
5.4 Client Profile Sync Fields
Proposal Field
Profile Field
Sync Direction
First Name
first_name
Proposal → Profile
Last Name
last_name
Proposal → Profile
primary_email
Proposal → Profile
Phone
primary_phone
Proposal → Profile
Address Line 1
address.line1
Proposal → Profile
Address Line 2
address.line2
Proposal → Profile
City
address.city
Proposal → Profile
State
address.state
Proposal → Profile
Postal Code
address.postal
Proposal → Profile
Country
address.country
Proposal → Profile
6. Success Message Handling
Action
Success Message
Display Type
Duration
Post-Success Behavior
Event Created (auto)
None (silent)
N/A
N/A
Event tab appears in Project Details
Event Deleted
"Event deleted successfully"
Toast notification
3 seconds
Event tab removed; Warning dismissed
Keep Event Active
None (warning dismissed)
N/A
N/A
Warning banner removed; Event remains
Invoice Generated (auto)
None (silent)
N/A
N/A
Invoice appears in Finance section
Pipeline Updated (auto)
None (silent)
N/A
N/A
Event status changes in pipeline view
Client Profile Synced (auto)
None (silent)
N/A
N/A
Profile updated in Client Management
7. Error Message Handling
Error Scenario
Error Message
Display Type
Trigger Condition
User Action Required
Event creation failed
"Unable to create event. Please contact support."
Toast notification
Database error
Contact support
Invoice generation failed
"Invoice could not be generated automatically. Please create manually."
Toast notification
System error
Create invoice manually in Finance
Pipeline update failed
"Pipeline status could not be updated. Please update manually."
Toast notification
Automation error
Manually update status
Event deletion failed
"Unable to delete event. Please try again."
Toast notification
Database error
Retry deletion
Client sync failed
"Client profile could not be updated. Please verify manually."
Toast notification
Sync error
Check Client Management
Deliverable creation failed
"Some deliverables could not be created. Please add manually."
Toast notification
System error
Add deliverables manually
8. Edge Cases
Edge Case
System Behavior
Proposal has same event name twice (from different packages)
Creates single event; Merges services from both packages (TBD - may create duplicates).
Client selected packages from multiple service types
Creates separate service entries for each type within appropriate events.
All events have "no definite date"
Events created with TBD status; Dates must be added manually later; Deliverable due dates also TBD.
Package line item has deliverable disabled
No deliverable created; Service line item only.
Agency has pipeline automation disabled
No automatic status update; Manual pipeline management required.
Very large proposal (10+ packages selected)
All events created; May impact initial load time; Consider async processing.
Client completes proposal but payment fails later
Events and data still created on contract sign; Payment tracked separately; Invoice shows unpaid.
Multiple proposals signed (edge case - shouldn't happen)
First signed proposal takes precedence; System prevents duplicate signing.
Project deleted while proposal active
Proposal becomes orphaned; Cleanup process handles (TBD).
Event name matches but different service type
Treats as same event; Services merged under single event.
Deliverable due date calculation on TBD event
Deliverable created with TBD due date; Updates when event date is set.
Client profile has conflicting data
Proposal data wins; Overwrites existing profile fields.
9. Acceptance Criteria
- AC-IP-001: Events from selected packages are automatically created in Project Details upon proposal completion.
- AC-IP-002: Event name matching is case-insensitive ("Wedding" = "wedding").
- AC-IP-003: Matching events have their data overridden by proposal data.
- AC-IP-004: New events (in proposal but not in project) are created automatically.
- AC-IP-005: Orphaned events (in project but not in proposal) display warning message.
- AC-IP-006: Warning banner shows in Services tab of affected event.
- AC-IP-007: Warning icon (⚠️) appears on event tab.
- AC-IP-008: Users can delete orphaned events using "Delete Event" button.
- AC-IP-009: Users can dismiss warning using "Keep Event Active" button.
- AC-IP-010: Services are populated based on selected package service types.
- AC-IP-011: Deliverables are created for line items marked as deliverable.
- AC-IP-012: Deliverable due dates are calculated from event date plus configured days.
- AC-IP-013: Client profile is updated with personal details from proposal.
- AC-IP-014: Invoice is automatically generated matching proposal amounts.
- AC-IP-015: Auto-generated invoice status is "Unpaid".
- AC-IP-016: Payment schedule in invoice matches proposal payment terms.
- AC-IP-017: Pipeline automation updates event status when enabled (on signing + payment).
- AC-IP-018: Personal Details from proposal do NOT sync to Client Management (proposal-specific only).
- AC-IP-019: Agency countersign is required after all client signatures and payment for full contract execution.
- AC-IP-020: Agency can edit event dates in Project Details after proposal completion.
- AC-IP-021: Matching events are overridden when no payment has been made (through "Proposal Signed" stage).
- AC-IP-022: Matching events are NOT overridden once payment is made ("Deposit Paid" onward); new event created with suffix.
- AC-IP-023: Same event in multiple packages creates numbered events: Wedding, Wedding (2), Wedding (3).
- AC-IP-024: Primary Event date change only recalculates future/unpaid milestones; paid milestones unchanged.
- AC-IP-025: Fully paid invoices are locked and cannot be edited; refunds available.
- AC-IP-026: Partially paid invoices can be edited; new charges require future payment dates.
- AC-IP-027: Past payment date shows error: "Payment date cannot be in the past. Please select a current or future date."
- AC-IP-028: New invoices after event passed: "before/after Event" options greyed out with message.
- AC-IP-029: Client notified via email AND in-app when invoice is edited or milestones change.
- AC-IP-030: Event mismatch warning displays after proposal signed when existing event not in proposal.
- AC-IP-031: Warning shows on event tab (⚠️ icon) and in Services tab (orange banner).
- AC-IP-032: "Delete Event" permanently removes event after confirmation.
- AC-IP-033: "Keep Event Active" permanently dismisses warning.
- AC-IP-034: Multiple mismatched events each show warning on their own Services tab.
- AC-IP-035: Signed proposal is accessible in Project Files/Documents.
- AC-IP-036: Signed proposal is accessible to client in Client Portal.
- AC-IP-037: Additional services must be added via invoices/manual entry after proposal signing.
- AC-IP-038: Proposal remains locked and uneditable after signing.
- AC-IP-039: A La Carte "Event" type items create events if not existing.
- AC-IP-040: Package's primary event becomes the project Primary Event, replacing any existing primary flag.
- AC-IP-041: With multiple packages, client can choose which event is primary.
- AC-IP-042: Manually-created events follow the same override rules and default to Lead stage.
10. Manual Test Cases
Manual test cases for this module are provided in a separate Excel file:
📎 File: FRD_05_Impact_on_Project_Test_Cases.xlsx
The test cases cover:
- Automatic event creation
- Event matching and override
- Event mismatch warning display
- Delete Event and Keep Active actions
- Service population
- Deliverable creation and due date calculation
- Client profile sync
- Invoice generation
- Pipeline automation
- Document access
- All acceptance criteria
- Edge cases
11. Dependencies
11.1 Internal Dependencies
Dependency
Module/Feature
Type
Impact if Unavailable
Project Management
Project structure and events
Required
Cannot create events or update project
Invoice Module
Invoice creation and management
Required
Cannot generate invoice automatically
Client Management
Client profile storage
Required
Cannot sync client data
Pipeline Management
Status automation
Optional
No automatic status updates
Post-Production
Deliverable management
Required
Cannot create deliverables
Files/Documents
Document storage
Required
Cannot store signed proposal/contract
11.2 External Dependencies
Dependency
Service
Type
Impact if Unavailable
PDF Generation
Document service
Required
Cannot generate signed documents
Email Service
Notification delivery
Required
Cannot send completion confirmations
Database Service
Data persistence
Required
Cannot save any updates
12. References
12.1 Figma Designs
Screen
File Name
Description
Event Warning
10-projectdetail.png
Warning banner in Services tab
Event Tab Warning
10-projectdetail.png
Warning icon on tab
Proposal in Project
7-propusage.png series
Proposal section in project
12.2 Related FRDs
FRD
Module
Relationship
FRD #1
Proposal Listing
Source templates
FRD #2
Proposal Builder
Template configuration
FRD #3
Proposal Usage
Pre-completion tracking
FRD #4
Client-Side
Data source from client
Project Management FRD
Projects
Target for updates
Invoice Module FRD
Invoices
Auto-generated invoice
Pipeline Management FRD
Pipeline
Automation trigger
Post-Production FRD
Deliverables
Deliverable creation
12.3 Source Documents
Document
Reference
Module Logic Explanation
Proposal Module Dec 15 2025.pdf (38:00 - 51:30)
Historical Context
Proposal-Module-185d8b98-5a32.json
Appendix A: Event Sync Logic Flowchart
Proposal Completed
│
▼
┌──────────────────┐
│ For each event │
│ in proposal │
└────────┬─────────┘
│
▼
┌──────────────────────────────┐
│ Event exists in project? │
│ (case-insensitive match) │
└────────┬─────────────────────┘
│
┌────┴────┐
│ │
YES NO
│ │
▼ ▼
┌────────┐ ┌────────────┐
│Override│ │Create New │
│ Data │ │ Event │
└────────┘ └────────────┘
│
▼
┌──────────────────────────────┐
│ Check for orphaned events │
│ (in project, not in proposal)│
└────────┬─────────────────────┘
│
▼
┌──────────────────────────────┐
│ Display warning for each │
│ orphaned event │
└──────────────────────────────┘
Appendix B: Deliverable Due Date Examples
Event Date
Line Item Due Setting
Calculated Due Date
Aug 25, 2025
10 Days after event
Sep 4, 2025
Aug 25, 2025
2 Weeks after event
Sep 8, 2025
Aug 25, 2025
1 Month after event
Sep 25, 2025
TBD
10 Days after event
TBD
Document Revision History
Version
Date
Author
Changes
1.2
April 17, 2026
Claude AI
Invoice timing, naming, TBD format, countersign before payment
1.1
April 17, 2026
Claude AI
No client sync, countersign requirement, event date edits
1.0
December 16, 2025
Claude AI
Initial FRD creation
End of FRD #5: Impact on Project
No tickets linked — generate test cases directly from this FRD instead.