Installation
- Upload the
proposal-system folder to /wp-content/plugins/
- Activate the plugin through the Plugins menu in WordPress
- Go to Proposals > Settings to configure general options, email design, and (for Premium) Invoice Ninja integration
- Client Portal (optional): Create a page and add the shortcode
[proposal_client_portal]. In Proposals > Settings, set the Client Portal page so the plugin can link to it.
Configuration
All plugin settings are under Proposals > Settings. Settings are organized into tabs:
General Tab
- Default currency: Global currency for new proposals (e.g., USD, EUR)
- Default language: Default locale for proposal text
- Terms and conditions: See Terms & Conditions
- Version cleanup: Limit versions per proposal and auto-cleanup
Invoice Ninja Setup (Integrations Tab)
- Navigate to Proposals > Settings > Integrations
- Enter your Invoice Ninja instance URL (e.g.,
https://invoiceninja.example.com)
- Enter your Invoice Ninja API token
- Set a webhook secret key for secure webhook communication
- Configure the webhook URL in Invoice Ninja:
https://yoursite.com/proposal-system/webhook/
Creating a Proposal
- Go to Proposals > Add New
- Enter proposal title and description
- Fill in client information (name, email, company)
- Select existing client from dropdown or enter manually
- For clients with multiple contacts, choose which contact to use
- Use the Proposal Builder to add service options:
- Click "Add Option" to create a new service option
- Or click "Add from Library" to select from your reusable options library
- Or click "Use Template" to apply a pre-configured template (Premium)
- Enter name, description, and price (monthly for recurring, single for one-time)
- Set default quantity, quantity unit, and SKU
- Mark options as required if they must be included
- Mark as one-time fee if it should be billed separately
- Configure billing settings:
- Enable recurring billing (monthly, quarterly, yearly)
- Set expiration date
- Select currency (default or per-proposal)
- Select language (default or per-proposal)
- Configure PDF settings (optional):
- Choose PDF template (Default, Minimal, Modern, Classic)
- Customize colors, fonts, and layout
- Set content visibility options
- Set proposal status and generate access token
- Publish the proposal
Options Library
Build a reusable library of line items (service options) and add them to any proposal with one click.
Managing the Library
- Go to Proposals > Options Library
- Add item: Name, description, base price, default quantity, quantity unit (e.g., Per Hour, Per User), SKU, required flag, one-time fee flag
- Edit or delete items from the list
- Use categories to organize items
Using the Library in Proposals
- In the proposal builder, click Add from Library
- Select one or more items and add them; all fields (name, description, price, quantity, unit, SKU, required, one-time fee) are copied into the proposal
- You can still edit any option after adding it
Terms & Conditions
Configure separate terms for single-invoice and recurring-invoice proposals. Clients must accept the applicable terms before accepting a proposal.
Where to Configure
- Go to Proposals > Settings > General
- Use the rich text editors for Terms for single invoices and Terms for recurring invoices
Behavior
- If terms are set, a scrollable terms section and a required acceptance checkbox appear on the proposal frontend
- Acceptance is validated before the client can complete the acceptance flow
- Which terms block is shown depends on whether the proposal has recurring billing
Access Control
Proposals can be viewed in two ways: by secure token link or via the Client Portal (logged-in users).
Token-Based Access
- When you send a proposal, use the Proposal Link (or copy link) from the proposal edit screen
- The URL includes a unique token so only someone with the link can view the proposal
- No WordPress login required; ideal for emailing links to clients
- Optional: set token expiry in settings
Client Portal Access
- Clients linked to WordPress user accounts can log in and see their proposals under the Client Portal
- See Client Portal for setup (user linking, shortcode)
Access Logging
- Each view is logged (token, login, or admin). Use View History & Analytics in the proposal edit screen to see who viewed and when.
View History & Analytics
See who viewed each proposal and when, with basic statistics.
Where to Find It
- Open any proposal and find the View History meta box (usually in the sidebar)
What You See
- View list: Each view with date/time, IP, user agent, and access type (token, login, admin)
- Statistics: Total views, unique IPs, unique users, first view, last view, breakdown by access type
Dashboard Widget
On the WordPress dashboard, the plugin adds a widget with an overview of proposals and sync status.
Proposal Statistics
- Counts for Draft, Sent, Accepted, and Declined proposals
Pending Proposals
- List of sent/viewed proposals with expiration dates and time remaining
- Color cues (e.g., green/orange/red) by urgency
- Last email sent date per proposal
Client Sync (Premium)
- Sync status and next scheduled sync time
- Recent sync history (last syncs with status and client counts)
PDF Generation
Generate professional PDF documents from your proposals with extensive customization options.
PDF Templates
- Default: Clean, professional layout with balanced spacing
- Minimal: Simple, elegant design with minimal styling
- Modern: Contemporary design with bold typography
- Classic: Traditional business document style
Customization Options
- Logo positioning and sizing (small, medium, large, custom)
- Brand colors (primary, secondary, accent)
- Typography (font family, base size, heading size)
- Page settings (A4, Letter, Legal; portrait/landscape; margins)
- Content visibility (company details, client address, proposal number, expiration, terms, footer)
- Custom footer text with HTML support
- Watermark support (text with adjustable opacity)
Using PDFs
- Generate PDF from proposal edit screen
- Batch generate PDFs for multiple proposals
- Attach PDF to proposal emails automatically
- PDF caching for improved performance (configurable 1-30 days)
- Export specific proposal versions as PDF
Proposal Versioning
Track all changes to your proposals with complete version control.
Automatic Version Creation
- Versions are automatically created when proposals are saved with content changes
- Autosaves, revisions, and status-only changes don't create versions
- Intelligent version naming based on detected changes
- Optional version notes to document what changed and why
Version Management
- View complete version history in proposal edit screen
- Compare any two versions side-by-side
- See changes in title, content, options, pricing, billing settings, and client info
- One-click version restore (creates backup before restoring)
- Export any version as PDF
- Delete versions manually or automatically (configurable limits)
Version Cleanup
- Set version limit per proposal (0 = unlimited)
- Enable auto-cleanup to remove old versions automatically
- Manual cleanup button to clean up all proposals at once
Digital Signatures
Allow clients to digitally sign proposals when accepting them.
Signature Capture
- Drawing: Clients can draw signatures using mouse or touch
- Typing: Clients can type signatures using signature-style fonts
- Clear button to reset signature
- Mobile-friendly touch interface
Legal Audit Trail
- Signature image stored as base64
- Timestamp of signature
- IP address of signer
- User agent information
- Signature type (drawn or typed)
Display
- Signatures displayed on accepted proposals (frontend and admin)
- Signature preview in admin meta boxes
- Proper CSS constraints to prevent overflow
Multi-Currency & Multi-Language Support
Multi-Currency
Support for 20+ currencies with configurable formatting:
- USD, EUR, GBP, JPY, CAD, AUD, CHF, CNY, INR, BRL, MXN, ZAR, SGD, NZD, and more
- Set default currency globally in settings
- Override currency per-proposal
- Configurable formatting: symbol position, decimal/thousands separators, decimal places
- Automatic currency mapping to Invoice Ninja
Multi-Language
Per-proposal language selection with automatic locale switching:
- Support for all WordPress languages
- Set default language globally
- Override language per-proposal
- Automatic locale switching when rendering proposals
- Localized JavaScript strings
- RTL language support
Proposal Template Library (Premium)
Create reusable proposal templates for faster proposal creation.
Creating Templates
- Go to Proposals > Template Library
- Click "Create Template" or "Save as Template" from proposal builder
- Enter template name and category
- Configure template items, pricing, and settings
- Save template for reuse
Using Templates
- Click "Use Template" in proposal builder
- Browse templates by category
- Preview template contents before applying
- Choose whether to apply template title/description
- Template items are automatically added to proposal
Template Management
- Edit, duplicate, or delete templates
- Organize templates by category
- Search templates by name
- Add items from Options Library to templates
Client Portal
Full-featured client portal with dashboard, proposals, invoices, messages, documents, and profile. Clients log in with their WordPress user account and access everything in one place.
Setup
- Create a page and add the shortcode
[proposal_client_portal]
- In Proposals > Settings, assign the Client Portal page so the plugin knows where to send clients
- Link clients to WordPress users (see below) so they can log in and see their data
Linking Clients to WordPress Users
- Edit a client: Proposals > Clients β open a client
- Use the WordPress User meta box to link to an existing user (with
proposal_client role) or click Create user from client
- When creating a user, you can choose which contact to use if the client has multiple contacts
- All proposals tied to any of the clientβs contact emails are synced to that user automatically
- An email with login credentials is sent to the client when a new user is created
Portal Sections
- Dashboard: Overview and quick links to proposals, invoices, messages, documents
- Proposals: List of proposals with status; open via token link or view summary
- Invoices: Invoices from Invoice Ninja; status, amounts, due dates; payment links for unpaid; PDF download for paid
- Messages: Send and receive messages with administrators
- Documents: Shared documents and files (page is block-editor friendly so you can edit it in WordPress)
- Profile: Client profile and account details
Invoice Access (Premium)
- View all invoices linked to the client
- Filter by status; use payment links for unpaid invoices; download PDF for paid invoices
Invoice Ninja Integration (Premium)
When a proposal is accepted:
- An invoice is automatically created in Invoice Ninja
- For recurring proposals, a recurring invoice is created (frequency matches proposal: monthly, quarterly, yearly)
- One-time fees can be separated into a separate one-time invoice
- The invoice includes all selected options, quantities, and the proposal description as public notes
- Email confirmation is sent to the client (and invoice can be sent to customer if configured)
Invoice Settings (Integrations Tab)
- Non-recurring invoice status: Create new invoices as Draft or Save and Send to Customer
- Invoice due date (days): Number of days until the invoice is due (e.g., 30)
Client Synchronization (Premium)
Configure how clients sync between WordPress and Invoice Ninja:
- Sync Direction: Choose bidirectional, Invoice Ninja β WordPress only, or WordPress β Invoice Ninja only
- Auto-sync from Invoice Ninja: Enable automatic scheduled synchronization
- Sync Frequency: Set sync frequency (Hourly, Twice Daily, Daily)
- Manual Sync: One-click buttons to sync all clients from/to Invoice Ninja
Email Template Customization
Customize email templates in Proposals > Settings > Email Design:
- Template types: Proposal Sent, Proposal Accepted, Proposal Declined, Proposal Reminder
- Rich text editor with preview functionality
- Customize email subjects and content
- Reminder diagnostics and testing tools
- Option to attach PDF to proposal emails
- Logo and branding customization
Reminder System
Automatic reminder emails are sent based on proposal expiration dates so you can follow up with clients in a timely way.
How It Works
- Reminders are sent only for proposals that have an expiration date and are in Sent or Viewed status
- Schedule: 1 day or less β every 12 hours; 3 days or less β daily; 7 days or less β every 2 days; 14 days or less β every 3 days; more than 14 days β weekly
- Content uses the Proposal Reminder template in Proposals > Settings > Email Design
Testing & Diagnostics
- Use the reminder diagnostics tools in the Email Design tab to test reminder content and see when the next reminder would run
Hooks & Filters
Actions
proposal_system_after_acceptance - Fires when proposal is accepted
proposal_system_client_synced - Fires after client sync completes
proposal_system_user_synced - Fires after user sync completes
proposal_system_version_created - Fires when a proposal version is created
proposal_system_version_restored - Fires when a proposal version is restored
proposal_system_version_deleted - Fires when a proposal version is deleted
Filters
proposal_system_before_invoice_create - Filter invoice data before sending to Invoice Ninja
proposal_system_calculate_total - Filter for custom calculation logic
proposal_system_before_client_sync - Filter client data before syncing
proposal_system_currencies - Filter to add custom currencies
proposal_system_invoice_ninja_currency_mapping - Filter currency mapping to Invoice Ninja
proposal_system_skip_version_creation - Filter to skip version creation for specific saves